簡體   English   中英

寫入后的空白文件?

[英]Blank file after writing to it?

所以我一直在嘗試為我的一個朋友寫一個Bukkit插件,由於某種原因,配置生成不起作用。 有問題的代碼如下,我很樂意添加人們需要幫助我的任何代碼。 當我運行該程序時,創建的配置文件最終為空白。 測試文件很好(我通過簡單地注釋掉刪除文件的行來測試)但是一旦我嘗試獲得多行就失敗了。 有人可以幫忙嗎?

PrintWriter out = new PrintWriter(new FileWriter(config));
out.println("########################################");
out.println("#  hPlugin is written by newbiedoodle  #");
out.println("########################################");
out.println("#   -----  Plugin config file  -----   #");
out.println("########################################");
out.println("NOTE: Do not edit the config file besides changing the values - it may result in errors.");
out.println("--------------");
out.println("Strikes before being banned?");
out.println("3");
out.println("Godmode?");
out.println("true");
out.println("First time running the plugin?");
out.println("true");
out.println("Curse protection?");
out.println("true");
out.println("Emergency shelter?");
out.println("true");
out.println("Path building?");
out.println("true");
out.println("Blocked words/phrases (Separate with comma)");
out.println("[censored]");
out.close();
System.out.println("Successfully wrote defaults to config");

整個事情都包含在try / catch循環中,以捕獲可能彈出的任何錯誤。 我覺得我錯過了一些非常明顯的東西,但我找不到它是什么。

  • config是一個File對象,它具有它需要的路徑,所以我不認為就是這樣

  • 我讓程序幾乎完全分開,這樣我就可以准確地告訴用戶錯誤發生的位置,因此文件就在try / catch之外創建。

你需要打電話......

out.flush();

......就在你打電話之前......

out.close();

PrintWriter使用內存中的緩沖區來更有效地使用磁盤。 您需要調用flush()來告訴PrintWriter寫入您的數據。

您很可能不止一次運行此操作並且您正在寫入一個文件並檢查另一個文件。 我懷疑文件名是相同的,但目錄,可能基於工作目錄不是你想象的那樣。

在這種情況下關閉調用flush,因為PrintWriter使用BufferedWriter而另一個Writer類沒有緩沖。

  251       public void flush() throws IOException {
  252           synchronized (lock) {
  253               flushBuffer();
  254               out.flush();
  255           }
  256       }
  257   
  258       public void close() throws IOException {
  259           synchronized (lock) {
  260               if (out == null) {
  261                   return;
  262               }
  263               try {
  264                   flushBuffer();
  265               } finally {
  266                   out.close();
  267                   out = null;
  268                   cb = null;
  269               }
  270           }
  271       }

完成后,您需要刷新或關閉流。 在退出之前,兩者都非常重要。 關閉將自動調用flush()。

暫無
暫無

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

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