2011-08-09 53 views
65

我想將文件'A'的內容複製到文件'B'。 複製完成後,我想清除文件'A'的內容,並想從頭開始寫入。 我無法刪除文件'A',因爲它與其他任務有關。如何刪除文本文件的內容而不刪除自己

我能夠使用java的文件API(readLine())複製內容,但不知道如何清除文件的內容並將文件指針設置爲文件的開頭。

回答

99

只是打印一個空字符串到文件後類RandomAccessFile中的setLength()方法。

+14

寫入不是必需的,如果另一個任務將文件打開,則打開可能不可能。 – EJP

+0

writer.close ??我們在2017!另外,不需要打印(「」),因爲文本將被覆蓋 – FSm

+1

@Andro,注意時間戳和標籤?那時我記得這是在Android設備上清空文件的最可靠的方法。 – Vlad

2

向文件寫入空字符串,刷新和關閉。確保文件寫入器不處於附加模式。我認爲應該這樣做。

13

簡單,什麼都不寫!

PrintWriter writer = new PrintWriter(file); 
writer.print(""); 
writer.close(); 
+2

-1:java.lang.String中不具有toByteArray()方法,無論是在6也不7. http://docs.oracle.com/javase/6/docs/api/java /郎/字符串。 –

+0

它存在很長一段時間:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes() – kmas

+1

寫入在這裏是不必要的。 – EJP

4

從A複製到再次B打開文件中寫入模式,然後寫入空字符串在它

25

您想要的:

FileOutputStream writer = new FileOutputStream("file.txt"); 
writer.write(("").getBytes()); 
writer.close(); 
+4

這實際上是唯一正確的答案,因爲它不會刪除文件。所有其他答案都可以。 – EJP

+0

我需要這個,因爲我想清除[logback-android](https://github.com/tony19/logback-android)庫創建的日誌文件。如果我手動刪除日誌文件,那麼該庫不夠聰明,如果有日誌寫入,則重新創建它,直到我重新啓動我的應用程序。所以我用這個方法和工作。我沒有學習太多。這是最好的方法嗎?請指教。 – Yeung

+0

funnily,我有一個生產問題,因爲當我從.apk文件安裝的應用程序調用fileOnSdCard.setLength(0)時,Intenso卡類10凍結(並強制電池重置)。他們的4級卡從來沒有顯示出這個問題。 – Poutrathor

-2

你可以寫一個通用的方法(爲時已晚,但下面的代碼將幫助您/其他)

public static FileInputStream getFile(File fileImport) throws IOException { 
     FileInputStream fileStream = null; 
    try { 
     PrintWriter writer = new PrintWriter(fileImport); 
     writer.print(StringUtils.EMPTY); 
     fileStream = new FileInputStream(fileImport); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } finally { 
      writer.close(); 
     } 
     return fileStream; 
} 
+4

這不會創建一個空文件,它會創建一個文件,其中包含一個空字節。 – EJP

2

只要寫:

FileOutputStream writer = new FileOutputStream("file.txt"); 
48

我不相信你竟然有向該文件寫入一個空字符串。

PrintWriter pw = new PrintWriter("filepath.txt"); pw.close();

+8

你對此正確。所有顯示寫入的答案都是錯誤的或至多是多餘的。 – EJP

+15

剛剛'新的PrintWriter(「filepath.txt」)。close();'? – Supuhstar

+1

來自java文檔的引用「如果文件存在,那麼它將被截斷爲零大小」 – BrettG

3

一個用於Java的最佳伴侶是Apache Projects並請參考。有關文件相關操作,請參閱Commons IO項目。

下面的一行代碼將幫助我們使文件變空。

FileUtils.write(new File("/your/file/path"), "") 
0

您可以使用

FileWriter fw = new FileWriter(/*your file path*/); 
PrintWriter pw = new PrintWriter(fw); 
pw.write(""); 
pw.flush(); 
pw.close(); 

切記不要使用

FileWriter fw = new FileWriter(/*your file path*/,true); 

真正的FileWriter的構造將使追加。

3

如何如下:

File temp = new File("<your file name>"); 
if (temp.exists()) { 
    RandomAccessFile raf = new RandomAccessFile(temp, "rw"); 
    raf.setLength(0); 
} 
1

如果您不需要使用作家之後,最簡單最乾淨的做法就是這樣:

new FileWriter("/path/to/your/file.txt").close(); 
0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE); 
FileWriter fw = new FileWriter(fos.getFD()); 
fw.write(""); 
+0

嗨,您可以使用{}讓您的代碼易於閱讀 –

+0

歡迎來到SO!請使用內置的格式化工具讓您的代碼更易於閱讀。 –