Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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_Properties_Jvm_Classpath - Fatal编程技术网

Java 有没有办法更改我的类路径中的属性文件?

Java 有没有办法更改我的类路径中的属性文件?,java,properties,jvm,classpath,Java,Properties,Jvm,Classpath,我的类路径中有一个属性文件。我的要求是根据从参数中获得的一些输入来更改此文件中的某些属性。参数的性质决定了我是否需要更改属性,如果需要,还决定了要更改哪些属性。问题是,所有类路径条目都是在应用程序启动时加载的,因此从应用程序内部进行更改不会产生任何影响。我如何克服这个问题 我能想到的一个可能的解决方案是不在类路径中添加这个属性文件,而是在修改完成后添加。它可行吗?什么是好的解决方案?这个文件是否在类路径上并不重要。它是一个文件:如果覆盖其内容,它将发生更改。内存中没有任何副本可以在启动时神奇地复

我的类路径中有一个属性文件。我的要求是根据从参数中获得的一些输入来更改此文件中的某些属性。参数的性质决定了我是否需要更改属性,如果需要,还决定了要更改哪些属性。问题是,所有类路径条目都是在应用程序启动时加载的,因此从应用程序内部进行更改不会产生任何影响。我如何克服这个问题


我能想到的一个可能的解决方案是不在类路径中添加这个属性文件,而是在修改完成后添加。它可行吗?什么是好的解决方案?

这个文件是否在类路径上并不重要。它是一个文件:如果覆盖其内容,它将发生更改。内存中没有任何副本可以在启动时神奇地复制。这与加载的类非常不同,这些类在运行时可能需要更改

可以将符合正确格式的属性文件读入对象中。您可以这样做,根据需要使用对象更改属性,然后将其写回文件。检查该类中的
存储
加载
方法。请注意,如果使用的版本采用
输出/输入流
,则编码是硬编码的。如果文件的编码不是ISO-8859-1,请使用带有适当的
编写器/读取器的方法

下面是一个示例代码:

Properties p = new Properties();
File f = new File("file");
InputStream in = new FileInputStream(f);
p.load(in);
p.put("key", "blah");

OutputStream out = new FileOutputStream(f);
// If no comments p.store(writer);
p.store(out, "properties");

您需要首先从属性文件中删除该属性,然后重新定义它。他们无法直接修改属性文件

以下是一个例子:

   Properties pproperties = new Properties();

    if (properties.containsKey("key1")) {

                        properties.remove("key1");
                        properties.setProperty("key1", "value1");
                        properties.store(new FileOutputStream("file.properties"), null);
                    }

取决于应用程序的部署方式。如果您的属性文件位于jar中,您将无法直接更改该属性文件,因为它已打包并压缩到存档中。您可以像其他人提到的那样,将这些属性加载到对象中,然后存储/写出到外部位置,可能是基于URL的位置。URL很方便,因为它可以让您访问几乎任何位置,并且它有一个漂亮的openStream()方法来加载属性。然后,应用程序可以在加载时查找新文件,如果无法从新位置读取/加载,则默认为应用程序启动版本

是的,我的工具将打包在一个罐子里。因此,我试图将文件复制到另一个位置(最好是temp),然后在那里进行更改