2011-09-25 6 views
5

Eclipse에서 Java 프로그램을 만들었습니다. Windows XP에서 시작했지만 최근에 업그레이드되었습니다.내 프로그램이 Win7에서 만든 파일을 삭제할 수없는 이유는 무엇입니까?

저장 메커니즘의 일부로 프로그램은 설정을 파일 settings_new.sav에 기록합니다. 문제가 해결되면 settings.sav을 삭제하고 새 이름을 이전 이름과 일치하도록 바꿉니다. winXP에서 작동하는 동안 (적어도 생각했지만 지금은 확인할 수 없음), win7에서는 파일을 생성 한 프로그램 임에도 불구하고 파일을 삭제하지 못했습니다 (프로그램의 다른 인스턴스).

파일은 Eclipse에서 가져 와서 매우 행복하게 삭제할 수 있습니다. 수동으로 삭제할 수 있습니다. 나는 내 컴퓨터의 관리자 다. 폴더는 작업 공간 폴더 안에 있고 Program Files에는 없습니다 (최종 사용자가 거기에 설치할 것인지는 모르겠습니다). 이 프로그램은 파일을 만들고 수정할 수 있습니다. 어떤 예외도 던지지 않고있어, 만약 그것을 막는 것이 윈 블럭 7이라면 그렇게 될 것이라고 생각했다.

아이디어가 있으십니까?

답변

9

java.Make의 파일 잠금 메커니즘 때문에 BufferedReader, BufferedInputStream 등의 버퍼링 스트림을 닫을 때 발생합니다.

+0

사실 Windows의 파일 잠금 메커니즘입니다. 같은 코드가 Linux에서는 잘 작동 할 것입니다. 하지만 동의합니다. 파일에 대한 액세스를 명시 적으로 닫아야 모든 곳에서 올바르게 작동해야합니다. –

+0

@ MarkRobinson : 흥미 롭습니다. 리눅스에서 스윙 어플 리케이션을 테스트해야합니다. 개발자는 JVM보다는 OS 레벨에서 문제를 예상해야합니다. – PraveenMax

+1

Windows와 Linux의 파일 잠금 의미가 다릅니다. Linux에서는 편집을 위해 열어 놓은 파일을 삭제하지 않고도 삭제할 수 있습니다. 그런 다음 문제없이 동일한 이름의 새 파일을 만들 수 있습니다. Windows에서는 다른 프로세스에서 열려있는 파일을 삭제할 수 없습니다. 이런 상황이 발생하는 방식은 메소드/액세스 유형별로 열리는 방식에 크게 달려 있습니다. 질문이 더있는 경우 Windows 사용자를 대상으로 새로운 질문을 게시하는 것이 좋습니다. –

-3

이전에는 파일을 사용하여 파일을 끝낼 때이 문제가 발생했습니다. 파일을 null로 설정해야합니다. 당신이 좋아하는 일을한다면 :

public void createFile(String path) 
{ 
    File file = new File(path); 
    file.createNewFile(); 
    file = null 
} 

당신은 당신이 시스템이 그 파일 사용을 중지 있도록를 사용하여 수행 할 때 null로 파일을 설정해야합니다. FileReader 및 FileWriter를 사용하여 동일한 작업을 수행해야합니다. 파일에 다시 액세스하려면 파일 판독기와 파일 작성자를 null로 설정해야합니다. 이것을 시도해보고 그것이 어떻게 진행되는지 알려주세요.

+2

그건 효과가 없을 것입니다. 자바 가비지 컬렉터가 나중에 가져올 수 있도록 허용하면됩니다. 나중에 정의되지 않습니다. 가비지 컬렉터가 파일을 가져 오기를 기다리지 않고 명시 적으로 파일에 대한 액세스를 닫아야합니다. –

+0

thats null로 설정하면 Java에 자동으로 가비지 수집을 설정합니다. – gsfd

+2

그것은 수집이 가능하다는 것을 의미하며 수집이 즉시 발생하지는 않습니다. 그것은 가능할 수 있지만 JVM 고유의 동작입니다. –

관련 문제