2012-10-26 104 views
1

我需要檢查給定的二進制文件是否具有寫入權限。文件類API有一個bug並且在JDK7中修復了,但是我不能只升級它。爲什麼打開FileOutputStream到二進制文件會破壞它?

這裏是鏈接到bug:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6203387

當我打開它會損壞二進制文件和資源管理器顯示其大小爲零而無法啓動它一個FileOutputStream。這是代碼片段。

OS:Win7的

請幫助我理解爲什麼剛剛打開的輸出流(不寫任何東西)破壞二進制文件。有沒有解決這個問題的方法?

這裏是代碼片段:

private boolean hasWriteAccess(File file) { 
    FileOutputStream fos = null; 
    try { 
     fos = new FileOutputStream(file); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     if(fos != null) { 
      try { 
       fos.close(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
     } 
     return false; 
    } 
    return true; 
} 

回答

6

當我打開它破壞了二進制文件,一個FileOutputStream資源管理器顯示爲零

它不腐敗的大小文件 - 它截斷它。

如果你想在「追加」模式下打開它,使用構造函數重載它允許:

fos = new FileOutputStream(file, true); 

看你的代碼,這是幾乎可以肯定,你想要做什麼。

正如安德魯所說,你應該總是也關閉流。

1

當您使用

new FileOutputStream(file); 

始終截斷文件。

如果你想打開文件而不截斷它,你可以使用append代替。

new FileOutputStream(file, true).close(); 
+1

啊哈......非常感謝。 – user1132809

相關問題