使用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);
我正在 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);