2011-11-11 4 views
11

이 질문은 this 질문의 성난 복제본임을 알고 있습니다. 그러나, 나는 지금 전체 페이지를 두 번 읽었고, 일부 섹션은 세 번이나, 나 인생은 내가 어떻게/어디서 대답하는지 보지 못한다!자바 6 파일 삭제

내 문제에 관해서.

나는 일하고있어 Java 6 SE를 사용하여 붙어있어 7로 업그레이드 할 수 없습니다. 파일을 만들고, 쓰고, 처리하고, 파일을 삭제해야하는 프로그램을 작성하고 있습니다. 나는 위에서 언급 한 질문을 한 사람과 똑같은 문제를 겪고 있습니다. 자바는 파일을 지우지 않을 것이고 이유를 알 수 없습니다.

코드 : 그것은 어떤 throw 가능 객체, 오류 또는 예외를 던지는되지

File f = null; 
FileWriter fw = null; 
try 
{ 
    f = new File("myFile.txt"); 
    fw = new FileWriter(f); 
    fw.write("This is a sentence that should appear in the file."); 
    fw.flush(); 
    if(f.delete()) 
     System.out.println("File was successfully deleted."); 
    else 
     System.err.println("File was not deleted."); 
} 
catch(Exception exc) 
{ 
    System.err.println(exc.getMessage()); 
} 
catch(Error er { 
    System.err.println(er.getMessage()); 
} 
catch(Throwable t) 
{ 
    System.err.println(t.getMessage()); 
} 
finally 
{ 
    fw.close(); 
} 

(내가 어떤 모든 가장자리 경우를 배제하기 위해 사람들을 포함). 두 번째 print 문 ("File was not deleted.")이 콘솔에 인쇄되고 있습니다. 저는 Windows 7에서이 프로그램을 실행하고 있는데 전체 권한 (rwx)이있는 폴더에 쓰고 있습니다.

내가 조회 한 질문에 사용자는 자신의 질문에 답변했지만, 그렇게 겸손한 의견으로는 그렇게 간단하지 않습니다. 어쨌든, 나는 그것을 이해하는 데 어려움을 겪고 있습니다. 그/그녀는 BufferedReader을 사용하여 FileInputStream을 사용하는 것이 그/그녀의 차이를 만든다는 사실을 암시하는 것 같지만, 어떻게 적용되는지는 알 수 없습니다.

자바 7은 java.nio.file.Files 클래스의 도입으로이 문제를 해결 한 것으로 보입니다. 그러나 자바 컨트롤을 사용할 수없는 이유로 자바 7을 사용할 수 없습니다.

이 질문에 대한 다른 답변자는 이것이 Java의 "버그"이며 명시 적으로 System.gc() 등의 호출과 같은 모든 종류의 우회를 제공한다는 것을 암시합니다.이 모든 것을 시도했지만 작동하지 않습니다.

어쩌면 누군가 새로운 관점을 추가하고 나를 생각할 수 있습니다.

+0

나는 이것이 중복이라고 생각하지 않습니다. 다른 질문에서 제시된 해결책을 시도했지만 도움이되지 않았기 때문에 그 원인이 다를 수 있습니다. – finnw

+2

먼저 닫습니다. 그리고 ... "Java 6를 사용하여 붙어 있습니까?" JDK7에서 실행되는 단일 회사를 모르겠습니다. 나는 1.4와 1.5에 많은 것을 안다. 행운을 비네. –

+0

당신이 말한 것을 반대하십시오 : BufferedReader 대신 FileInputStream을 사용하면 다른 게시물의 사용자에게 효과적입니다. 왜 그것이 적용되는지에 관해서는, 거기에있는 어떤 의견은 Java에서 그것의 버그를 제안합니다. –

답변

17

현재 열려있는 FileWriter에서 계속 참조하는 파일을 삭제하려고합니다().

이 시도 : 열 왼쪽에는 파일 처리기가없는 경우

f = new File("myFile.txt"); 
fw = new FileWriter(f); 
fw.write("This is a sentence that should appear in the file."); 
fw.flush(); 
fw.close(); // actually free any underlying file handles. 
if(f.delete()) 
    System.out.println("File was successfully deleted."); 
else 
    System.err.println("File was not deleted."); 
8

만 파일을 삭제할 수 있습니다. FileWriter을 사용하여 파일을 열었으므로 파일을 삭제하기 전에 닫아야합니다. 즉 f.delete을 실행해야합니다. fw.close

아래 코드를 사용해보십시오. fw가 null 인 경우 발견 된 모든 가능한 버그를 방지하기 위해 변경했습니다.

File f = null; 
FileWriter fw = null; 
try { 
    f = new File("myFile.txt"); 
    fw = new FileWriter(f); 
    fw.write("This is a sentence that should appear in the file."); 
    fw.flush(); // flush is not needed if this is all your code does. you data 
       // is automatically flushed when you close fw 
} catch (Exception exc) { 
    System.err.println(exc.getMessage()); 
} finally {// finally block is always executed. 
    // fw may be null if an exception is raised in the construction 
    if (fw != null) { 
     fw.close(); 
    } 
    // checking if f is null is unneccessary. it is never be null. 
    if (f.delete()) { 
     System.out.println("File was successfully deleted."); 
    } else { 
     System.err.println("File was not deleted."); 
    } 
}