Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在同一个包中写入文件?_Java_File - Fatal编程技术网

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()
,这是原始海报已经有的内容。然而,这导致文件被写入他的根目录。根据我所做的一些调查,我认为他想要的通常是不可能的。