私はhadoop-coreライブラリのFileUtil.copyMergeメソッドを探していますが、私はJavaの専門家ではありませんが、のみコピーしてマージしたファイルは削除されないと感じています。私はそれが単に特定のパスからすべてを削除すると思います。つまり、コピー・マージ中にファイルが追加された場合、コピー・マージされていなくても削除されます。FileUtil.copyMergeはマージされたファイルだけでなく削除しますか?
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).isDirectory())
return false;
OutputStream out = dstFS.create(dstFile);
try {
FileStatus contents[] = srcFS.listStatus(srcDir);
Arrays.sort(contents);
for (int i = 0; i < contents.length; i++) {
if (contents[i].isFile()) {
InputStream in = srcFS.open(contents[i].getPath());
try {
IOUtils.copyBytes(in, out, conf, false);
if (addString!=null)
out.write(addString.getBytes("UTF-8"));
} finally {
in.close();
}
}
}
} finally {
out.close();
}
if (deleteSource) {
return srcFS.delete(srcDir, true);
} else {
return true;
}
}
最終if (deleteSource)
文は、トップビットが行われた後deleteSource
がtrue
に設定されていることを示している私にはelse if (srcFS.isFile(src))
、内部で何が起こるかとは独立している:ここでは
src
から削除するだけです。
私の解釈は正しいですか?
...このメソッドは、コピーではなく、コピーではありません.Merge –
おっと!私はコピー貼り付け中に非常に怠惰でした。実装はすべて同じように見える...申し訳ありませんが、私は今修正しました。 – Ian