PandaLib/pandalib-util/src/main/java/fr/pandacube/lib/util/FileUtils.java

58 lines
1.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package fr.pandacube.lib.util;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
/**
* Provides utility methods to manipulate files and directories
*/
public class FileUtils {
/**
* Recursively delete the provided file and all of its content if it is a directory.
* @param target the target file or directory.
*/
public static void delete(File target) {
if (target.isDirectory())
for (File child : target.listFiles())
delete(child);
target.delete();
}
/**
* Recursively copy the provided source file or directory to the provided target.
* @param source the source file or directory.
* @param target the copy destination.
* @throws IOException if an IO error occurs.
* @throws IllegalStateException if the target destination already exists and is not a directory.
* @throws IllegalArgumentException if at least one of the parameter is null, or if the source doesnt exists.
*/
public static void copy(File source, File target) throws IOException {
if (source == null || !source.exists()) {
throw new IllegalArgumentException("source is null or doesnt exists: " + source);
}
if (target == null) {
throw new IllegalArgumentException("target cannot be null");
}
if (target.exists() && !target.isDirectory()) {
throw new IllegalStateException("target file already exists: " + target);
}
BasicFileAttributes sourceAttr = Files.readAttributes(source.toPath(), BasicFileAttributes.class);
if (sourceAttr.isDirectory()) {
if (target.mkdir()) {
for (String child : source.list())
copy(new File(source, child), new File(target, child));
}
else {
throw new IOException("Cannot create directory " + target);
}
}
else if (sourceAttr.isRegularFile()) {
Files.copy(source.toPath(), target.toPath());
}
}
}