2012-08-06 98 views
0

我正在嘗試創建一個重命名數據收集程序中的日誌文件的方法,但有一個IOException在嘗試訪問日誌文件後很短時間內被拋出(很少)一次(用於第二筆數據)。冗餘使用.delete()

我不知道是否是因爲通話到.delete()如果我要確保文件在訪問之前關閉。我真的被困在這一個。這是我正在研究的方法。

public static void renameFile(String oldName, String newName) throws IOException 
{ 
    File srcFile = new File(oldName).getAbsoluteFile(); 
    boolean bSucceeded = false; 
    try 
    { 
     File destFile = new File(newName).getAbsoluteFile(); 
     if (destFile.exists()) 
     { 
      if (!destFile.delete()) 
      { 
       throw new IOException(oldName + " was not successfully renamed to " + newName + ", could not perform !destFile.delete()");     
      } 
     } 
     if (!srcFile.renameTo(destFile)) 
     { 
      throw new IOException(oldName + " was not successfully renamed to " + newName + ", could not rename source file");   
     } 
     else 
     { 
      bSucceeded = true; 
     } 
    } 
    finally 
    { 
     if (bSucceeded) 
     { 
      srcFile.delete(); 
     } 
    } 
} 
+1

你可以發表你的異常的全堆棧跟蹤? – Sujay 2012-08-06 20:34:50

回答

2

該代碼似乎正常,但正如您所提到的,您必須確保在調用此方法之前關閉該文件。在Unix上,這可以工作,但在Windows上,你definetly不能重命名或刪除其具有開放的文件描述符的文件。

+0

感謝那些真正幫助!我將確保在文件上實現.close() – user1579905 2012-08-07 22:14:17