java为什么不只是执行' xcopy / S $ sourceDir / * $ targetDir'或类似的而不是重新发明轮子?

时间:2015-10-02 10:44:39

标签: java execution xcopy robocopy

我还是比较新的java,但我在DOS,Windows和Bash等脚本中经历过。今天我想通过Java CLI App轻松地将源目录(文件和目录)的内容从sourceDir复制到destinationDir。

我上下搜索网络,发现了很多解决方案"使用Oracles和/或Apaches FileUtils等进行此操作。但它们都需要重新发明轮子"并且有20多行代码,分别处理每个文件和目录,并且可以在命令行shell上完成由SINGLE LINE完成的任务。

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

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

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

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

我是否有充分理由重新发明轮子"并且不只是做某种"外部shell执行"调用其中一个命令行工具在2-3行代码中完成工作?

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

3 个答案:

答案 0 :(得分:1)

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

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

显然不便携,但这里没有轮子的重新发明。

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

答案 1 :(得分:1)

Apache Commons I / O有一个执行此操作的方法,您需要使用three-argument version of FileUtils.copyDirectory而不是双参数版本(复制目录本身而不是其内容):

  

:delete

     

此方法将指定源目录的内容复制到指定的目标目录中。

答案 2 :(得分:0)

  

我上下搜索网络,找到了解决方案""使用Oracles和/或Apaches FileUtils等处理每个文件和目录,并且可以在命令行shell上完成由SINGLE LINE完成的任务。

我最初的想法是......

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

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

copyDirectoryToDirectory(File srcDir, File destDir) API says

  

将目录复制到另一个目录中,保留文件日期。

     

此方法将源目录及其所有内容复制到指定目标目录中的同名目录

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

但他们都需要一些重新发明的轮子"并且有20多行代码

您是否检查了cp命令源代码有多长?

来自www.gnu.orgcp.c代码超过1000行。