Java如何调用可执行文件和批处理命令
● 篇一
Java 是种跨平台的语言,我们经常碰到需要通过Java调用windows下某些程序。有些第三方厂商如(ANT),也提供了调用windows下可执行程序的方法,但我们往往需要调用一些批处理命令。而java 却不提供。
这里,我采用一种变相的调用方法,使得Java 能调用批处理命令。如果您有更好的方法,希望您能告诉我。
前期准备[/B]
Quick Batch File (De)Compiler
将任何BAT、CMD批处理脚本编译为EXE文件!
开始
1. 运行exe 文件
这里,我采用一种变相的调用方法,使得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调用可执行文件。
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 调用,即可。
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小时内删除。
发表评论