RandomAccessFile对象的奇怪行为

时间:2009-10-12 22:58:39

标签: java

这是一段表现奇怪的代码片段。

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

打开文件文本。

现在是所有好人来帮助他们的国家的时候了   现在是所有好人来帮助他们的国家的时候了   现在是所有好人来帮助他们的国家的时候了   快速的棕色狐狸跳过懒狗   快速的棕色狐狸跳过懒狗   快速的棕色狐狸跳过懒狗。

已更改为。

现在是所有好人来帮助他们的国家的时候了   现在是所有好人来帮助他们的国家的时候了   快速的棕色狐狸跳过懒狗   快速的棕色狐狸跳过懒狗。

保存文件中的文字。在另一位编辑中打开。

现在是所有好人来帮助他们的国家的时候了   现在是所有好人来帮助他们的国家的时候了   快速的棕色狐狸跳过懒狗   快速的棕色狐狸跳过懒狗。

懒惰的狗回来了。
  快速的棕色狐狸跳过懒狗   快速的棕色狐狸跳过懒狗。

如果将文本保存到新文件,则文本保存正常。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

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

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

否则,我建议:

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