首页 > 解决方案 > 无需 unicode 转义即可读写 Java 属性

问题描述

这个问题可能已经被问和回答了 100 次,但不幸的是我没有找到适合我的问题的任何东西。

以下情况:我有一个问题,当我读取属性以更改它们然后再次写入它们时,所有特殊字符都被 unicode 转义。

例如 ":" 变成 "\:" 或 Descriptción 变成 Descriptci\u00F3n

有没有办法改变 store 方法使特殊字符不被转义?

非常感谢

这是我编写属性的代码:

  private static void writeUpdatedPropertiesFile(Properties newProperties, File sourceAndDestinationFile) {
    sourceAndDestinationFile.delete();
    try (FileOutputStream out = new FileOutputStream(sourceAndDestinationFile)) {
      newProperties.store(out, null);
    }
    catch (final IOException e) {
      e.printStackTrace();
    }
  }

标签: javapropertiesstore

解决方案


您可以使用store(Writer)代替 store(OutputStream)。您可以使用您希望的任何字符集构造一个 OutputStreamWriter:

try (Writer out = new BufferedWriter(
    new OutputStreamWriter(
        new FileOutputStream(sourceAndDestinationFile),
        StandardCharsets.UTF_8))) {

    newProperties.store(out, null);

} catch (IOException e) {
    e.printStackTrace();
}

当然,您有责任知道该文件是 UTF-8 文件,并使用 load(Reader) 而不是使用 InputStream 来读取它:

try (Reader in = new BufferedReader(
    new InputStreamReader(
        new FileInputStream(sourceAndDestinationFile),
        StandardCharsets.UTF_8))) {

    properties.load(in);
} catch (IOException e) {
    // ...
}

推荐阅读