用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\\");

文件夹层次说明:[color=blue]buildDir下存在文件夹231,publish1下不存在文件夹231.[/color]
首先说明这么写的含义:是将buildDir下的文件夹231拷贝到文件夹publish1下。
首先要注意的是因为文件夹publish1下原没有文件夹231(若有,那就又变成相当于调用copy命令拷贝文件了),所以在写源目录、目标目录时需注意:[color=blue]源目录路径后面不要带“\”,而目标路径后面需要带“\”[/color]。这样文件夹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
运行后后出现和下图一样的提示:

[img]/upload/attachment/137995/fd79d122-b253-3f45-b720-2987a6402f34.jpg[/img]
(在本机测试的目录结构,[color=blue]C:\temp下没有xml文件夹[/color])
输入D回车,命令将把文件夹buildDir下的子文件夹231拷贝到publish1文件夹下;

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

[img]/upload/attachment/138000/58ee64dc-4ecc-3079-a910-5dfc20103990.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值