Java保存文本文件

Java保存文本文件,java,Java,我有一个JFileChooser,它被设置为一个set Save对话框和一个jTextArea,我可以在这里写东西,我的问题是当我保存它时,文本不会被保存。知道我做错了什么吗 private void saveAsButtonMouseClicked(java.awt.event.MouseEvent evt) { SaveAs saveasbtn= new SaveAs(); int retri

我有一个JFileChooser,它被设置为一个set Save对话框和一个jTextArea,我可以在这里写东西,我的问题是当我保存它时,文本不会被保存。知道我做错了什么吗

private void saveAsButtonMouseClicked(java.awt.event.MouseEvent evt) {                                          
    SaveAs saveasbtn= new SaveAs();
    int retrival = saveOption.showSaveDialog(null);
    if (retrival == JFileChooser.APPROVE_OPTION) 
       {saveasbtn.saveAs(jTextArea2.getText(),saveOption);}
    }


 public void saveAs(String value,JFileChooser saveOption){

    try {
        FileWriter fw;
        fw = new FileWriter(saveOption.getSelectedFile()+".txt");
        fw.write(value);
    } catch (IOException ex) {
        Logger.getLogger(SaveAs.class.getName()).log(Level.SEVERE, null, ex);
    }
 }

您没有在
saveAs
方法中关闭FileWriter。使用,以便关闭写入程序并将输出写入文件。可能与其名称相反,
FileWriter
也被缓冲,尽管它的缓冲区比
BufferedWriter
小,所以内容不会立即写入磁盘。代码如下所示:

try (FileWriter fw = new FileWriter(saveOption.getSelectedFile()+".txt")) {
    fw.write(value);
} catch (IOException ex) {
    Logger.getLogger(SaveAs.class.getName()).log(Level.SEVERE, null, ex);
}

或者,您可以在catch之后添加finally块,并在那里显式调用
fw.close()
(如果关闭流,则调用
fw.flush()
是多余的)。

您可以强制
FileWriter
立即使用
fw.flush()
将所有写入的数据刷新到文件中

不要忘记在结尾处关闭文件。执行
fw.close()
后,您写入的所有数据将自动刷新到文件中,文件将安全关闭

如果使用try with资源,文件将自动刷新和保存

 public void saveAs(String value,JFileChooser saveOption) {
    try(FileWriter fw = new FileWriter(saveOption.getSelectedFile()+".txt")) {
        fw.write(value);
    } catch (IOException ex) {
        Logger.getLogger(SaveAs.class.getName()).log(Level.SEVERE, null, ex);
    }
 }
使用语法确保数据已写入

try (FileWriter fw = new FileWriter(saveOption.getSelectedFile()+".txt") {
    fw.write(value);
} catch (IOException ex) {
    Logger.getLogger(SaveAs.class.getName()).log(Level.SEVERE, null, ex);
}
您可能还希望让该
IOException
saveAs()
传播(通过向方法签名添加
抛出IOException
),或者执行类似于返回
布尔值的操作来指示写入是否成功。否则,您的程序无法判断
saveAs()
是否实际工作。

只需调用
fw.close()
即可