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.c
从www.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.
我对 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/orApaches 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.c
从www.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.