Java:部署后在资源中保存文件时出错
我的程序有一个从资源读取/写入文件的功能。这个功能我已经顺利测试过了。 例如,我将某些内容写入文件,重新启动并再次加载,我可以再次读取该数据 但在我导出到jar文件后,我在编写文件时遇到了问题。以下是我编写文件的代码: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
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文件的想法。正如我所说,您的程序甚至可能没有这样做的适当权限。将您的数据保存到其他地方!