这是一段表现奇怪的代码片段。
private void saveToFile() throws IOException {
JFileChooser fileChooser = new JFileChooser();
File name = null;
int returnVal = fileChooser.showSaveDialog(fileChooser);
//Sets the variable name to the file the user selected.
if (returnVal == JFileChooser.APPROVE_OPTION) {
name = fileChooser.getSelectedFile();
//Exits the method if the user selected cancel in the dialog box.
}else if (returnVal == JFileChooser.CANCEL_OPTION) {
return;
}
//Writes the text data to a file.
try {
//Writes the text in the textArea to the file which was selected.
RandomAccessFile raf = new RandomAccessFile(name, "rw");
raf.writeBytes(textArea.getText());
raf.close();
//Display the stack trace and an error message if the file could not be written.
} catch (IOException e) {
e.printStackTrace();
System.err.print(" Cannot process file....\n");
}
//Displays the filename of which the file was saved to.
String fileName = name.getName();
super.setTitle("XText: " + fileName);
//The text has now been saved and is no longer considered changed.
changed = false;
}
此代码导致的问题是当我保存已更改的文件时,返回到自身,当大小小于打开时,保存的文本与显示的文本不同。我将向您展示所有3个文本示例。
打开文件文本。
现在是所有好人来帮助他们的国家的时候了 现在是所有好人来帮助他们的国家的时候了 现在是所有好人来帮助他们的国家的时候了 快速的棕色狐狸跳过懒狗 快速的棕色狐狸跳过懒狗 快速的棕色狐狸跳过懒狗。
已更改为。
现在是所有好人来帮助他们的国家的时候了 现在是所有好人来帮助他们的国家的时候了 快速的棕色狐狸跳过懒狗 快速的棕色狐狸跳过懒狗。
保存文件中的文字。在另一位编辑中打开。
现在是所有好人来帮助他们的国家的时候了 现在是所有好人来帮助他们的国家的时候了 快速的棕色狐狸跳过懒狗 快速的棕色狐狸跳过懒狗。
懒惰的狗回来了。如果将文本保存到新文件,则文本保存正常。谢谢你的帮助。
答案 0 :(得分:2)
为什么你认为它会被截断?你打开现有文件(例如大小1000)进行写入,写入(例如)800字节 - 大小仍然是1000,现在只有最后200个包含垃圾!
如果你想坚持使用随机访问文件,请在打开后立即尝试file.setLength(0)。
否则,我建议:
FileWriter fw = new FileWriter(name);
fw.write(text);
fw.close();