2012-10-26 3 views
1

나는 주어진 이진 파일 액세스를 쓰기 여부가 있는지 여부를 확인해야합니다. 파일 클래스 API에는 버그와 JDK7에서 수정 된 버그가 있지만 그냥 업그레이드 할 수는 없습니다. 여기 왜 FileOutputStream을 열면 이진 파일이 손상됩니까?

버그에 대한 링크입니다 :

나는 그것이 바이너리 파일을 손상하고 탐색기를 제로로 크기를 표시하고 시작할 수 없습니다 FileOutputStream 또는를 열 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6203387. 다음은 코드 스 니펫입니다.

OS : Win7에

은 이진 파일을 손상 (아무것도 기록되지 않음) 출력 스트림을 여는 이유를 내가 이해하는 데 도움이 바랍니다. 이 문제에 대한 해결 방법이 있습니까? 나는 그것이 바이너리 파일을 손상 및 FileOutputStream 또는를 열 때

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

탐색기 그것은하지 손상를 수행 제로

로 크기를 보여줍니다 여기에

는 코드입니다 파일 - 잘라냅니다. 즉 거의 확실히 당신이 원하는 무엇
fos = new FileOutputStream(file, true); 

이 코드를 보면 :

당신이 "추가"모드로 열려면

는 것을 허용하는 생성자 오버로드를 사용합니다.

앤드류는 말처럼

, 당신은 항상 너무 스트림을 닫아야합니다.

1

사용하면

new FileOutputStream(file); 

항상 파일을 자릅니다.

당신이 대신 추가 사용을 절단하지 않고 파일을 엽니 다.

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

아하 ... 고마워. – user1132809

관련 문제