in commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileObject.java [272:306]
public void copyFrom(final FileObject file, final FileSelector selector) throws FileSystemException {
if (!FileObjectUtils.exists(file)) {
throw new FileSystemException("vfs.provider/copy-missing-file.error", file);
}
// Locate the files to copy across
final ArrayList<FileObject> files = new ArrayList<>();
file.findFiles(selector, false, files);
// Copy everything across
for (final FileObject srcFile : files) {
// Determine the destination file
final String relPath = file.getName().getRelativeName(srcFile.getName());
final FileObject destFile = resolveFile(relPath, NameScope.DESCENDENT_OR_SELF);
// Clean up the destination file, if necessary
if (FileObjectUtils.exists(destFile) && destFile.getType() != srcFile.getType()) {
// The destination file exists, and is not of the same type,
// so delete it
// TODO - add a pluggable policy for deleting and overwriting existing files
destFile.deleteAll();
}
// Copy across
try {
if (srcFile.getType().hasContent()) {
FileObjectUtils.writeContent(srcFile, destFile);
} else if (srcFile.getType().hasChildren()) {
destFile.createFolder();
}
} catch (final IOException e) {
throw new FileSystemException("vfs.provider/copy-file.error", e, srcFile, destFile);
}
}
}