【问题标题】:How to change the Properties.store() divider symbol from "=" to ":"?如何将 Properties.store() 分隔符从“=”更改为“:”?
【发布时间】:2012-01-08 15:27:37
【问题描述】:

我最近发现了 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 个 Google 页面,但没有人遇到类似问题。 我还检查了 Javadoc,发现没有任何函数可以让我在不为自己编写类的情况下更改它。 我现在想使用Properties,因为它在那里并且很容易使用。 保存文件后,我还想到将所有= 替换为:,但也许有人有更好的建议?

【问题讨论】:

    标签: java properties divider colon


    【解决方案1】:

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

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

    【讨论】:

    • 这是个好主意,我将使用 Properties 读取文件并使用 FileWriter 将其存储回来,谢谢你现在就试试。
    • 但是,请检查 Properties.saveConvert() 和 loadConvert() 如何转义特殊字符。这对您来说可能是一个重大问题。
    【解决方案2】:

    这里有新想法

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


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

    如果您查看 Properties 的源代码,(我正在查看 Java 6)store() 调用 store0()。现在,不幸的是,store0 是私有的,不受保护,并且“=”作为魔术常数给出,而不是从属性中读取的东西。它还调用了另一个私有方法 saveConvert(),它也有很多神奇的常量。

    总的来说,我将此代码评为 D- 质量。它几乎打破了良好代码和良好风格的所有规则。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多