본문 바로가기

닷컴's_열공/JAVA

java.io.FIle의 renameTo관련...

처리하기 힘들었는데..ㅎㅎㅎ
좋은 자료를 발견 했다..ㅎㅎㅎ
------------------------------------------------------------------

자바에서 파일을 임시 디렉토리에서 실제 디렉토리로 이동시키기 위해서
java.io.File의 renameTo함수를 사용하여 처리하도록 하였습니다.

...

     boolean rename = tempFile.renameTo(storedFile);
     if (rename) {
      tempFile.delete();
     }

...


그런데 특정환경에서 renameTo에서 불특정하게 false를 return하는 경우가 발생했습니다.


renameTo사용시 false로 return되는 경우는 권한이 문제가 되는 경우나,

파일시스템이 다른경우 (예를 들면 C:/에서 D:/로..복사),

또는 파일lock 인 경우에 문제가 된다고 인터넷에 나와 있습니다만

권한도 있고 파일시스템도 같고 아무 문제없는것 같은데도 불구하고

renameTo에서 false값이 나온다고 한다면 도대체 무엇이 문제가 될까요?


Sun에서는 위와 같은 현상은 버그가 아니라고 하고 개발자들간에 여러 이야기가 있는것 같습니다.
그리고 자바독에 다음과 같은 설명을 추가해놓았습니다.


Renames the file denoted by this abstract pathname.
Many aspects of the behavior! of this method are inherently platform-dependent:
The rename operation might not be able to move a file from one filesystem to another,
it might not be atomic, and it might not succeed if a file with the destination abstract pathname already exists.
The return value should always be checked to make sure that the rename operation was successful.


대략 renameTo는 전적으로 플랫폼 의존적이다...하나의 파일시스템에서 다른 파일시스템으로 복사가 안될수도 있다.....중략..


결론적으로 사용된 코드가  NFS나 다른 파일시스템인경우나 기타 플랫폼에 따라서 될수도 있고 안될수도 있는 이상한 상황이 발생되지 않도록 파일을 복사하는 copy메소드를 만들어 사용하는것이 바람직하다고 하겠습니다...