ProjectAres/Util/core/src/main/java/tc/oc/commons/core/FileUtils.java

89 lines
2.8 KiB
Java

package tc.oc.commons.core;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Path;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import com.google.common.io.Files;
import tc.oc.commons.core.util.ExceptionUtils;
import static com.google.common.base.Preconditions.checkArgument;
/** Source: http://www.crazysquirrel.com/computing/java/basics/java-file-and-directory-copying.jspx */
public class FileUtils {
public static void copy(File source, File destination) throws IOException {
copy(source, destination, false);
}
public static void copy(File source, File destination, boolean force) throws IOException {
if (!source.exists()) {
throw new FileNotFoundException("Missing source " + source.getPath());
}
if (!force && destination.exists()) {
throw new FileNotFoundException("Missing destination " + destination.getPath());
}
if (source.isDirectory()) {
copyDirectory(source, destination);
} else {
copyFile(source, destination);
}
}
private static void copyDirectory(File source, File destination) throws IOException {
if (!destination.mkdirs()) {
throw new IOException("Failed to create destination directories");
}
File[] files = source.listFiles();
for (File file : files) {
if (file.isDirectory()) {
copyDirectory(file, new File(destination, file.getName()));
} else {
copyFile(file, new File(destination, file.getName()));
}
}
}
private static void copyFile(File source, File destination) throws IOException {
Files.copy(source, destination);
}
public static void delete(File f) {
if (f.isDirectory()) {
for (File c : f.listFiles()) {
delete(c);
}
}
f.delete();
}
public static boolean isHidden(File file) {
return file.isHidden() || file.getName().startsWith(".");
}
/**
* You MUST call {@link Stream#close()} when you are finished with this stream!
*/
public static Stream<Path> directoryStream(Path dir) throws IOException {
final DirectoryStream<Path> dirStream = java.nio.file.Files.newDirectoryStream(dir);
return StreamSupport.stream(dirStream.spliterator(), false)
.onClose(() -> ExceptionUtils.propagate(dirStream::close));
}
/**
* Append the given extension string to the last element of the given path
*/
public static Path appendExtension(Path path, String extension) {
checkArgument(path.getNameCount() > 0);
return path.getParent().resolve(path.getFileName().toString() + extension);
}
}