Java File.renameTo()
는 특히 Windows에서 문제가있는 것 같습니다. 현상태대로 API 문서가 말한다
이 방법의 동작의 많은 측면은 본질적으로 플랫폼에 따라 다릅니다. 이름 바꾸기 작업은 한 파일 시스템에서 다른 파일 시스템으로 파일을 이동할 수없고 원 자성이 아닐 수 있으며 대상 추상 경로 이름을 가진 파일이있는 경우 성공하지 못할 수 있습니다. 이미 존재 함. 반환 값은 항상 이름 바꾸기 작업이 성공했는지 확인해야합니다.
필자의 경우 업그레이드 절차의 일부로 기가 바이트의 데이터 (다양한 하위 디렉터리 및 다양한 크기의 파일)를 포함 할 수있는 디렉터리를 이동 (이름 변경)해야합니다. 이동은 항상 동일한 파티션 / 드라이브 내에서 이루어 지므로 디스크의 모든 파일을 물리적으로 이동할 필요가 없습니다.
이동할 디렉토리의 내용에 대한 파일 잠금 이 없어야 하지만, 여전히 renameTo ()가 작업을 수행하지 못하고 false를 반환합니다. (나는 아마도 일부 파일 잠금이 Windows에서 다소 임의로 만료 될 것이라고 추측하고 있습니다.)
현재 복사 및 삭제를 사용하는 대체 방법이 있지만 폴더 크기에 따라 시간 이 많이 걸릴 수 있기 때문에 짜증납니다 . 또한 잠재적으로 몇 시간 동안 기다리지 않도록 사용자가 폴더를 수동으로 이동할 수 있다는 사실을 단순히 문서화하는 것을 고려하고 있습니다. 그러나 올바른 방법은 분명히 자동적이고 빠른 것이 될 것입니다.
그래서 제 질문은 일반 JDK 또는 일부 외부 라이브러리를 사용하여 Windows 에서 Java로 빠른 이동 / 이름 변경을 수행하는 대안적이고 안정적인 접근 방식을 알고 있습니까 ? 또는 주어진 폴더와 모든 내용 (아마도 수천 개의 개별 파일)에 대한 파일 잠금을 감지하고 해제 하는 쉬운 방법을 알고있는 경우 에도 괜찮습니다.
편집 :이 특별한 경우 renameTo()
에는 몇 가지만 더 고려 하여 사용하지 않은 것 같습니다 . 이 답변을 참조하십시오 .