2011-05-23 33 views
1

我已經替換了很多字符串並輸出了結果,現在我試圖將這些行寫入文本文件。這就是我所做的。創建了一個新的文件:從System.out.println寫入文件

File newfile = new File("/Users/Bill/Desktop/newfile.txt"); 
    if (newfile.exists()) { 
     System.out.println("File exists"); 
    } else { 
     newfile.createNewFile(); 
     System.out.println("New file created"); 

    } 

然後我試圖寫入創建的文件的System.out.println的結果(線[1]);

try { 
    WriteToFile newFile = new WriteToFile(newfile, true); 
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i]) 
    } 

    catch (IOException e) { 
     System.out.println("Error."); 
    } 

雖然我沒有得到我期待的。有什麼建議麼?

將writeToFile:

public class WriteToFile { 
private String path; 
private boolean append = false; 

public WriteToFile(String filename) { 
    path=filename; 
} 

public WriteToFile(String filename, boolean appendfile){ 
    path=filename; 
    append=appendfile; 
} 

public void write(String text) throws IOException { 
    FileWriter filewrite = new FileWriter(path, append); 
    PrintWriter print = new PrintWriter(filewrite); 

    print.printf("%s" + "%n", text); 
    print.close(); 
} 
} 
+1

您需要閱讀一本好的Java書籍,例如Core Java。 – SLaks 2011-05-23 02:34:35

+0

提供堆棧跟蹤。 – sudmong 2011-05-23 02:35:22

+0

顯然'WriteToFile'不起作用。顯示該課程的來源。 – Femi 2011-05-23 02:33:07

回答

1

每次調用WriteToFile.write時,它重新打開寫入文件,截斷文件的原始內容。您應該在構造函數中打開一次文件(並將PrintWriter存儲在一個字段中),然後添加一個close方法,該方法對PrintWriter調用close

在主叫方,這樣做:

WriteToFile writer = new WriteToFile(filename); 
try { 
    // writer.write(...); 
} finally { 
    writer.close(); 
} 

:由在finallyclose電話,可以確保即使在異常導致的功能提前退出文件被關閉。

+0

我會試試看,謝謝 – lrvilnius 2011-05-23 02:48:43

0

看看代碼中FileWriter構造函數的第二個參數。

FileWriter filewrite = new FileWriter(path, append); 

看,它說「追加」。猜猜它的作用。如果您不確定,請閱讀the documentation

現在,看看你如何初始化append

private boolean append = false; 

此代碼完全按預期行事。這只是開發商的錯。修復它:)

+0

不,重新打開每個寫入文件仍然是一個壞主意,即使您以附加模式打開它。 (另外,它不是可移植的,Windows沒有附加模式,例如---它是用at-end模式模擬的。) – 2011-05-24 11:52:25

0

只需在系統上使用方法設置fileName System.setOut(fileName);

然後,只要我們想使用System.out.println()打印,它將直接打印到您提到的fileName。

+0

只是文件名不起作用。 請參閱此帖:https://stackoverflow.com/a/13358204/2933389 – 2017-10-21 05:59:54