2012-11-29 234 views
1

我無法刪除Java中的文件。在我的程序中,我創建了一個文件,用它做了一些事情,然後我必須刪除它。當我調用myFile.delete()時,它返回false。我檢查了它試圖刪除的路徑及其正確性,我也擁有管理員權限(我正在使用Windows 7)。這裏是我的一段代碼,很簡單:無法刪除JAVA文件

File aux = new File(System.getProperty("user.dir")+"//tmp.ps"); 

CreatePostScript(aux.getAbsoluteFilePath()); 
SendToPrinter(); 

try{ 
    aux.delete(); 
} 
catch(SecurityException ex){ 
    ex.printStackTrace(); 
} 

編輯,我已經閱讀了文件對象的某些屬性:

canRead() returns false 
canWrite() returns false 
exists() returns false 
getPath() returns the_actual_path_of_the_file 
isFile() returns false 
+1

你得到的異常是什麼 – developer

+0

他不會例外,'delete()'返回false。 – looper

+0

possiblity duplicate http://stackoverflow.com/q/991489/668970 – developer

回答

1

當你正在對文件進行處理,很可能是一個OutputStream仍然開放。在嘗試刪除文件之前撥打out.close();

+0

什麼流?我只是創建文件並使用它的路徑通過Runtime.getRuntime()執行一個命令exec – Joel

+0

好吧,在嘗試刪除它之前文件是否存在? – Reimeus

2

你是從一些IDE裏面做的嗎? IDE可能持有文件句柄。 嘗試下載Unlocker並查看誰拿着手柄。

+0

我使用Netbeans – Joel

+0

+1來解鎖鏈接。謝謝! –

+0

Unlocker說沒有程序鎖定文件 – Joel

1

檢查您是否提供user.dir屬性思想-D命令行參數。 並使用File.pathSeparator而不是//

+0

感謝您的提示,但我認爲這不是問題,getPath()函數返回的文件路徑是正確的。 – Joel

+1

爲什麼在文件名前添加'//'?在Windows文件分隔符是'\\\'。 – ice

0

在您的代碼中,我看到您未在刪除之前關閉流,關閉流並刪除文件。

+0

什麼流?我只是創建文件並使用它的路徑通過Runtime.getRuntime()執行一個命令exec – Joel

+0

你在文件創建後調用方法,這些方法做什麼, – developer

+0

CreatePostScript()方法調用exec()函數傳遞文件路徑作爲參數。該方法本身不對文件做任何工作,如果文件路徑沒有對該文件做任何事情,我使用File類來處理文件路徑 – Joel

1

您可能會考慮使用Java 7的NIO2 API進行操作。當返回一個成功值時,它實際上是throws an exception,當某些東西阻止它執行操作時。

+1

我已經使用Unlocker建議在另一個答案和文件沒有鎖定。 – Joel

+0

謝謝,我沒有注意到那一個。刪除了答案的那部分。 –