java 为什么不直接执行 'xcopy /S $sourceDir/* $targetDir' 或类似的而不是 'reinventing the wheel'?

java why not just executing 'xcopy /S $sourceDir/* $targetDir' or similar instead of 'reinventing the wheel'?

我对 java 还是比较陌生,但我有像 DOS、Windows 和 Bash 这样的脚本编写经验。今天我想从我的 Java CLI 应用程序轻松地将目录(文件和目录)的内容从 sourceDir 递归复制到 destinationDir。

我在网上搜索了很多 "solutions",使用 Oracles and/or Apaches FileUtils 等。但是它们都需要某种 "reinventing the wheel" 并且是 20 多行代码,分别处理每个文件和目录,非常适合在命令行 shell 上由单行完成的事情。

对于 Windows 和 linux 这两个,它通常只是一个简单的...

cp -a "$sourceDir"/* "$targetDir" # on linux

xcopy /s /e %srcdir%\* %trgtdir%  # on windows

然而,我无法找到一个为 java 准备好的库或工具,就像 xcopy/robocopy 或 cp on bash 没有添加我的全新 "copy" Class 到我的应用程序:/。

为什么我应该 "re-invent the wheel" 而不是只做某种 "external shell execution" 来调用这些命令行工具之一以在 2-3 行代码内完成工作是否有充分的理由?

感谢您的任何建议和解释。 阿克塞尔

I searched the net up and down and found PLENTY of "solutions" to this using Oracles and/or Apaches FileUtils etc. handling each and every file and dir separately with great afford for something that on the command line shell is done by a SINGLE LINE.

我最初的想法是...

........................................

为什么说ApacheCommons.FileUtils是20+行代码??

copyDirectoryToDirectory(File srcDir, File destDir) API says :

Copies a directory to within another directory preserving the file dates.

This method copies the source directory and all its contents to a directory of the same name in the specified destination directory.

FileUtils.copyDirectoryToDirectory(new File(folder_source), new File(folder_destiny));

But they all require sort of "reinventing the wheel" and are 20+ Lines of code

你查cp指令源码多长了吗?

这里是:cp.cwww.gnu.org开始有1000多行代码。

这是一个单语句Java解决方案:

Runtime.exec(new String[] {"sh", "-c",
                           "cp -a \"" + src + ""/* \"" + target + "\""});

显然不便携,但是这里没有重新造轮子

诀窍是让 shell 为您处理通配符扩展。

Apache Commons I/O 有一个方法可以做到这一点,您需要使用 three-argument version of FileUtils.copyDirectory 而不是双参数版本(复制目录本身而不是其内容):

public static void copyDirectory(File srcDir, File destDir, boolean preserveFileDate) throws IOException

This method copies the contents of the specified source directory to within the specified destination directory.