Fix FileUtils.copy not accepting regular file as source. Also made it handle directory merging.
This commit is contained in:
parent
7c4fd78680
commit
7481b12111
@ -27,28 +27,26 @@ public class FileUtils {
|
|||||||
* @param source the source file or directory.
|
* @param source the source file or directory.
|
||||||
* @param target the copy destination.
|
* @param target the copy destination.
|
||||||
* @throws IOException if an IO error occurs.
|
* @throws IOException if an IO error occurs.
|
||||||
* @throws IllegalStateException if the target destination already exists and is not a directory.
|
* @throws IllegalStateException if target file already exists and one of source or target is not a directory.
|
||||||
* @throws IllegalArgumentException if at least one of the parameter is null, or if the source doesn't exist.
|
* @throws IllegalArgumentException if at least one of the parameter is null, or if the source doesn't exist.
|
||||||
*/
|
*/
|
||||||
public static void copy(File source, File target) throws IOException {
|
public static void copy(File source, File target) throws IOException {
|
||||||
if (source == null || !source.exists() || !source.isDirectory()) {
|
if (source == null || !source.exists()) {
|
||||||
throw new IllegalArgumentException("source is null or doesn't exist: " + source);
|
throw new IllegalArgumentException("source is null or doesn't exist: " + source);
|
||||||
}
|
}
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
throw new IllegalArgumentException("target cannot be null");
|
throw new IllegalArgumentException("target cannot be null");
|
||||||
}
|
}
|
||||||
if (target.exists() && !target.isDirectory()) {
|
if (target.exists() && !(target.isDirectory() && source.isDirectory())) {
|
||||||
throw new IllegalStateException("target file already exists but is not a directory: " + target);
|
throw new IllegalStateException("target file already exists and one of source or target is not a directory: " + target);
|
||||||
}
|
}
|
||||||
BasicFileAttributes sourceAttr = Files.readAttributes(source.toPath(), BasicFileAttributes.class);
|
BasicFileAttributes sourceAttr = Files.readAttributes(source.toPath(), BasicFileAttributes.class);
|
||||||
if (sourceAttr.isDirectory()) {
|
if (sourceAttr.isDirectory()) {
|
||||||
if (target.mkdir()) {
|
if (!target.exists())
|
||||||
for (String child : source.list())
|
target.mkdirs();
|
||||||
|
for (String child : source.list()) {
|
||||||
copy(new File(source, child), new File(target, child));
|
copy(new File(source, child), new File(target, child));
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
throw new IOException("Cannot create directory " + target);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (sourceAttr.isRegularFile()) {
|
else if (sourceAttr.isRegularFile()) {
|
||||||
Files.copy(source.toPath(), target.toPath());
|
Files.copy(source.toPath(), target.toPath());
|
||||||
|
Loading…
Reference in New Issue
Block a user