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);
답변
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));