簡體   English   中英

Java保存文本文件

[英]Java save text file

我有一個JFileChooser,它設置為一個“保存”對話框,還有一個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。 使用try-with-resources,以便關閉編寫器並將輸出寫入文件。 也許與其名稱相反,但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);
}

或者,你可以添加抓后finally塊和調用fw.close()顯式存在(調用fw.flush()如果關閉流是多余的)。

您可以強制FileWriter使用fw.flush()立即將所有寫入的數據刷新到文件中。

不要忘記最后close文件。 完成fw.close() ,您寫入的所有數據將自動刷新到文件,並且該文件將被安全關閉。

如果對資源使用try,文件將被刷新並自動保存。

 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-with-resources語法確保數據被寫出。

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

您可能還想讓IOExceptionsaveAs()傳播(通過向方法簽名添加throws IOException ),或者執行其他類似返回boolean以指示寫入是否成功。 否則,您的程序將無法判斷saveAs()是否真正起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM