2013-07-31 30 views
0

後我會先放我的代碼:無法刪除文件時,它被寫入

@Post 
public Representation post(InputStream zip) throws Throwable { 
    createFile(zip, "C:/temp"); 
    return new StringRepresentation("File uploaded"); 
}  

public void createFilee(InputStream zipStream, uploadedFileLocation) throws Exception { 
    try { 
     writeToFile(zipStream, uploadedFileLocation); 
     FileUtils.forceDelete(new File(uploadedFileLocation)); 
     } catch (Exception e) { 
      throw e; 
     } 
} 


private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) { 
    try { 
     OutputStream out = new FileOutputStream(new File(uploadedFileLocation)); 
     int read = 0; 
     byte[] bytes = new byte[1024]; 

     out = new FileOutputStream(new File(uploadedFileLocation)); 
     while ((read = uploadedInputStream.read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
     } 
     out.flush(); 
     out.close(); 
     uploadedInputStream.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

當我將文件發送到我的服務器,它不能被刪除。當使用FileUtils.forceDelete()時,它說它不能刪除該文件。當服務器嘗試使用文件utils刪除文件後,仍然可以手動刪除該文件。爲什麼它不能自己刪除它?有任何想法嗎?謝謝

編輯:難道問題是POST的InputStream是活着的,直到POST返回?所以,即使我打電話來刪除文件,該流仍然通過POST保持活動狀態?這甚至有可能嗎?

+0

可能是文件權限問題? –

+0

我注意到有時關閉文件,然後立即嘗試訪問它們可能會導致某些機器上有時會出現奇怪的行爲,例如防病毒打開文件,以便在關閉文件之後執行某些操作。我知道這是一個糟糕的長期解決方案,但看看在嘗試刪除之前是否添加睡眠可以解決問題。 –

+0

難道問題是POST之後的InputStream處於活動狀態直到POST返回?所以,即使我打電話來刪除文件,該流仍然通過POST保持活動狀態?這甚至有可能嗎? –

回答

1

在我有限的Windows體驗它可以是兩件事情

我會檢查 1)防病毒軟件正在試圖掃描文件 2)有些種索引器(系統或定製一個)正試圖索引該文件。

您可以使用像processExplorer這樣的工具來查看哪個進程保留文件描述符。 http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

+0

問題可能是POST的InputStream在POST返回之前是活動的嗎?所以,即使我打電話來刪除文件,該流仍然通過POST保持活動狀態?這甚至有可能嗎? –