gpt4 book ai didi

java - 使用 java.nio.Files 或 java.io 类创建 java.io.BufferedWriter

转载 作者:行者123 更新时间:2023-12-01 18:00:16 25 4
gpt4 key购买 nike

这两者有什么区别?

Path path = FileSystems.getDefault().getPath("file.txt");
BufferedWriter bw = Files.newBufferedWriter(path);

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"));

这两种方法哪个更好?

最佳答案

Files.newBufferedWriter 使用的默认字符集是 UTF8,但在 JDK18 之前的 JVM 中,新的 FileWriter 将默认为您的 Java 平台系统属性 file.encoding 可能不是 UTF8。

如果您是文件的编写者和读者,那么使用 UTF8 版本是最安全的 - 使用 Files.newBufferedReader/Writer,或者向任一样式 FileReader/Writer 提供字符集参数/Files.newBufferedReader/Writer

这可以避免在多个 JDK 和/或默认字符集可能不同的位置部署相同的应用程序时出现问题,因为您可能在一个位置写入文件,而这些文件对于从不同位置读取的同一应用程序来说似乎已损坏。

从 JDK18 开始,JEP 400: UTF-8 by Default 的工作意味着 FileWriter 的默认字符集也是 UTF-8,并且以前的平台默认值存储为新的系统属性 native.encoding。如果您在 JDK18 之前的版本中使用 FileWriter 而不指定字符编码,那么在升级到 JDK18+ 之前测试和修复您的应用程序将是一个好主意。这可以通过以下方式完成:

// pre-JDK18 only:
java -Dfile.encoding=UTF-8 ...

JEP 提到了 file.encoding=COMPAT 模式,以在运行 JDK18+ 时保持 JDK18 之前的行为,以便您可以混合 JDK18 + JDK18 之前的部署,或者留出更多时间来解析字符集定义。 JEP 还建议了一种方法来确定默认字符集的传统环境驱动选择。

关于java - 使用 java.nio.Files 或 java.io 类创建 java.io.BufferedWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60648839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com