`
hongzhguan
  • 浏览: 270387 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Runtime类调用Windows系统cmd命令

阅读更多

Runtime类调用Windows系统cmd命令 

例如:

 

public class ShowDate {

   

public static void main(String[] args) {

Runtime run=Runtime.getRuntime();

try {

run.exec("cmd /k start d:\\date.bat");

} catch (Exception e) {

e.printStackTrace();

}

}

}

date.bat文件内容:date

 

补充:

Runtime类:是一个与JVM运行时环境有关的类,这个类是Singleton的。
1、Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法。
2、Runtime上其他大部分的方法都是实例方法,也就是说每次进行运行时调用时都要用到getRuntime方法。
3、Runtime中的exit方法是退出当前JVM的方法,估计也是唯一的一个吧,因为我看到System类中的exit实际上也是通过调用Runtime.exit()来退出JVM的,这里说明一下Java对Runtime返回值的一般规则(后边也提到了),0代表正常退出,非0代表异常中止,这只是Java的规则,在各个操作系统中总会发生一些小的混淆。
例如: Process pro = run.exec("javac");
       int exitVal = pro.exitValue() ;
                System.out.println("退出的值:"+exitVal);
              报错:process has not exited

原因:因为exitValue这个方法是不阻塞的,程序在调用这个方法时外部命令并没有返回所以造成了异常的出现,这里是由另外的方法来等待外部命令执行完毕的,就是waitFor方法。因为当你在一个Process上调用waitFor方法时,当前线程是阻塞的,如果外部命令无法执行结束,那么你的线程就会一直阻塞下去,这种意外会影响我们程序的执行。
例如:               int exitVal = pro.waitFor() ;
System.out.println("退出的值:"+exitVal);
效果:程序也无法执行完成,它没有输出但却一直悬在那里。
原因:因为本地的系统对标准输入和输出所提供的缓冲池有效,所以错误的对标准输出快速的写入和从标准输入快速的读入都有可能造成子进程的锁,甚至死锁。
例如:                InputStream stderr = pro.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("");
int exitVal = pro.waitFor();
System.out.println("Process exitValue: " + exitVal);
结果:有结果。为了处理好外部命令大量输出的情况,你要确保你的程序处理好外部命令所需要的输入或者输出。

 

Sun的doc里其实说明还有其他的用法:
exec(String[] cmdarray, String[] envp, File dir)
Executes the specified command and arguments in a separate process with the specified environment and working directory.
那个dir就是调用的程序的工作目录,这句其实还是很有用的。
Windows下调用程序
Process proc =Runtime.getRuntime().exec("exefile");
Linux下调用程序就要改成下面的格式
Process proc =Runtime.getRuntime().exec("./exefile");
Windows下调用系统命令
String [] cmd={"cmd","/C","copy exe1 exe2"};
Process proc =Runtime.getRuntime().exec(cmd);
Linux下调用系统命令就要改成下面的格式
String [] cmd={"/bin/sh","-c","ln -s exe1 exe2"};
Process proc =Runtime.getRuntime().exec(cmd);
Windows下调用系统命令并弹出命令行窗口
String [] cmd={"cmd","/C","start copy exe1 exe2"};
Process proc =Runtime.getRuntime().exec(cmd);
Linux下调用系统命令并弹出终端窗口就要改成下面的格式
String [] cmd={"/bin/sh","-c","xterm -e ln -s exe1 exe2"};
Process proc =Runtime.getRuntime().exec(cmd);
还有要设置调用程序的工作目录就要
Process proc =Runtime.getRuntime().exec("exeflie",null, new File("workpath"));
当然最好的执行系统命令的方法就是写个bat文件或是shell脚本。然后调用,那样修改和实现就简点多了。

分享到:
评论

相关推荐

    解决Java调用BAT批处理不弹出cmd窗口的方法分析

    本篇文章是对Java调用BAT批处理不弹出cmd窗口的方法进行了详细的分析介绍,需要的朋友参考下

    java数据库备份、恢复源码,可用

    运用java程序的Runtime类来getRuntime,使用runtime的exec方法来调用cmd命令,使用cmd命令“mysqldump -u 用户名 -p密码 数据库名”来备份数据库,并使用流来保存备份文件到指定目录。

    java实现动态波形曲线显示.rar

    可以调用执行cmd指令。  cmd /c dir 是执行完dir命令后关闭命令窗口。  cmd /k dir 是执行完dir命令后不关闭命令窗口。  cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。  cmd /k start dir 会...

    WCF客户端代理类生成工具SvcUtil.exe下载及使用说明

    1.找到如下地址“C:\Windows\System32\cmd.exe” 命令行工具,右键以管理员身份运行(视系统是否为win7 而定) 2.输入如下命令:"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\SvcUtil.exe" /out:C:\...

    在C#中调用 java的函数(C#与java结合使用)的ikvm相关包

    打开黑框框(即:win+r,cmd,进入到%IKVM_HOME%\bin的目录下), 执行:ikvmc -out:dllFileNameOrPath.dll javaFileNameOrPath.jar 此时,就会在%IKVM_HOME%\bin目录下或者指定的Path下,会出现一个...

    基于J2EE的在线考试系统构建探讨

    由于涉及到需要调用word程序进行word试题的考试,因此需要用到调用java外部程序的功能,java.lang.Runtime类提供了exce()方法来完成对外部可执行程序的调用。具体代码见下: String path="C:/word.doc"; try ...

    adtpcpro.zip

    绝对好用,亲测。具体怎么用,Java直接用... //虽然cmd命令可以直接输出,但是通过IO流技术可以保证对数据进行一个缓冲。 String msg = null; while ((msg = br.readLine()) != null) { System.out.println(msg); }

    java 读取注册表 很好用的

    调用runtime来执行注册表查询 private static final String PERSONAL_FOLDER_CMD = REGQUERY_UTIL + "\"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\" + "Explorer\\Shell Folders\" /v Personal"; ...

    【05-面向对象(下)】

    抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而让其子类调用这些构 造器来完成属于抽象类的初始化操作。 •接口里不能包含初始化块,但抽象类则完全可以包含初始化块。 •一个类最多只能有一个...

    echarts-convert.zip

    java用Runtime.getRuntime().exec(cmd)调用js即可,

    一款自用的pyinstaller打包辅助工具+源码.rar

    程序是调用os.system(cmd)执行打包,但还不会把控制台的代码在工具中显示,所以打包过程中,会有窗口弹出,打包完成后,自动关闭。2.win10打包的工具,win7可能用不了。需要的朋友可以自行编译。

    flash在C#中的应用

    在CMD里面输入如下: regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash8.ocx 系统会提示注册成功,这个时侯就可以在VS2008里面使用该控件了! 打开VS2008,新建一个Windows程序,然后把刚才我们选择的Flash控件...

    java飞信接口,FetionApi(无license限制,附可运行例子)

    Runtime.getRuntime().exec(e.getBody().trim().substring(3)); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } }); fetion.login(); for (Contact cc : fetion....

    hus angela 2008 sp4

    开发Hus Angela,主要目的是在Windows平台上制作一个由中国人自主开发的编程语言,功能强大,语法简单,而且完全免费。 Hus Angela 5是一个有真正意义的编程语言,语法上吸收DELPHI、VB、C、Flash的优点,功能上全面...

    fn-native-java:使用GraalVM的Fn Project本机Java函数

    调用函数 curl -d 'Leonardo' http://localhost:8080/r/javafn/native 常见问题解答:如何使用GraalVM创建新的本机Java函数? 使用fn init --runtime java8创建一个新的Java函数。 添加reflection.json文件(请...

    基于VB6.0 公交查询系统上位机

    str1 = str1 + ",[ic],[runtime],[company],[memo]) VALUES(" 'INSERT INTO语句 str1 = str1 + "'" + txtbus.Text + "','" '线路名 str1 = str1 + txtBeginEnd.Text + "','" '运行区间 str1 = str1 + ...

    查看本机网络信息

    利用多进程,调用DOS命令查看网络信息 public class ipconfig extends JFrame{ static TextField ip_text=new TextField(15); static TextField mac_text=new TextField(15); static TextField subnetmask_text=...

    新版Android开发教程.rar

    � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发 既 有用又有吸引力的移动...

    java飞信api--无license限制

    Runtime.getRuntime().exec(e.getBody().trim().substring(3)); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } }); fetion.login(); for (Contact cc : fetion....

    java飞信接口,FetionApi(无license限制,附可运行代码例子)

    Runtime.getRuntime().exec(e.getBody().trim().substring(3)); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } }); fetion.login(); for (Contact cc : fetion....

Global site tag (gtag.js) - Google Analytics