我正在做 文本编辑 项目在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的方式略有不同,但我只能看到它是将字节转换成字符串,或者反之。
如果我们假设你的路径名是正确的,那么有可能两种不同的写法使用的是不同的编解码器。
String#getBytes 使用平台默认的字符集。
文件.newBufferedWriter 使用UTF8。
所以,如果你的平台默认不是utf8,那么你可能会写入不同的字节。也许可以试试。
string.getBytes(StandardCharsets.UTF_8);