java - 无需 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();
}
}
解决方案
您可以使用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) {
// ...
}
推荐阅读
- python-3.x - 如何解决赋值前引用的局部变量并正确返回模板中的表单数据?
- rest - rest api 嵌套结构怎么表达?
- angular - Angular:div ngIf* 中的条件自定义管道
- python - 船舶到海岸线的距离(以海里为单位)
- apache-flink - 如果我的 Flink 应用程序需要高并行接收器,最佳实践是什么?
- selenium - Selenium 不支持的命令扩展问题
- javascript - d3液态水图从d3v3到v4的转换
- java - 如何在我的 Spring MVC 应用程序 war 文件之外配置 log4j.xml 文件
- python - `time.sleep()` 和 `pygame.time.wait()` 有哪些替代方法?
- ios - iOS 应用在每台设备上看起来都不一样,难以理解自动布局/约束