使用Java中的Process类调用本地程序
来源:互联网 发布:手机摄影后期制作软件 编辑:程序博客网 时间:2024/05/20 16:44
用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。
常用用法:
Process process = Runtime.getRuntime().exec(“.\p.exe”);
process.waitfor( ); “.\p.exe”是要执行的程序名 waitfor()目的为等待子进程完成再往下执行
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可执行程序
import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;public class ShellTest { public static void main(String[] args) { Process process = null; InputStream inputStream = null; try { process = Runtime.getRuntime().exec("cmd.exe /c dir"); process.waitFor(); inputStream = process.getInputStream(); byte[] b = new byte[1024]; int size = 0; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); while ((size = inputStream.read(b)) > 0) { outputStream.write(b, 0, size); } System.out.println(outputStream.toString("gbk")); } catch (Exception e) { e.printStackTrace(); } finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } if (null != process) { process.destroy(); } } }}
执行输出的结果如下:
驱动器 D 中的卷是 软件 卷的序列号是 1839-9E09 D:\1肖宴资料\wangzhixuan-spring-shiro-training-master\spring-shiro-training 的目录2017/07/13 17:42 <DIR> .2017/07/13 17:42 <DIR> ..2017/07/14 14:25 1,513 .classpath2017/07/03 09:52 306 .gitignore2017/07/13 17:43 1,230 .project2017/07/13 17:43 <DIR> .settings2017/07/03 09:52 685 build.sh2017/07/03 09:52 <DIR> database2017/07/03 09:52 10,551 pom.xml2017/07/03 09:52 2,716 README.md2017/07/03 09:52 <DIR> src2017/07/13 17:42 <DIR> target 6 个文件 17,001 字节 6 个目录 85,116,977,152 可用字节
4、用DEL硬删除aaa.doc
Process process = Runtime.getRuntime().exec("cmd /c del f:\\aaa.doc");
5、从JDK1.5之后,Java开始提供包:java.lang.management 提供了一系列的用来在运行时管理和监督JVM和OS的管理接口。将用到的就是这个包中的一个类:ManagementFactory。
附:如何创建Process对象,一般有一下两种方法: 1、每个 ProcessBuilder 实例管理一个进程属性集。start()
方法利用这些属性创建一个新的 Process 实例。start()
方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。(ProcessBuilder这个是JDK5中新添加的final类)。
2、Runtime.exec()方法创建一个本机进程,并返回 Process 子类的一个实例
- 使用Java中的Process类调用本地程序
- 使用java调用本地EXE程序
- java调用本地程序
- Java 调用本地程序
- JAVA调用本地程序
- 使用Java程序调用本地转换盒作业,资源库中的转换和作业(kettle4.2)
- 使用java调用本地exe程序和cmd程序
- java.lang.Process调用程序阻塞问题解决
- java.lang.Process调用程序阻塞问题解决
- java.lang.Process调用程序阻塞问题解决
- java.lang.Process调用程序阻塞问题解决
- Java中的Process类
- Java中的Process类
- java 中的process类
- java 调用本地程序
- Java技巧:使用Runtime.exec重定向本地程序Java技巧:使用Runtime.exec重定向本地程序调用调用
- Java中使用Runtime和Process类运行外部程序
- Java中使用Runtime和Process类运行外部程序
- Java_基础—三种迭代的能否删除
- 机器学习
- 微信直播教程:微信直播时如何做直播倒计时预告效果
- 浅谈ztree节点的增加和获取
- Struts2_文件上传关于限制文件名、类型及大小
- 使用Java中的Process类调用本地程序
- MySQL中order by语句对null字段的排序
- APC注入
- maven有关笔记
- 提升进程权限
- java-Object类
- 通过进程名称得进程ID
- 通过进程名称得线程id
- 枚举进程