// Check if dest is directory if (!dstFS.exists(dst)) {
throw new IOException(\ \ } else {
FileStatus sdst = dstFS.getFileStatus(dst); if (!sdst.isDir())
throw new IOException(\ dst + \ }
for (Path src : srcs) { try {
if (!copy(srcFS, src, dstFS, dst, deleteSource, overwrite, conf)) returnVal = false; } catch (IOException e) { gotException = true;
exceptions.append(e.getMessage()); exceptions.append(\ } }
if (gotException) {
throw new IOException(exceptions.toString()); }
return returnVal; }
/** Copy files between FileSystems. */
public static boolean copy(FileSystem srcFS, Path src, FileSystem dstFS, Path dst, boolean deleteSource, boolean overwrite,
Configuration conf) throws IOException { dst = checkDest(src.getName(), dstFS, dst, overwrite);
if (srcFS.getFileStatus(src).isDir()) {
checkDependencies(srcFS, src, dstFS, dst); if (!dstFS.mkdirs(dst)) { return false; }
FileStatus contents[] = srcFS.listStatus(src); for (int i = 0; i < contents.length; i++) { copy(srcFS, contents[i].getPath(), dstFS,
new Path(dst, contents[i].getPath().getName()), deleteSource, overwrite, conf); }
} else if (srcFS.isFile(src)) { InputStream in=null; OutputStream out = null; try {
in = srcFS.open(src);
out = dstFS.create(dst, overwrite); IOUtils.copyBytes(in, out, conf, true); } catch (IOException e) { IOUtils.closeStream(out); IOUtils.closeStream(in); throw e; } } else {
throw new IOException(src.toString() + \ }
if (deleteSource) {
return srcFS.delete(src, true); } else { return true; } }
/** Copy all files in a directory to one output file (merge). */ public static boolean copyMerge(FileSystem srcFS, Path srcDir, FileSystem dstFS, Path dstFile, boolean deleteSource,
Configuration conf, String addString) throws IOException {
dstFile = checkDest(srcDir.getName(), dstFS, dstFile, false);
if (!srcFS.getFileStatus(srcDir).isDir()) return false;
OutputStream out = dstFS.create(dstFile); try {
FileStatus contents[] = srcFS.listStatus(srcDir); for (int i = 0; i < contents.length; i++) { if (!contents[i].isDir()) {
InputStream in = srcFS.open(contents[i].getPath()); try {
IOUtils.copyBytes(in, out, conf, false); if (addString!=null)
out.write(addString.getBytes(\ } finally { in.close(); } } } } finally { out.close(); }
if (deleteSource) {
return srcFS.delete(srcDir, true);
} else { return true; } }
/** Copy local files to a FileSystem. */ public static boolean copy(File src,
FileSystem dstFS, Path dst, boolean deleteSource,
Configuration conf) throws IOException { dst = checkDest(src.getName(), dstFS, dst, false);
if (src.isDirectory()) { if (!dstFS.mkdirs(dst)) { return false; }
File contents[] = listFiles(src); for (int i = 0; i < contents.length; i++) {
copy(contents[i], dstFS, new Path(dst, contents[i].getName()), deleteSource, conf); }
} else if (src.isFile()) { InputStream in = null; OutputStream out =null; try {
in = new FileInputStream(src); out = dstFS.create(dst); IOUtils.copyBytes(in, out, conf); } catch (IOException e) { IOUtils.closeStream( out ); IOUtils.closeStream( in ); throw e; } } else {
throw new IOException(src.toString() +
\ }
if (deleteSource) {
return FileUtil.fullyDelete(src); } else { return true; } }
/** Copy FileSystem files to local files. */
public static boolean copy(FileSystem srcFS, Path src, File dst, boolean deleteSource,
Configuration conf) throws IOException { if (srcFS.getFileStatus(src).isDir()) { if (!dst.mkdirs()) { return false; }
FileStatus contents[] = srcFS.listStatus(src); for (int i = 0; i < contents.length; i++) { copy(srcFS, contents[i].getPath(),
new File(dst, contents[i].getPath().getName()), deleteSource, conf); }
} else if (srcFS.isFile(src)) { InputStream in = srcFS.open(src);
IOUtils.copyBytes(in, new FileOutputStream(dst), conf); } else {
throw new IOException(src.toString() +
\ }
if (deleteSource) {
return srcFS.delete(src, true); } else { return true; }