2013-05-28 2 views
-1

다른 프로세스에서 이미 사용중인 파일에 쓰고 싶습니다.이미 사용 된 파일에 쓰기

내 질문은 : FilenotfoundException을 피하고 사용 중이지만 파일에 쓸 수있는 방법이 있습니까?

감사합니다. Oracle docs에서

+1

처럼 뭔가를 시도 할 수 있습니다 정말 자바 문제가되지 않지만 기본 OS과 관련이있다. – Keppil

+2

코드와 정확한 오류 메시지를 게시하십시오. 파일이 존재하면'FileNotFoundException'을 만나지 않아야합니다. – jlordo

+0

왜 두 프로세스의 동일한 파일을 사용하고 있습니까? 나는 그것을 할 수있는 더 좋은 방법이 있다는 것을 내기를 기꺼이합니다. –

답변

0

, 다음 점검을 수행

부울 CanWrite라고() - 파일이 현재 응용 프로그램에서 쓰기 가능한 경우에 true를 돌려줍니다를; 그렇지 않으면 false.

boolean canRead() - 현재 응용 프로그램에서 파일을 읽을 수 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다. 그렇지 않으면 false.

다른 응용 프로그램에서 파일을 사용하고있는 동안 파일에 쓸 수 있는지 묻는 경우 강제로 실행할 수는 있지만 다른 응용 프로그램의 동작에 따라 달라질 수 있습니다.

+0

그래, 내 질문에, 강제하는 방법이 있다면,하지만 당신의 대답을 주셔서 감사합니다! – user2429567

+0

필자는 이것을 사용한 적이 없지만 [** FileChannel **] (http://openjdk.java.net/projects/nio/javadoc/java/nio/channels/FileChannel.html)가 필요할 수도 있습니다. 여기 [http://www.java2s.com/Code/Java/File-Input-Output/Demonstratesfilelockingandsimplefile은 자바 파일 채널을 사용하여 파일 조작 및 쓰기 작업을 수행하는 예쁜 [** 좋은 예 **]입니다. FileChannel.htm). – kgdesouz

0

다른 프로세스가 응용 프로그램에서 사용하려는 파일에 lock을 얻은 경우 잠금이 해제 될 때까지 응용 프로그램이 특정 시간 동안 대기하는지 확인해야합니다. locking mechanismfile을 사용하는 다른 프로세스에만 의존합니다. 당신은 다른 프로세스에서 사용중인 파일에 쓸 수 있는지 여부를이

FileInputStream fin = new FileInputStream("test.txt"); 
    FileChannel channel = fin.getChannel(); 
    FileLock lock = channel.tryLock(); 
    if (lock != null) { 
     try { 
      // read the file 
     } finally { 
      lock.release(); 
     } 
    } else { 
     // some other process has locked the file for some reason 
    }