【问题标题】:How do I create a new line in a properties file using java?如何使用 java 在属性文件中创建新行?
【发布时间】:2015-06-25 06:37:54
【问题描述】:

我正在尝试使用 java 更新属性文件。该文件的结构应如下所示:

IDs = \
11:22:33:44:55:66:77,\
11:22:33:44:55:66,\
1C:BA:8C:20:C5:0A

但我得到的只是:

IDs=11\:22\:33\:44\:55\:66\:77\:88,\\\njj\:jj\:jj\:jj\:jj\:jj\:jj\:jj,\\\n55\:55\:55\:55\:55\:55\:55\:55,\\\n

我只是找不到很多关于用 java 编写属性文件的信息,我完全迷路了。另一个问题是“:”会自动转义,我该如何防止呢? 我正在使用的代码:

String str = "";
for (User u : values){
    str = str + u.getId() + ",\\"+"\n";
}
prop.setProperty("IDs", str);

【问题讨论】:

  • 向我们展示你的程序代码。
  • 几乎肯定不会解决您的问题,但请使用 StringBuilder 而不是字符串连接。像 Java 这样的重复连接是非常浪费的。
  • @moreON:不再。我已经看到 + 的循环在现代 JVM 上比 StringBuilder 更快
  • @Venyla:不要在循环中添加"\\"。只添加"\n" 就足够了。
  • @a_horse_with_no_name 这是编译器还是 jit 优化?无论哪种方式,它都是一种看起来不那么无辜的东西,它可以隐藏意想不到的 O(n^2),这很好。

标签: java properties-file


【解决方案1】:

属性文件中行尾的反斜杠表示属性值在下一行继续。所以你的财产相当于

IDs = 11:22:33:44:55:66:77,11:22:33:44:55:66,1C:BA:8C:20:C5:0A

这就是您应该设置为属性值的值。不幸的是,Properties 永远不会像您希望的那样在多行上格式化它。它会将您存储在属性中的反斜杠和 \n 作为属性值的一部分,从而将它们转义。因此,您应该做的就是接受该值位于一行,并将属性值设置为"11:22:33:44:55:66:77,11:22:33:44:55:66,1C:BA:8C:20:C5:0A"

【讨论】:

  • 您绝对可以将换行符放入属性值中。当您使用 getProperty() 时,它将作为换行符出现
  • 好的,我认为这是可以接受的,但是“:”仍然被转义了?有什么解决办法吗?
  • 读取属性文件时不转义。你不应该关心这个。
  • @a_horse_with_no_name: 对,如果你在一个属性值中加入一个换行符,它会在文件中被转换成一个反斜杠,后面跟着一个 n,当读取文件。但是 OP 确实希望在文件的单独行上写入单行属性值,因此这不起作用。
【解决方案2】:

只需使用commons-io 库,true 中的(sting1, file, true); 告诉函数追加。

  String sting1 = "IDs = \\";
    String sting2 = "11:22:33:44:55:66:77,\\";
    String sting3 = "11:22:33:44:55:66,\\";
    String sting4 = "1C:BA:8C:20:C5:0A";

    File file = new File("{filePath}");

    FileUtils.writeStringToFile(sting1, file, true);
    FileUtils.writeStringToFile(sting2, file, true);
    FileUtils.writeStringToFile(sting3,file,true);
    FileUtils.writeStringToFile(sting4,file,true);

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多