Java:部署后在资源中保存文件时出错

Java:部署后在资源中保存文件时出错,java,deployment,resources,Java,Deployment,Resources,我的程序有一个从资源读取/写入文件的功能。这个功能我已经顺利测试过了。 例如,我将某些内容写入文件,重新启动并再次加载,我可以再次读取该数据 但在我导出到jar文件后,我在编写文件时遇到了问题。以下是我编写文件的代码: URL resourceUrl = getClass().getResource("/resource/data.sav"); File file = new File(resourceUrl.toURI()); FileOutputStream output = new Fil

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

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

URL resourceUrl = getClass().getResource("/resource/data.sav");
File file = new File(resourceUrl.toURI());
FileOutputStream output = new FileOutputStream(file);
ObjectOutputStream writer = new ObjectOutputStream( output);
运行此代码时,我注意到命令提示符中出现错误: 因此,我的数据无法保存。(我知道这一点,因为重新启动应用程序后,一切都没有改变!!!)

请帮我解决这个问题


谢谢:)

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


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

您需要将文件作为输入流读/写,以便从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;
    }

难道你不能复制stacktrace并粘贴为文本吗?我认为主要的问题是,在开发过程中,你正在写入一个真实的文件,而在“生产”过程中,一切都是jar'd up的,你的Resources是jar中一个无法写入的文件。getResourceAsStream()将有助于读取该文件,我同意——但他无法写入该文件,因此需要一种完全不同的方法。你能告诉我更多关于
java.util.zip
的信息吗。你的意思是我解压文件,然后再次编写和解包?我真正的意思是你放弃了完全更新jar文件的想法。正如我所说,您的程序甚至可能没有这样做的适当权限。将您的数据保存到其他地方!