2013-07-19 65 views
2

我試圖從JOptionPane獲得輸入,並使用FileWriter類將用戶鍵入的文本存儲到文本文件中。爲了確保用戶輸入的內容被存儲在I中寫了一個system.out和我在JOptionPane中輸入的內容。不幸的是,當我打開.txt文件時,我沒有輸入任何內容!順便說一句,我輸入的文件路徑是正確的。java中的FileWriter沒有寫入txt文件

這是我的代碼。幫我!

String playername = JOptionPane.showInputDialog("What Will Be Your Character's Name?"); 
System.out.println(playername); 
try { 
    FileWriter charectersname = new FileWriter("/Users/AlecStanton/Desktop/name.txt/"); 
    BufferedWriter out = new BufferedWriter(charectersname); 
    out.write(playername); 
    } 
catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

看起來你需要關閉你的'BufferedWriter'。 –

+0

我該怎麼做? – user2540802

+3

調用'out.close()'。 –

回答

1

你應該關閉你的作家在finally塊。

BufferedWriter out = null; 

try { 
    out = new BufferedWriter(new FileWriter("/Users/AlecStanton/Desktop/name.txt/")); 
    out.write(playername); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     if(out != null){ 
      out.close(); 
     } else { 
      System.out.println("Buffer has not been initialized!"); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+1

請注意,'out'變量作用域就在'try'代碼塊中。你的答案應該重構OP的代碼。 –

+0

是的,已編輯。 :) –

+0

這裏的一個常見問題是,你需要檢查是否被初始化。否則,你的finally {}塊可能會拋出一個NPE –

10

緩衝作家只會寫出來時,他們完全或他們正在關閉時(故名緩衝)。

所以,你可以這樣做:

out.close(); 

這將刷新緩衝區並關閉它。如果你只是想清理一下,但保持開放的進一步寫入(例如,想象你正在寫一個日誌文件),你可以這樣做:

out.flush(); 

你很可能想這樣做,這樣的收尾工作時資源。例如

BufferedWriter out = ... 
try { 
    out.write(...); 
} 
catch (Exception e) { 
    // .. 
} 
finally { 
    out.close(); 
} 

或者可能使用try-with-resources構建體中的Java 7,其(坦率地說)是更可靠的,以圍繞編寫代碼。

+0

我做到了,它不工作。 – KeepMove

3

帶有try()自動關閉的Java 7版本。

try (BufferedWriter out = new BufferedWriter(
     new FileWriter("/Users/AlecStanton/Desktop/name.txt"))) { 
    out.write(playername); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

心靈.txt後留出的/