`
zhangfy068
  • 浏览: 144633 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
JAVA如何调用DOS命令
用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式:
...
Process process = Runtime.getRuntime().exec(".\\p.exe");
process.waitfor( );
...
在上面的程序中,第一行的“.\\p.exe”是要执行的程序名,Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。
但在windows平台上,如果处理不当,有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况:
1、执行DOS的内部命令
如果要执行一条DOS内部命令,有两种方法。一种方法是把命令解释器包含在exec()的参数中。例如,执行dir命令,在NT上, 可写成exec("cmd.exe /c dir"),在windows 95/98下,可写成“command.exe /c dir”,其中参数“/c”表示命令执行后关闭Dos立即关闭窗口。另一种方法是,把内部命令放在一个批命令my_dir.bat文件中,在Java程序中写成exec("my_dir.bat")。如果仅仅写成exec("dir"),Java虚拟机则会报运行时错误。前一种方法要保证程序的可移植性,需要在程序中读取运行的操作系统平台,以调用不同的命令解释器。后一种方法则不需要做更多的处理。
2、打开一个不可执行的文件
打开一个不可执行的文件,但该文件存在关联的应用程序,则可以有两种方式。 以打开一个word文档a.doc文件为例,Java中可以有以下两种写法:
exec("start .\\a.doc");
exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc");
显然,前一种方法更为简捷方便。
3、执行一个有标准输出的DOS可执行程序
在windows平台上,运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭,从而导致Java应用程序阻塞在waitfor( )。导致该现象的一个可能的原因是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java提供的Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。一段典型的程序如下:
...
String ls_1;
Process process = Runtime.getRuntime().exec("cmd /c dir \\windows");
BufferedReader bufferedReader = new BufferedReader( \
new InputStreamReader(process.getInputStream());
while ( (ls_1=bufferedReader.readLine()) != null)
System.out.println(ls_1);

process.waitfor( );
...

以上内容为转载~下面内容为原创!

今天在做客户端程序的自动更新,简单描述一下,就是从服务器上将更新包下载下来,然后在本地解压缩,最后删掉~功能很简单~

但是问题出在使用JAVA的ZIP模块做文件的解压缩不是想象的那么简单,资源需要释放,一个不小心就没有办法删除掉原有ZIP文件了~资源的占用确实是个大问题,但是好在,客户端程序更新完是要重启的,一切都烟消云散了~对于删除不掉ZIP文件的问题,我也流氓一下~用DEL硬删除~此处一定要注意!

Process process = Runtime.getRuntime().exec("cmd /c del f:\\aaa.doc");
这样的调用是没有问题~

Process process = Runtime.getRuntime().exec("del f:\\aaa.doc");
这样写是不可能对的~

记录一下,警告一下后人!


分享到:
评论

相关推荐

    Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!

    NULL 博文链接:https://jisonami.iteye.com/blog/2181810

    使用runtime实现linux命令行或shell脚本多次调用

    使用runtime, 实现java客户端多次调用linux命令或者shell脚本,并返回对应结果或信息

    Java程序执行CMD命令代码实现

    Java程序是如何执行CMD命令的,就是需要RunTime、Process类而已。 具体代码在文档中

    cli-runtime:PHP运行时执行命令库

    PHP Cli运行时 PHP运行时执行命令库安装安装此扩展的首选方法是通过 。 无论运行 php composer.phar require --prefer-dist johnitvn/cli-runtime "*"或添加 "johnitvn/cli-... 运行命令而不返回并显示输出 $ process -

    Java调用Linux命令

    Java调用Linux命令 调用Runtime.exec方法将产生一个本地的进程,并返回一个Process子类的实例, (注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例), 该实例可用于控制进程或取得进程的...

    adeptj-runtime-launcher:AdeptJ运行时启动器

    AdeptJ运行时启动器带有以下提到的模块... 现在进入adeptj-runtime-launcher基本目录并执行此命令./etc/build.sh 上面的步骤将在类路径上的/ lib目录下创建AdeptJ Runtime Launcher Uber jar。 现在,从adeptj-runtime-

    Java通过生成bat文件执行命令提示行

    由于 Runtime.getRuntime().exec(cmd /k start ipconfig) 的方式执行完一条命令会直接闪退窗口,无法处理同一窗口执行多条命令等复杂业务,所以采用生成bat文件的方式,再通过运行bat文件执行cmd命令

    vs2008调用matlab的dll文件 报runtime error 解决方案

    下载options_win32.zip,用options_win32\bin\win32\mbuildopts下的三个bat文件,覆盖C:\Program Files\MATLAB\R2009a\bin\win32\...mbuild -setup命令 解决vs2008调用matlab的dll文件 报runtime error R6034的问题!

    XWork绕过安全限制执行任意命令漏洞补丁

    XWork处理用户请求参数数据时存在漏洞,远程攻击者可以利用此漏洞在系统上执行任意命令。 Struts2中WebWork框架使用XWork基于HTTP参数名执行操作和调用,将每个HTTP参数名处理为OGNL(对象图形导航语言)语句,而...

    jndi-JNDI-Injection-Exploit

    可执行程序为jar包,在命令行中运行以下命令: $ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address] 其中: -C - 远程class文件中要执行的命令。 (可选项 , 默认命令是mac下...

    turmeric-runtime:姜黄SOA-运行时框架

    切换到检出文件的目录,然后可以通过运行以下命令开始构建: mvn clean install 单元测试在构建期间运行。 要跳过这些测试,请改用以下命令: mvn clean install -DskipTests = true 构建过程需要20到40分钟

    ROCm-OpenCL-Runtime:ROCm OpenOpenCL运行时

    使用以下命令下载git项目: git clone -b master-next https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime.git 仓库分支 该存储库维护着几个分支。 重要的分支是: master-next:这是默认分支。 设定...

    cli-runtime:一组用于创建kubectl命令和插件的助手

    运行时 用于创建kubectl命令的帮助程序集,以及kubectl插件。 目的 该库是客户端使用Kubernetes API基础结构的共享依赖关系,该基础结构允许维护kubectl兼容的行为。 它的第一个使用者是k8s.io/kubectl 。 兼容性 此...

    conch-runtime-用于评估/执行以Shell编程语言编写的程序的库-Rust开发

    conch-runtime用于执行Unix shell命令的Rust库/运行时。 快速入门首先,将其添加到Cargo.toml中:[dependencies] conch-runtime = conch-runtime用于执行Unix shell命令的Rust库/运行时。 快速入门首先,将其添加到...

    postman-runtime

    发展须知npm run test :运行运行时的lint,系统,单元和集成测试npm run test-integration-newman :此命令运行带有开发中的运行时变体的newman测试npm run test-coverage :此命令运行postman-runtime测试并生成...

    python-runtime:用于可信自动化 Docker 构建的 Python 运行时 Dockerfile

    它可以自动将Python应用程序与其依赖项捆绑在一起,并设置默认命令而无需额外的 Dockerfile 指令。 该项目大量借用了 Google 的 Docker 映像中的代码。 基础 Docker 镜像 安装 安装 。 从公共下载: docker pull ...

    cmd:一个在Unix平台上轻松运行命令的库

    创建一个从Java执行shell命令的程序是一个繁琐的任务,但是每当我们编写一个使用Runtime#exec()方法的程序时,我们几乎总是会陷入很多陷阱。 这个库代表您做得很好。 要运行echo hello ,您只需执行以下...

    java调用shell脚本执行sqlldr与存储过程

    因为我在linux环境下执行shell脚本时sqlldr命令和sqlplus命令是正常执行的,没有任何问题,但是在java代码中调用脚本时却报错,所有排除了其他原因,只可能是环境变量的问题, 于是我把oracle的所有环境变量直接复制...

    【IDEA】windows环境下IDEA java代码Runtime.getRuntime.exec中shell的执行环境的解决方案

    在使用IDEA本地开发监控守护线程的后台,我遇上了执行环境不兼容的问题,爆出各种“xxx不是内部或外部命令,也不是可运行的程序或批处理文件。”,简而言之就是Windows下的CMD默认不识别shell环境下的诸如sh、ssh、...

Global site tag (gtag.js) - Google Analytics