使用Files API读写.txt文件,和使用BufferredWriter不一样吗?

Using Files API to read and write to .txt file, not the same as using BufferredWriter?

我正在 Hyperskill 上做 Text Editor 项目,除第二阶段测试 #18 外,一切都很好。我花了我的钱来看这个问题的解决方案,但我不明白我的代码和成功的代码之间有什么区别。我希望有人能解释为什么它有效而我的无效?

我得到的错误是; "Text should be the same after saving and loading same file"

据我所知是一样的。我 select 使用 CTRL-A 的所有文本(在 JTextArea 中)它 selects 换行符和 spaces.

我看不出我的代码和一些通过测试的正确解决方案之间有什么区别。我的代码执行所需的操作,输入/输出以字节为单位,应该收集任何白色 space 字符或换行符,对吗?

谁能告诉我(保存到文件方法)我不成功的代码之间的最终区别是什么 -

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);