Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 如何将Properties.store()分隔符符号从"=&引用;“到”&引用;?_Java_Properties_Divider_Colon - Fatal编程技术网

Java 如何将Properties.store()分隔符符号从"=&引用;“到”&引用;?

Java 如何将Properties.store()分隔符符号从"=&引用;“到”&引用;?,java,properties,divider,colon,Java,Properties,Divider,Colon,我最近发现了java.util.Properties,它允许我从配置中写入和读取,而无需为配置编写自己的函数 我很兴奋,因为它很容易使用,但后来我在存储修改后的配置文件时发现了一个漏洞 以下是我的代码,目前非常简单: FileWriter writer = null; Properties configFile = new Properties(); configFile.load(ReadFileTest.class.getClassLoader().getResourceAsStream("

我最近发现了
java.util.Properties
,它允许我从配置中写入和读取,而无需为配置编写自己的函数

我很兴奋,因为它很容易使用,但后来我在存储修改后的配置文件时发现了一个漏洞

以下是我的代码,目前非常简单:

FileWriter writer = null;
Properties configFile = new Properties();
configFile.load(ReadFileTest.class.getClassLoader().getResourceAsStream("config.txt"));

String screenwidth = configFile.getProperty("screenwidth");
String screenheight = configFile.getProperty("screenheight");
System.out.println(screenwidth);
System.out.println(screenheight);
configFile.setProperty("screenwidth", "1024");
configFile.setProperty("screenheight", "600");
try {
    writer = new FileWriter("config.txt" );
    configFile.store(writer, null);
} catch (IOException e) {
    e.printStackTrace();
}
writer.flush();
writer.close();
我注意到的问题是,我试图编辑的配置文件存储如下:

foo: bar
bar: foo
foobar: barfoo
但是,
properties.store(writer,null)
之后的输出如下:

foo=bar
bar=foo
foobar=barfoo
我编辑的配置文件不适用于我的程序,它适用于需要将配置文件设置为上面所示格式并使用
作为分隔符的其他应用程序,否则它会将配置重置为默认值

有人知道如何轻松地改变这一点吗

我现在搜索了前5个谷歌页面,但没有发现一个有类似问题。 我还检查了Javadoc,发现没有函数允许我在不为自己编写类的情况下更改它。 我现在想使用
Properties
,因为它在那里而且很容易使用。
我还想在保存文件后用
替换所有
=
,但可能有人有更好的建议?

不要使用不是为任务设计的工具-不要在此处使用
属性。相反,我只写你自己的——应该很容易

您仍然可以使用
Properties
实例作为“存储”,但不要将属性序列化为文本。相反,只需使用
FileWriter
,遍历属性,然后自己编写这些行-作为
key+”:“+value

此处的新想法

您关于将=转换为:的评论让我想到:Properties.store()会写入流。您可以使用内存中的ByteArrayOutputStream,在写入文件之前在内存中进行适当的转换,然后写入文件。对于Properties.load()也是如此。或者您可以插入filterxxx。(我可能会在记忆中这样做)


我在研究子类化有多难。这几乎是不可能的-(

如果你看属性的源代码,(我看的是Java 6)store()调用store0()。不幸的是,store0是私有的,不受保护,“=”是作为一个魔法常量给出的,而不是从属性读取的。它调用另一个名为saveConvert()的私有方法,该方法也有很多魔法常量

总的来说,我把这段代码评为D-quality。它几乎打破了好代码和好风格的所有规则


但是,它是开源的,因此,从理论上讲,您可以将一组代码复制并粘贴(并改进!)到您自己的BetterProperties类中。

这是一个非常好的主意,我将使用属性读取文件,并使用FileWriter将其存储回去,谢谢您现在就尝试。不过,请检查Properties.saveConvert()和loadConvert()是如何实现的转义特殊字符。这对您来说可能是一个重要问题。