Java如何调用可执行文件和批处理命令
篇一
Java 是种跨平台的语言,我们经常碰到需要通过Java调用windows下某些程序。有些第三方厂商如(ANT),也提供了调用windows下可执行程序的方法,但我们往往需要调用一些批处理命令。而java 却不提供。
    这里,我采用一种变相的调用方法,使得Java 能调用批处理命令。如果您有更好的方法,希望您能告诉我。

前期准备[/B]
    Quick Batch File (De)Compiler
    将任何BAT、CMD批处理脚本编译为EXE文件!

开始
1.    运行exe 文件
Java JDK里已经提供了调用的方法,不在累赘,代码如下。

    try {
        String command = "notepad";
        Process child = Runtime().exec(command);
    } catch (IOException e) {
   
    }
   

2.    运行 bat(批处理) 文件
    Java 对批处理文件还不支持。刚开始一直在研究 Java    如何调用批处理文件,始终不到解决方法。后来只好绕过批处理,考虑如何将批处理转换为exe可执行文件。然后再通过Java调用可执行文件。

    在Google上搜索一下,到Quick Batch File (De)Compiler,可以将任何BAT、CMD批处理脚本编译为EXE文件。使用了一下,果然可以。

    Quick Batch File (De)Compiler使用非常简单:
    Quickbfc 文件名.bat 文件名.exe(将批处理命令编译为可执行文件)
    quickbfd 文件名.exe 文件名.bat(将可执行文件反编译为批处理命令)

        然后,我们再按第一种方法通过Java 调用,即可。
篇二
由于java 是跨平台的,有时候我们需要用到操作系统的一些信息,为了方便期间,干脆就直接调用操作系统的命令来实现,比如查看IP地址,MAC地址等。不过两个在jdk6里面已经有了,不过以前都是用调用dos命令,然后获取输出的办法来做的,比如:
完整代码:
Java代码
package cmd; 
 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
 
class StreamDrainer implements Runnable { 
    private InputStream ins; 
 
    public StreamDrainer(InputStream ins) { 
        this.ins = ins; 
    } 
 
    public void run() { 
        try { 
            BufferedReader reader = new BufferedReader( 
                    new InputStreamReader(ins)); 
            String line = null; 
            while ((line = adLine()) != null) { 
                System.out.println(line); 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        }  jdk怎么使用
    } 
 
 
public class TestRunCmd { 
 
    public static void main(String[] args) { 
        String[] cmd = new String[] { "", "/C", "wmic process get name" }; 
        try { 
            Process process = Runtime().exec(cmd); 
             
            new Thread(new InputStream())).start(); 
            new Thread(new ErrorStream())).start(); 
             
            OutputStream().close(); 
 
            int exitValue = process.waitFor(); 
            System.out.println("返回值:" + exitValue); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
 
    } 
 
篇三
本人在项目中遇到这样一个问题,要使用java来调用本地应用程序执行某些操作,例如执行isql命令,来kill掉数据库中的某些进程,这些是数据库本身的命令,很多jdbc根本不支持这些命令,所以不得不使用调用本地应用程序来执行这些命令。
java 中Runtime类是可以调用本地应用程序的可以通过Runtime()来得到Runtime实例,然后执行exec方法来调用本地应用程序,Runtime类中有很多exec方法,参数不同,但是最后都会调用exec(String[] cmdarray, String[] envp, File dir) 这个方法,
其中cmdarray是要执行的本地命令集合,envp是环境变量,dir是exec返回的Process的工作目录。
比较容易出错的地方是环境变量的设置,如果envp  is null,那么它会集成它的父进程的环境变量,如果不知道怎么设环境变量,这通常是一个好的选择,如果环境变量设置不当很有可能不到dll或其他东西而是本地应用程序执行失败,一般会报这样的异常
> java.io.IOException: CreateProcess: yourcmd error=2
> at java.ate(Native Method)
> at
> java.lang.Win32Process.<init>(Win32Process.java:63)
> at java.Internal(Native Method)
> at java.(Runtime.java:566)
> at java.(Runtime.java:428)
> at java.(Runtime.java:364)
> at java.(Runtime.java:326)
error =2表示filenotfound
Java代码
public void testProcess() 
  { 
      try 
      { 
          String home="e:/process"; 
        String command = "D:/Sybase/bin/isql -Uuser -Pyourpwd  -SserverName -iisql.sql"; 
        File dir = new File(home); 
         
        Process p = Runtime().exec(command, null, dir); 
         
        StringBuffer strOutput = new StringBuffer(); 
        BufferedReader in = new BufferedReader(new InputStream())); 
        String strProc; 
        while((strProc = in.readLine()) != null) 
        { 
            strOutput.append(strProc+"\n"); 
        } 
         
        logger.debug("output is "+String()); 
      } 
      catch(IOException e) 
      { 
          logger.warn("IOException ", e); 
      } 
  } 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。