文档章节

JAVA调用系统命令或可执行程序

Ryan-瑞恩
 Ryan-瑞恩
发布于 2012/11/06 16:20
字数 797
阅读 222
收藏 0
通过 java.lang.Runtime 类可以方便的调用操作系统命令,或者一个可执行程序,下面的小例子我在windows和linux分别测试过,都通过。基本原理是,首先通过 Runtime.getRuntime() 返回与当前 Java 应用程序相关的运行时对象,然后调用run.exec(cmd)  另启一个进程来执行命令(cmd为要执行的命令)。
 
一、运行一个可执行程序
    执行一个.exe的文件,或通过已安装的软件打开一个特定格式的文件,如word、chm或mp3等等。
1. 在window下可以直接执行一个.exe文件,如执行我在F盘下的tomcat安装文件,将命令写为:
    String cmd = "F:\\apache-tomcat-6.0.20.exe";
2. 打开一个word文档。如果系统已经安装了office应用程序,就可以通过调用word的可执行程序来打开一个word文档:
    String cmd = "D:\\Program Files\\Microsoft Office\\OFFICE11\\WINWORD.EXE F:\\test.doc";
    当然这样写有点麻烦,我们想打开一个word文档时只要双击就可以了,用不着去找WINWORD.EXE。要是打开每一种格式的文件都得去找它的可执行程序,那可累死了,我们可以通过下面的代码,打开任意一个已知格式的文件(只要安装的打开这种文件格式的软件),相当于用鼠标双击一个文件的图标:
    String cmd = "cmd.exe /c start F:\\test.doc";
 
    我用C写了一个进程操作的小例子,放在 linux 下编译出的可执行文件叫“fork_wait”,然后把我的java文件编译成TestRunTime.class后扔到 linux 上,在控制台执行 java TestRunTime 命令,TestRunTime 和 fork_wait 程序均运行成功。
    String cmd = "./fork_wait";
 
二、执行一个有标准输出的系统命令
    通过调用进程的 getInputStream() 方法,可以获得执行命令的标准输出。在 windows 的cmd控制台窗口和 linux 控制台执行系统名利的格式是一样的,只是输入的命令不同而已。
如要执行windows控制台中ping命令,可写为:String cmd = "ping www.baidu.com";
执行linux的ls命令,可写为:String cmd = "ls -l";
 
    如果要执行一个带参数的命令,可使用 String 数组形式,如:
    String[] cmd=new String[3];
    cmd[0]="/bin/sh";
    cmd[1]="-c";
    cmd[2]="ls -l ./";
 
 下面是我写的小例子:
Java代码  
package com.why.RunTime;  
import java.io.BufferedInputStream;  
import java.io.BufferedReader;  
import java.io.InputStreamReader;  
  
public class TestRunTime {  
    public static void main(String[] args) {  
        //windows  
//      String cmd = "F:\\apache-tomcat-6.0.20.exe";  
//      String cmd = "D:\\Program Files\\Microsoft Office\\OFFICE11\\WINWORD.EXE F:\\test.doc";  
//      String cmd = "cmd.exe /c start F:\\test.doc";  
        String cmd = "ping www.baidu.com";  
          
        //linux  
//      String cmd = "./fork_wait";  
//      String cmd = "ls -l";  
//      String[] cmd=new String[3];  
//      cmd[0]="/bin/sh";  
//      cmd[1]="-c";  
//      cmd[2]="ls -l ./";  
        Runtime run = Runtime.getRuntime();//返回与当前 Java 应用程序相关的运行时对象  
        try {  
            Process p = run.exec(cmd);// 启动另一个进程来执行命令  
            BufferedInputStream in = new BufferedInputStream(p.getInputStream());  
            BufferedReader inBr = new BufferedReader(new InputStreamReader(in));  
            String lineStr;  
            while ((lineStr = inBr.readLine()) != null)  
                //获得命令执行后在控制台的输出信息  
                System.out.println(lineStr);// 打印输出信息  
            //检查命令是否执行失败。  
            if (p.waitFor() != 0) {  
                if (p.exitValue() == 1)//p.exitValue()==0表示正常结束,1:非正常结束  
                    System.err.println("命令执行失败!");  
            }  
            inBr.close();  
            in.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  

本文转载自:http://wuhongyu.iteye.com/blog/461477

Ryan-瑞恩

Ryan-瑞恩

粉丝 152
博文 245
码字总数 189501
作品 0
西安
后端工程师
私信 提问
java虚拟机的启动实例--eclipse的方式

查看eclipse的源代码,有以下一个zip压缩包: src/plugins/org.eclipse.platform/launchersrc.zip 这是eclipse的启动源码包,解压后有一个launchersrc/library目录,该目录中有一个文件eclip...

晨曦之光
2012/04/10
938
0
eclipse导出maven工程的可执行jar包

一、eclipse导出maven工程的可执行jar包 建立两个maven工程 ZKServer 和ZKClient 注意:用maven进行开发管理的话,默认的打出来的jar包是不能运行的,需要在pom.xml文件中添加如下配置以生成...

cswangyx
2018/12/07
32
0
java和c的本质--最重要的是启动

java很神秘吗?说什么跨平台,虚拟机之类的。c#很神秘吗?c很神秘吗?操作系统呢?cpu呢?其实这些都不神秘,以前不懂操作系统的时候,看见个多线程就跟看见个神似的,现在呢?linux内核随便...

晨曦之光
2012/04/10
548
0
进入Android Dalvik虚拟机之Dalvik虚拟机的特点

Google于2007年底正式发布了Android SDK,Dalvik虚拟机也第一次进入了人们的视野。它的作者是丹.伯恩斯坦(Dan Bornstein)。Dalvik虚拟机作为Android平台的核心组件,拥有如下几个特点: 体...

柳哥
2015/01/08
1K
0
将Java程序作成exe文件的N种方法

使用制作可执行 JAR 文件包 下面就来看看什么是 JAR 文件包吧: a) JAR 文件包 JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件...

楓楪
2014/03/13
429
0

没有更多内容

加载失败,请刷新页面

加载更多

Springboot Redis详解

1. 在springboot中使用redis,只需要依赖spring-boot-starter-data-redis,然后在配置文件中配置spring.redis开头的一些配置,根据Redis的架构选择单节点,主从或集群模式,详情如下(2.0.0....

sunranhou
23分钟前
3
0
Android动画不执行

startAnimation 和 setAnimation 有一些区别 1、 imvIcon.startAnimation(anim);2、 imvIcon.setAnimation(anim); anim.startNow();...

安卓工程师王恒
35分钟前
2
0
一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

一、前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 controll...

郑清
今天
8
0
javascript-十六进制随机颜色

<script> // 编写一个函数,获得一个十六进制的随机颜色的字符串(如#20CD4F) // function randomColor(){ // var r = random(0,255).toString(16); // var g = random(0,255).toString(16......

ACKo
今天
3
0
springBoot +mybatis 出现sql 语句在数据库可以查询到,但是赋值到实体类上就没有的情况?

1.不要老是反复查看自己是否写错了,为啥有的能出来有的出不来? 可以查看配置文件中是否配置全: 如果在application.yml 文件中是如下配置: mybatis: mapper-locations: classpath:mapp...

kuchawyz
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部