首页 > 解决方案 > 使用 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;
}

有什么区别?我以稍微不同的方式使用文件,但我只能看到它正在将字节转换为字符串,反之亦然。

标签: javainputstreambufferedreaderoutputstream

解决方案


如果我们假设您的路径名是正确的,那么两种不同的写入方法可能使用不同的编解码器。

String#getBytes使用平台默认字符集。

Files.newBufferedWriter使用 UTF8。

因此,如果您的平台默认值不是 utf8,那么您可能会写入不同的字节。也许试试。

string.getBytes(StandardCharsets.UTF_8);

推荐阅读