[java] Java를 사용하여 파일이있는 폴더를 삭제하는 방법

Java를 사용하여 디렉토리를 만들고 삭제하고 싶지만 작동하지 않습니다.

File index = new File("/home/Work/Indexer1");
if (!index.exists()) {
    index.mkdir();
} else {
    index.delete();
    if (!index.exists()) {
        index.mkdir();
    }
}



답변

Java는 데이터가있는 폴더를 삭제할 수 없습니다. 폴더를 삭제하기 전에 모든 파일을 삭제해야합니다.

다음과 같이 사용하십시오.

String[]entries = index.list();
for(String s: entries){
    File currentFile = new File(index.getPath(),s);
    currentFile.delete();
}

그런 다음 index.delete()
Untested 를 사용하여 폴더를 삭제할 수 있어야합니다 !


답변

한 줄로.

import org.apache.commons.io.FileUtils;

FileUtils.deleteDirectory(new File(destination));

여기에 문서화


답변

이것은 작동하며 디렉터리 테스트를 건너 뛰는 것은 비효율적으로 보이지만 그렇지 않습니다. 테스트는 listFiles().

void deleteDir(File file) {
    File[] contents = file.listFiles();
    if (contents != null) {
        for (File f : contents) {
            deleteDir(f);
        }
    }
    file.delete();
}

다음 기호 링크를 방지하려면 업데이트하십시오.

void deleteDir(File file) {
    File[] contents = file.listFiles();
    if (contents != null) {
        for (File f : contents) {
            if (! Files.isSymbolicLink(f.toPath())) {
                deleteDir(f);
            }
        }
    }
    file.delete();
}


답변

Java 8에서이 솔루션을 선호합니다.

  Files.walk(pathToBeDeleted)
    .sorted(Comparator.reverseOrder())
    .map(Path::toFile)
    .forEach(File::delete);

이 사이트에서 : http://www.baeldung.com/java-delete-directory


답변

JDK 7에서는 Files.walkFileTree()Files.deleteIfExists()파일 트리를 삭제하는 데 사용할 수 있습니다 . (샘플 : http://fahdshariff.blogspot.ru/2011/08/java-7-deleting-directory-by-walking.html )

JDK 6에서 가능한 한 가지 방법은 Apache Commons에서 FileUtils.deleteQuietly 를 사용 하여 파일, 디렉토리 또는 파일과 하위 디렉토리가있는 디렉토리를 제거하는 것입니다.


답변

Apache Commons-IO를 사용하면 다음과 같습니다.

import org.apache.commons.io.FileUtils;

FileUtils.forceDelete(new File(destination));

이것은 (약간) 더 성능이 좋습니다 FileUtils.deleteDirectory.


답변

앞서 언급했듯이 Java는 파일이 포함 된 폴더를 삭제할 수 없으므로 먼저 파일을 삭제 한 다음 폴더를 삭제합니다.

다음은이를 수행하는 간단한 예입니다.

import org.apache.commons.io.FileUtils;



// First, remove files from into the folder 
FileUtils.cleanDirectory(folder/path);

// Then, remove the folder
FileUtils.deleteDirectory(folder/path);

또는:

FileUtils.forceDelete(new File(destination));