用getRuntime().exec()调用系统copy、xcopy命令

在java程序开发中,有用到getRuntime().exec()调用copy、xcopy命令,其中碰到一些问题,记录如下:
1.用getRuntime().exec()调用copy:
java.lang.Runtime.getRuntime().exec("cmd.exe /c copy C:\\cubeETL_TEST\\cog\\buildDir\\231.mdc C:\\cubeETL_TEST\\cog\\publish1\\231.mdc");

以上的写法经测试是可以正确copy的。
在写程序的过程中,先碰到的是这样一种情况,写法如下:
java.lang.Runtime.getRuntime().exec("cmd.exe /c copy C:/cubeETL_TEST/cog/buildDir/231.mdc C:/cubeETL_TEST/cog/publish1/231.mdc");

与上面一种写法的差别就是文件路径中是使用“\”还是“/”,在windows 2000系统上测试的结果是,路径写成C:\\cubeETL_TEST\\cog\\buildDir\\231.mdc,则能正确copy文件;若写成C:/cubeETL_TEST/cog/buildDir/231.mdc,程序也能运行,且不报任何错误,但是文件却没有copy成功。

2.使用getRuntime().exec()调用copy时,若直接写成:
java.lang.Runtime.getRuntime().exec("copy C:\\cubeETL_TEST\\cog\\buildDir\\231.mdc C:\\cubeETL_TEST\\cog\\publish1\\231.mdc");

程序运行时会产生异常信息:
java.io.IOException:   CreateProcess:   copy   C:\cubeETL_TEST\cog\buildDir\231.mdc C:\cubeETL_TEST\cog\publish1\231.mdc  error=2

3.用getRuntime().exec()调用xcopy:
可以正确执行的写法如下:
java.lang.Runtime.getRuntime().exec("cmd.exe /c xcopy C:\\cubeETL_TEST\\cog\\buildDir\\231  C:\\cubeETL_TEST\\cog\\publish1\\231\\");

文件夹层次说明: buildDir下存在文件夹231,publish1下不存在文件夹231.
首先说明这么写的含义:是将buildDir下的文件夹231拷贝到文件夹publish1下。
首先要注意的是因为文件夹publish1下原没有文件夹231(若有,那就又变成相当于调用copy命令拷贝文件了),所以在写源目录、目标目录时需注意: 源目录路径后面不要带“\”,而目标路径后面需要带“\”。这样文件夹231(文件及子文件夹)就能正确复制到publish1文件夹下。

如果写成这样的格式:
java.lang.Runtime.getRuntime().exec("cmd.exe /c xcopy C:\\cubeETL_TEST\\cog\\buildDir\\231  C:\\cubeETL_TEST\\cog\\publish1\\231");

在java程序中运行后,程序无错误提示,但是文件夹不能正确拷贝;直接在cmd中执行这样的命令:
xcopy C:\cubeETL_TEST\cog\buildDir\231  C:\cubeETL_TEST\cog\publish1\231
运行后后出现和下图一样的提示:


(在本机测试的目录结构, C:\temp下没有xml文件夹
输入D回车,命令将把文件夹buildDir下的子文件夹231拷贝到publish1文件夹下;

若在cmd中执行如下的命令:
xcopy C:\temp\cog\xml\  C:\temp\xml\
运行后将提示,无效路径 复制了0个文件,如下图






你可能感兴趣的:(java,C++,c,xml,C#)