java - 使用 Files API 读写 .txt 文件,和使用 BufferredWriter 不一样?
问题描述
我正在 Hyperskill 上做文本编辑器项目,除了第二阶段测试 #18 之外一切都很好。我支付了我的宝石来查看解决方案,但我无法理解我的代码和成功代码之间的区别。我希望有人能解释为什么它有效而我的无效?
我得到的错误是;“保存和加载相同文件后文本应该相同”
据我所知,它是一样的。我用 CTRL-A(在 中JTextArea
)选择所有文本,它选择换行符和空格。
我看不出我的代码和一些通过测试的正确解决方案之间有什么区别。我的代码执行所需的操作,输入/输出以字节为单位,应该收集任何空白字符或换行符,对吗?
谁能告诉我(保存到文件方法)我不成功的代码之间的最终区别是什么 -
try {
Files.write(Path.of("./"
+ textField.getText()),
textArea.getText().getBytes());
} catch (IOException ioException) {
ioException.printStackTrace();
}
这是以字节为单位写入文件,不是吗?与成功的代码相比——
String content = textArea.getText();
try (final BufferedWriter writer =
Files.newBufferedWriter(Path.of("./"
+ textField.getText()));) {
writer.write(content);
writer.flush();
} catch (IOException ioException) {
System.out.println("Cant save file" + ioException);
}
为了读取文件,我不成功的代码是 -
try {
String content = new String(Files.readAllBytes(Path.of("./"
+ textField.getText())));
textArea.setText(content);
} catch (IOException ioException) {
ioException.printStackTrace();
}
成功的代码是 -
try {
textArea.setText(new String(Files.readAllBytes(Paths.get(path))));
} catch (IOException e) {
System.out.println("Cant read file!!!");
return null;
}
有什么区别?我以稍微不同的方式使用文件,但我只能看到它正在将字节转换为字符串,反之亦然。
解决方案
如果我们假设您的路径名是正确的,那么两种不同的写入方法可能使用不同的编解码器。
String#getBytes使用平台默认字符集。
Files.newBufferedWriter使用 UTF8。
因此,如果您的平台默认值不是 utf8,那么您可能会写入不同的字节。也许试试。
string.getBytes(StandardCharsets.UTF_8);
推荐阅读
- javascript - 检查用户是否使用 cookie 登录 JWT
- java - 在 DropBoxAPI 本身中创建和编辑临时文件,然后保存/上传它
- django - 是什么导致从不同来源运行 REST 端点的处理时间差异?
- python - 如何通过调整 RGB 值来编写自定义灰度滤镜?
- node.js - 带有 Jest 的 mongo-db-memory-server
- c - 了解 main() 程序集中的 argc 和 argv
- jenkins - Jenkins - 声明式管道 - 矩阵单元中的多个键值对
- r - 先知日期格式 R
- javascript - 单击签入反应时,将行数据存储为状态中的对象数组
- java - 年复利、半年复利、季复利、月复利、日复利如何计算?