Java 如何在同一个包中写入文件?
我有以下代码:Java 如何在同一个包中写入文件?,java,file,Java,File,我有以下代码: try (OutputStream outputStream = new FileOutputStream(PROPERTIES_FILE_PATH)) { properties.setProperty("test", "test"); properties.store(outputStream, null); } 使用PROPERTIES\u FILE\u PATH=“fileName.PROPERTIES”
try (OutputStream outputStream = new FileOutputStream(PROPERTIES_FILE_PATH)) {
properties.setProperty("test", "test");
properties.store(outputStream, null);
}
使用PROPERTIES\u FILE\u PATH=“fileName.PROPERTIES”
这将在项目的根目录中创建一个文件。我发现避免这种情况的唯一方法是放置文件的绝对路径,这意味着:
src/main/java/com/comany/fileName.properties
但是人们告诉我,在IDE之外,在“现实生活”中,这是行不通的。。。因为jar文件中没有src/main…
这样的东西。
那么解决方案是什么呢?您通常不会修改内部存储的文件。相反,您应该在JAR中存储一个默认文件,并将任何修改存储为外部文件
您可以使用
Class.getResourceAsStream()
来访问JAR文件中的非代码资源。您可以这样做,并使用set方法setParameters()
来编写它
public class Configuration {
private Properties parameters;
private static Configuration instance = null;
private Configuration() {
parameters = new Properties();
try {
parameters.load(getClass().getClassLoader().getResourceAsStream("fileName.proooooperties"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static Configuration getInstance() {
return instance == null ? new Configuration() : instance;
}
public static void writeProperties(String fileName) {
try{
FileOutputStream oFile = new FileOutputStream("fileName.properties", true);
parameters.setProperty("test", "testing");
parameters.store(oFile, "comments");
oFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public String getParameter(String name) {
return parameters.getProperty(name);
}
public void setParameters(String name, String value) {
parameters.setProperty(name, value);
}
}我最终创建了一个配置文件,我把属性文件的路径放在了项目之外。你可以用jar
将文件写在同一个文件夹下,但人们告诉我,在IDE之外这是行不通的,在现实生活中
你自己试过了吗?技术上,您可以编写一个临时文件,然后使用内置的ZipFile
实用程序将其保存到jar中。但我真的不建议这样做。虽然这可能是一项有趣的运动。但不要部署类似的东西。如果希望在应用程序停止运行后保存数据,则必须将数据存储在某个位置。您显示的不是绝对路径。绝对路径以/
或``开头。无论如何,您希望文件在jar中显示在哪里?此方法返回一个输入流,而OP希望写入文件,而不是从中读取。是的,但尝试建议一种替代方法,如写入内部文件并不是最理想的选择getResourceAsStream
返回一个输入流。OP想写入文件,而不是从中读取。我明白了,源代码更新了。感谢您的提醒据我所知,parameters.setProperty
仅在properties对象中设置属性。它不会使用parameters.store
将properties对象保存到文件中,而这正是OP希望执行的操作<代码>参数。store需要一个outputStream,而getResourceAsStream
返回一个inputStream。添加了writeProperties()
,这是原始海报已经有的内容。然而,这导致文件被写入他的根目录。根据我所做的一些调查,我认为他想要的通常是不可能的。