`
superseven
  • 浏览: 107990 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java 调用DOS命令的使用小结

阅读更多
这两天在改一个CMS问题的时候,需要使用到文件的copy,但是直接使用纯java的话存在的文件流的读写,如果在写文件流的过程中,写的文件被人访问到,那么此时该文件被是一个空文件,因此为了避免这种情况的发生考虑使用直接调用dos的move命令来完成文件的移动。
      在网上找了很多的资料,拿了段代码
           String cmd = "move c:\\1.txt d:\\";
           Runtime.getRuntime().exec(cmd);      
但是调试的发现怎么也执行不了,但是这个命令在dos里执行是没有问题的,然后继续找资料,发现必须调用cmd.exe才可以,因此代码又改成了
           String cmd = "cmd move c:\\1.txt d:\\";
           Runtime.getRuntime().exec(cmd);     
继续测试发现还是不行,发现程序在一直在执行,但是不会在执行完毕后关闭,找了半天也没找到资料,于是去检查这个命令在java中调用时跟其他的语句是否一样,发现在调用dir命令 的时候是这样的
          String cmd = "cmd /c dir";
刚开始还以为/c是用来表示c盘的盘符,所以没注意,后来查了资料才发现/c不是用来表示盘符而是表示执行字符串指定的命令然后中断,看了这个之后我才恍然大悟,之前程序为什么一直在吊着,后来我改了下
           String cmd = "cmd /c move c:\\1.txt d:\\";
           Runtime.getRuntime().exec(cmd);    
一次性执行通过,仔细阅读了资料,cmd之后还是有很多参数可以选择,如下所示:
/C      执行字符串指定的命令然后终断
/K      执行字符串指定的命令但保留
/S      在 /C 或 /K 后修改字符串处理(见下)
/Q      关闭回应
/D      从注册表中停用执行 AutoRun 命令(见下)
/A      使向内部管道或文件命令的输出成为 ANSI
/U      使向内部管道或文件命令的输出成为 Unicode
/T:fg   设置前景/背景颜色(详细信息,请见 COLOR /?)
/E:ON   启用命令扩展(见下)
/E:OFF  停用命令扩展(见下)
/F:ON   启用文件和目录名称完成字符 (见下)
/F:OFF  停用文件和目录名称完成字符(见下)
/V:ON   将 ! 作为定界符启动延缓环境变量扩展。如: /V:ON 会
        允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法
        在输入时扩展变量,这与在一个 FOR 循环内不同。
/V:OFF  停用延缓的环境扩展。
   通过这些参数我们可以在不同的场景下使用不同的参数,然java顺利的调用到命令
 
参考资料:http://topic.csdn.net/u/20100713/20/601698c8-9132-4122-8336-79de256ca4e7.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics