2013-04-02 138 views
49

以下代碼不會生成文件(我無法在任何地方看到該文件)。 缺什麼?如何寫入文本文件Java

try { 
    //create a temporary file 
    String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(
     Calendar.getInstance().getTime()); 
    File logFile=new File(timeLog); 

    BufferedWriter writer = new BufferedWriter(new FileWriter(logFile)); 
    writer.write (string); 

    //Close writer 
    writer.close(); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 
+1

1-在關閉它之前嘗試調用'writer.flush()'。 2-你應該使用'finally'塊來確保'Writer'已經關閉,即使有異常 – MadProgrammer

+0

你要在哪裏寫文件?您需要指定timeLog的完整路徑。例如它是在C:\?下 –

+1

@ user717630不是。沒有路徑,文件將被寫入當前的「working」目錄,通常是程序在其中執行的目錄... – MadProgrammer

回答

102

我覺得你的期望和現實不匹配(但是他們曾經當;))

基本上,您認爲該文件是書面和該文件實際上是寫不相等(嗯,也許我應該寫一個if聲明;))

public class TestWriteFile { 

    public static void main(String[] args) { 
     BufferedWriter writer = null; 
     try { 
      //create a temporary file 
      String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()); 
      File logFile = new File(timeLog); 

      // This will output the full path where the file will be written to... 
      System.out.println(logFile.getCanonicalPath()); 

      writer = new BufferedWriter(new FileWriter(logFile)); 
      writer.write("Hello world!"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       // Close the writer regardless of what happens... 
       writer.close(); 
      } catch (Exception e) { 
      } 
     } 
    } 
} 

另外請注意,你的榜樣將覆蓋現有文件。如果你想將文本文件追加,你應該做到以下幾點來代替:

writer = new BufferedWriter(new FileWriter(logFile, true)); 
+1

不應該最後一部分是:'writer = new BufferedWriter(new FileWriter(logFile,true));'?由於append參數是FileWriter而不是BufferedWriter。 –

+0

@third_eye你正在破壞我的樂趣;)很好的接吻,我已經更新了答案 – MadProgrammer

+0

這是更安全的,並建議還指定編碼:'新的FileWriterWithEncoding(logFile,「UTF-8」,true)'左右。 –

14

我想補充一點,以MadProgrammer的答案。執行命令

writer.write(string); 

一個可能會注意到,換行符被省略或在書面文件跳過即使它們在調試過程中出現,或者如果相同的文字打印時

在多行寫入的情況下到用,

System.out.println("\n"); 

因此,終端,整個文本來作爲文字的一個大的塊,其是在大多數情況下不希望的。 換行符可以依賴於平臺的,所以最好使用

String newline = System.getProperty("line.separator"); 

,然後使用新行變量,而不是「\ n」來獲得從Java系統屬性這個角色。這將以您想要的方式獲得輸出。

+1

writer.newLine()直接寫入一個行分隔符,取自System.getProperty(「line.separator」) – Mike

13

在Java 7中現在可以做

try(BufferedWriter w = ....) 
{ 
    w.write(...); 
} 
catch(IOException) 
{ 
} 

和w.close會自動完成

0

您可以嘗試一個Java庫。 FileUtils,它有很多寫入文件的功能。

3

它不會創建文件,因爲您從未真正創建過該文件。你爲它做了一個對象。創建一個實例不會創建該文件。

File newFile = new File("directory", "fileName.txt"); 

你可以這樣做是爲了一個文件:

newFile.createNewFile(); 

你可以這樣做是爲了一個文件夾:

newFile.mkdir(); 
0

它的工作和我在一起。確保在timeLog旁邊添加「.txt」。我在一個用Netbeans打開的簡單程序中使用它,它將程序寫入主文件夾(構建器和src文件夾所在的位置)。