2011-08-17 6 views
3

renameTo() 사용에 이상한 문제가 있습니다. /mnt/desttest으로 이름을 바꿀 수없는 이유는 모르지만 /home/kit.ho/desttest으로 바꿔도됩니다. 그러나 이미 모든 쓰기 권한을/mnt /에 부여합니다. 특별한 이유가없는 동안 반환 값은 false입니다. 이유는 누가 알겠는가?파일을 다른 파일 시스템으로 이름을 바꾸는 방법은 무엇입니까?

import java.io.File; 
public class renameFile { 
    public static void main(String[] args) { 
     File sourceFile = new File("/home/kit.ho/test"); 
     File targetFile1 = new File("/mnt/desttest"); 
     System.out.println("source file is exist? " + sourceFile.exists() + ", source file => " + sourceFile); 
     System.out.println(targetFile1 + " is exist? " + targetFile1.exists()); 
     System.out.println("rename to " + targetFile1 + " => " + sourceFile.renameTo(targetFile1)); 
     System.out.println("source file is exist? " + sourceFile.exists() + ", source file => " + sourceFile); 
    } 
} 

편집 : 마지막으로, 어떤 대답을 기반으로, 파일 시스템에 걸쳐에서 작동하지 않는 기능을 이름 바꾸기, "뮤직 비디오"와 같은 외부 명령을 호출하지 않음으로써이 문제에 어떤 해결 방법이?

+0

'/ mnt'는 별도의 파티션입니까? –

+0

'mv /home/kit.ho/test/mnt/ desttest' 문제없이 할 수 있습니까? – Martin

+0

@ 기계 : yes/mnt는 별도의 파티션에 있습니다. –

답변

4

이 방법을 파일을 복사하고 전화하는 방법을 만듭니다 (즉, renameTo()가 작동하지 않을 때 내가 사용하는 기능) :

void copyFile(File source, File destination) throws Exception { 
    FileInputStream inputStream = new FileInputStream(source); 
    FileOutputStream outputStream = new FileOutputStream(destination); 
    int b = -1; 
    while ((b = inputStream.read()) != -1) { 
    outputStream.write(b); 
    } 
    inputStream.close(); 
    outputStream.close(); 
} 

편집 : 당신은, 파일을 이동을 한 후 원래 삭제하려면 부.

편집 : 더 나은 될 것 FileUtils.moveFile() from Apache Commons library

+0

'moveFile()'이 최선의 방법입니다. 제시된 구현은 버그가 있고 (스트림을 적절하게 닫지 못함) 비효율적입니다 (단일 바이트 읽기). 이러한 일들이 간결함을 위해 중단 되었다면, 그것은 지적되어 져야했습니다. – musiKk

+0

죄송합니다. 나는 이것을 간략하게하기 위해 간략하게 설명해야한다. –

6

파일 시스템 (파티션) 전체에서 이름을 변경할 수 없습니다.

+0

oops. .. 해결 방법이 있습니까? –

+1

@ Kit Ho : 모든 것을/mnt에 복사 한 다음 원본 파일을 삭제해야합니다. –

1

File.renameTo은 파일 시스템을 이동할 때 또는 기존 파일을 덮어 쓰려고 할 때 실패 할 수 있습니다. docs을 참조하십시오.

/mnt가 special purpose location이기 때문에 문제가있을 수 있으며/mnt로 이동하지 못하게하는 다른 속성이있을 수 있습니다.

2

A '바퀴를 재발견하지 않는'간단한 해결 방법은 아파치 코 몬즈 IO를 사용하는 것입니다. 다른 파티션을 다루는 데는 FileUtils#moveFile()이 있습니다.

관련 문제