2013-02-26 172 views
1

我想寫在一個文件中,如果它存在,我想釋放內容,並從文件的開頭寫這個代碼,我使用,但我現在不怎麼做。如何釋放文件的內容?

try { 
      File f = new File(testPath + "/logtest.txt"); 
      if (f.exists()) { 
       f.delete();                        
       BufferedWriter bw = new BufferedWriter(new FileWriter(f, true)); 
       bw.write(text); 
       bw.newLine(); 
       bw.close(); 
      } else { 
       BufferedWriter bw = new BufferedWriter(new FileWriter(f, true)); 
       bw.write(text); 
       bw.newLine(); 
       bw.close(); 

      } 
     } catch (Exception e) { 

     } 
+1

什麼不工作? – vikingsteve 2013-02-26 10:56:13

+0

「免費提供內容」是指用您將要放置的新內容覆蓋文件中的當前內容嗎? – Savlon 2013-02-26 10:56:44

+0

如果你想覆蓋 – Logarith 2013-02-26 10:59:13

回答

1

的第二個參數FileWriter構造函數允許指定是否要追加到或覆蓋內容:

公衆的FileWriter(檔案文件,布爾追加)拋出IOException異常

構建給File對象的FileWriter對象。如果第二個參數 爲真,那麼字節將被寫入文件末尾 而不是開頭。

參數:

  • 文件 - 一個文件對象寫入
  • 追加 - 如果爲true,則 字節將被寫入到文件的結尾而不是開始

在你的代碼中,你通過了true。只需將其更改爲false

BufferedWriter bw = new BufferedWriter(new FileWriter(f, false)); 

編輯:如果你在你的問題給出的代碼是一個循環內,這裏是你應該如何改變它:

try { 
    File f = new File(testPath + "/logtest.txt"); 
    if (f.exists()) { 
     f.delete(); 
    } 
    BufferedWriter bw = new BufferedWriter(new FileWriter(f, false)); 

    for/while (...) { // your loop here 
     // extract your text 
     bw.write(text); 
    } 

    bw.close(); 
    f.close(); 
} catch (Exception e) { 
    // handle exceptions... 
} 
+0

當我在我的文件中將布爾值更改爲false時,我只有最後一行,而不是所有我寫的東西。 – user2043602 2013-02-26 11:03:07

+0

從你的代碼片段中看不到這是一個循環。解決方案只是將打開和關閉文件的行放在循環之外。這樣,每次都不會被覆蓋。 – Wookai 2013-02-26 11:04:46

+0

查看我剛剛修改循環的編輯。 – Wookai 2013-02-26 11:33:17

1

你必須使用

BufferedWriter bw = new BufferedWriter(new FileWriter(f, false)); 

您正在使用的FileWriter構造函數中的第二個參數append是一個標誌witch控制文件是否應在第一次寫入之前被截斷或t他應該附上數據。

see javadoc

0

這樣做將覆蓋任何在那裏早。

String fileName = "foo.txt"; 
    FileWriter fw = null; 
    try{ 
     fw = new FileWriter(fileName); 
     fw.write("haha"); 
    } catch (IOException e) { 
     System.err.println("Could not write to the file."); 
    }finally{ 
     if(fw!=null) 
      try { 
       fw.close(); 
      } catch (IOException e) { 
       System.err.println("Could not close the file."); 
      } 
    } 

如果要追加數據使用

fw.append(); 
+0

我試過了,但我剛剛在我的文件中的最後一行 – user2043602 2013-02-26 11:25:28

0

試試下面的代碼。

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 


public class FileClient { 

    public static void main(String[] args) { 
     try { 

      String content = "Hello test"; 

      File file = new File("D:\\filename.txt"); 

      // if file doesnt exists, then create it 
      if (!file.exists()) { 
       file.createNewFile(); 
      } 

      FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
      BufferedWriter bw = new BufferedWriter(fw); 
      bw.write(content); 
      bw.close(); 

      System.out.println("Done"); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
0

你把你的文件刪除了,因爲你在循環中做了f.delete();

你應該做一個結構是這樣的:

File f = new File(testPath + "/logtest.txt"); 
if (f.exists()) { 
    f.delete();  
} 
BufferedWriter bw = new BufferedWriter(new FileWriter(f, false)); 

while (...) 
    String text = ...; 

    bw.write(text); 
    bw.newLine(); 
} 
bw.close(); 

創建/這種方式刪除的文件只有一次。