2013-06-12 108 views
0

我想刪除一個文件,有時我可以,有時候我不會。我這樣做:用Java刪除文件

String filePath = "C:\\Users\\User\\Desktop\\temp.xml"; 
File f = new File(filePath); 
if (f.exists()) 
{ 
    if(f.delete()) 
    System.out.println("deleted"); 
    else 
    System.out.println("not deleted"); 
} 

我認爲,當我不能刪除它是因爲它仍然在應用程序的某個地方打開。 但是,如果我不使用FileInputStreamBufferedReader,我怎麼能關閉它?因爲如果我使用這些類,我不能看到文件是否存在。或者我可以嗎?

編輯: 我剛發現我的錯誤。我這樣做:

XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(new FileOutputStream(filePath)); 

然後,關閉只是eventWriter

,我必須這樣做:

FileOutputStream fos = new FileOutputStream(filePath); 
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(fos); 

然後:

eventWriter.close(); 
    fos.close(); 

回答

1

的文件可能被其他進程打開,你可能沒有足夠的權限來刪除文件,.. 。

編輯:

我也強烈建議儘可能使用自動資源管理,以確保您的流/讀者/作者得到適當的關閉。

+0

你說的是權限嗎?我檢查了這一點,並且我有權寫入,讀取和執行。 – user2144555

+0

您是否還檢查另一個進程是否仍然存在該文件的句柄? – Fildor

+0

不可以。我怎樣才能看到? – user2144555

0

如果您使用BufferedReader類,則無法檢查是否存在,即File類的用途。您可以使用BufferedReader打開/關閉文件,並使用File進行檢查。這裏是一個例子:

String filePath = "C:\\Users\\User\\Desktop\\temp.xml"; 
File f = new File(filePath); 
if (f.exists()) 
{ 
    BufferedReader open = new BufferedReader(new FileReader(f)); // opens file 
    open.write("blah"); //writes to file 
    open.close(); // closes file 
} else { 
    System.out.println("File cannot be found"); 
} 

希望能幫助你更好地理解情況!

+0

讀者寫一個文件? close-method調用也應該在finally塊中。 – Puce

+0

哦,我看到錯誤。哈,我的意思是FileWriter!但我知道,這只是一個簡單的例子 – user2277872

1

我建議使用NIO2 Files.delete,它引發一個IOException,它解釋了爲什麼無法刪除文件。