0

我的程序具有从资源读取/写入文件的功能。这个功能我已经顺利测试过了。例如,我将某些内容写入文件,重新启动并再次加载,我可以再次读取该数据。

但是在我导出到 jar 文件后,我在写入文件时遇到了问题。这是我编写文件的代码:

URL resourceUrl = getClass().getResource("/resource/data.sav");
File file = new File(resourceUrl.toURI());
FileOutputStream output = new FileOutputStream(file);
ObjectOutputStream writer = new ObjectOutputStream( output);

当此代码运行时,我注意到命令提示符中有错误: 我的错误 所以,我的数据无法保存。(我知道是因为在我重新启动应用程序后,没有任何改变!!!)

请帮我解决这个问题。

谢谢 :)

4

2 回答 2

2

您根本无法以这种方式将文件写入 jar 文件。您从中获取的URIgetResource()不是 file:///URI,它不能传递给java.io.File's构造函数。编写 zip 文件的唯一方法是使用java.util.zip为此目的设计的类,这些类旨在让您编写整个 jar 文件,而不是将数据流式传输到其中的单个文件。在实际安装中,无论如何,用户甚至可能没有写入 jar 文件的权限。

您将需要将数据保存到文件系统上的真实文件中,或者如果文件足够小,则可能使用首选项 API。

于 2012-04-13T12:01:31.623 回答
-2

您需要将文件作为输入流读取/写入才能从 jar 文件中读取。

public static String getValue(String key)
    {
        String _value = null;
        try 
        {
            InputStream loadedFile = ConfigReader.class.getClassLoader().getResourceAsStream(configFileName);
            if(loadedFile == null) throw new Exception("Error: Could not load the file as a stream!");
            props.load(loadedFile);
        }
        catch(Exception ex){
            try {
                System.out.println(ex.getMessage());
                props.load(new FileInputStream(configFileName));
            } catch (FileNotFoundException e) {
                ExceptionWriter.LogException(e);
            } catch (IOException e) {
                ExceptionWriter.LogException(e);
            }
        }
        _value =  props.getProperty(key);
        if(_value == null || _value.equals("")) System.out.println("Null value supplied for key: "+key);
        return _value;
    }
于 2012-04-13T12:05:07.563 回答