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