2010-01-06 3 views
8

마지막 게시물을 무시하고 문제의 원인을 발견했습니다. 사용하고 있습니다renameTo()를 사용하지 않고 파일 이름 바꾸기 - Java

a.renameTo(b) 

b가없는 경우. 존재하지 않는 이유는 기호 링크가 있기 때.에 b가 /usr/name/folder/file이면 symlink가 해당 디렉토리에 있기 때문에 b는 실제로 /mnt/MountTest입니다.

그럼, 문자열 값을 사용하여 Java에서 파일의 이름을 바꾸는 다른 방법이 있습니까? 그렇지 않은 경우 어떻게 이름 변경 절차를 다르게 할 수 있습니까?

답변

5

같은 파일 시스템에있는 경우 이름을 바꿉니다.

renameTo()가 실패하면 새 위치로 복사 한 다음 원본을 삭제해야합니다.

3

문제는 심볼릭 링크가 관련되어 있지 않다는 것입니다. 문제는 파일 시스템간에 원자 적으로 이름을 바꿀 수 없다는 것입니다. 메타 문제는 Java 파일 작업이 잘못 설계되어 적절한 예외가 발생하지 않으며 오류가 발생해도 오류 코드가 표시되지 않습니다. 에 대해

1

방법 : 내가 생각

a.renameTo(new File("/your/path/here/"); 
+0

가 작동하지 않습니다 ... 이름 바꾸기는 "mv"를 모방하는 방식으로 사용됩니다. 기본적으로 한 디렉토리에서 다른 디렉토리로 파일을 이동합니다. – Hristo

+1

@Hristo : 사실, 그게 바로 저에게 문제가 된 원인입니다. renameTo를 "mv" . mv는 파일 시스템을 인식하지만 renameTo는 그렇지 않습니다. 한 디스크/파티션에서 다른 파티션으로 mv를 시도하면 renameTo가하지 않는 cp 및 rm 시퀀스의 역할을합니다. – Ken

4

당신은 혼란 것들입니다. java.util.File은 일부 파일 시스템의 파일을 나타내지 않습니다. 파일 경로를 나타냅니다.

5

파일의 이름을 바꾸는 것도 파일 시스템 전체에서 매우 문제가됩니다. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4073756을 참조하십시오. 버그 보고서의 주관자들은 샘플 코드를 게시했으며 또한 Process.exec를 사용할 수 있다고 지적했습니다. 아파치 코 몬즈 IO와 구글 구아바 모두 안전하게뿐만 아니라 파일을 이동하기위한 유틸리티를 가지고 : 파일이 새 파일 경로에 존재하지 않기 때문에

+1

아파치 링크가 죽었습니다. 업데이트하십시오. – saikosen