2010-01-10 64 views
1

我在使用Tomcat和servlet的應用程序中工作。如何在使用Tomcat和servlet時刪除txt文件?

有一個servlet(audioProcess)接收播放的mp3文件的名稱。該servlet還處理mp3文件並將結果存儲在txt文件中。當再次調用audioProcess servlet時(使用不同的mp3文件),將會替換此txt的內容。

每次調用這個servlet時,我刪除txt,並創建一個新的(包含有關mp3文件的信息)。 txt文件的名稱始終相同。

我的問題是,txt文件永遠不會被刪除。我做什麼刪除該文件是:

File a = new File(path_clasificacion); 

if(a.exists()) 
{ 
    boolean erased = a.delete(); 
    out.println("erased?" + erased); 
} 

我第一次調用servlet的txt文件被刪除。只有第一次。刪除txt文件後,我嘗試將新信息寫入一個具有相同名稱的txt文件(存儲在相同路徑中)。發生的是舊文件沒有被擦除,新信息被添加到文件中。

爲什麼我不能刪除文件?

感謝

txt文件時使用此代碼生成:

FileWriter f = null; 
PrintWriter pw = null; 

try 
{ 
f = new FileWriter(path,true); 
pw = new PrintWriter(f); 
pw.println(info);    
} catch (Exception e) {e.printStackTrace(); 

finally 
{ 
f.close(); 
} 

回答

4

無法刪除文件,只要你有一個開放的文件句柄。

看看你的代碼,並確保close()任何流或讀者。這顯然包括確保從MP3摘要庫代碼中引用它也被關閉。

「第一次呢?」你會問。答:您從erase()調用中獲得肯定狀態,因爲刪除請求已成功傳遞到操作系統。但是,操作系統仍然在大手大腳地等待着你,最終放棄了這個文件。因此,即使是第一次,文件也沒有真正被刪除。

+0

我已經添加到我的初始描述生成txt文件的方式。 我認爲文件第一次被真正刪除時,問題在於我立即嘗試用新信息重新創建它,並且我沒有正確關閉它。 – dedalo 2010-01-11 00:21:28

+0

好吧,我明白了。也許你應該關閉'pw'而不是'f'。或者,如果你想要非常確定的話,那就按順序。 – 2010-01-11 00:35:21

+0

我已經檢查過使用的每種方法,並且我發現我沒有關閉FileReader。現在它已被修復,它可以正常工作。感謝您的建議。 – dedalo 2010-01-11 00:35:25