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

问题描述 投票:0回答:1

我正在做 文本编辑 项目在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;
}

有什么不同?我使用Files的方式略有不同,但我只能看到它是将字节转换成字符串,或者反之。

java inputstream bufferedreader outputstream
1个回答
1
投票

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

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

文件.newBufferedWriter 使用UTF8。

所以,如果你的平台默认不是utf8,那么你可能会写入不同的字节。也许可以试试。

string.getBytes(StandardCharsets.UTF_8);
© www.soinside.com 2019 - 2024. All rights reserved.