gpt4 book ai didi

java - RandomAccessFile 对象的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 08:36:41 27 4
gpt4 key购买 nike

这是一段行为异常的代码。

    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 个文本示例。

打开的文件文本。

现在是所有好人来援助他们国家的时候了。
现在是所有好人来援助他们国家的时候了。
现在是所有好人来援助他们国家的时候了。
敏捷的棕色狐狸跳过了懒狗的背。
敏捷的棕色狐狸跳过了懒狗的背。
敏捷的棕色狐狸跳过了懒狗的背。

更改为。

现在是所有好人来援助他们国家的时候了。
现在是所有好人来援助他们国家的时候了。
敏捷的棕色狐狸跳过了懒狗的背。
敏捷的棕色狐狸跳过了懒狗的背。

已保存文件中的文本。在另一个编辑器中打开。

现在是所有好人来援助他们国家的时候了。
现在是所有好人来援助他们国家的时候了。
敏捷的棕色狐狸跳过了懒狗的背。
敏捷的棕色狐狸跳过了懒狗的背。

懒狗回来了。
敏捷的棕色狐狸跳过了懒狗的背。
敏捷的棕色狐狸跳过了懒狗的背。

如果将文本保存到新文件中,则可以很好地保存文本。

最佳答案

为什么您希望它会被截断?您打开现有文件(例如大小 1000)进行写入,在那里写入(例如)800 字节 - 大小仍然是 1000,只是最后 200 个现在包含垃圾!

如果您想坚持使用随机访问文件,请在打开后立即尝试 file.setLength(0)。

否则,我建议:

FileWriter fw = new FileWriter(name);
fw.write(text);
fw.close();

关于java - RandomAccessFile 对象的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1557396/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com