FEAT FileUtils deleteDirectoryRecursively

pull/1/head
Niclas Thobaben 2020-12-01 01:47:11 +01:00
parent 7e8ddb9aa8
commit dc04c578c9
2 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,34 @@
package de.nclazz.commons.io;
import lombok.NonNull;
import java.io.File;
public abstract class FileUtils {
private FileUtils() { /* no-op */ }
/**
* Deletes a directory recursively.
* @param dir Directory to delete
* @throws NullPointerException if {@code dir} is {@code null}
* @throws IllegalArgumentException if {@code dir} is not a directory
*/
public static void deleteDirectoryRecursively(@NonNull File dir) {
if(!dir.exists()) return;
if(!dir.isDirectory()) {
throw new IllegalArgumentException(String.format("File '%s' is not a directory!", dir.getAbsolutePath()));
}
for(File file : dir.listFiles()) {
if(file.isDirectory()) {
deleteDirectoryRecursively(file);
}else {
file.delete();
}
}
dir.delete();
}
}

View File

@ -0,0 +1,40 @@
package de.nclazz.commons.io;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import static org.junit.jupiter.api.Assertions.*;
public class FileUtilsTests {
@Test
void testDeleteDirectoryRecursively() throws IOException {
File readmeFile = new File("README.md");
File dir = createDirectory();
assertTrue(dir.exists());
assertTrue(dir.isDirectory());
assertThrows(NullPointerException.class, () -> FileUtils.deleteDirectoryRecursively(null));
assertThrows(IllegalArgumentException.class, () -> FileUtils.deleteDirectoryRecursively(readmeFile));
assertDoesNotThrow(() -> FileUtils.deleteDirectoryRecursively(dir));
assertTrue(!dir.exists());
}
File createDirectory() throws IOException {
File dir = new File("target/tmp/subdirs/secondlevel");
dir.mkdirs();
for(int i = 0; i < 64; i++) {
new File(dir, "test_"+i+".txt").createNewFile();
}
return dir;
}
}