Java是种跨平台的语言,我们经常碰到需要通过Java调用windows下某些程序。有些第三方厂商如(ANT),也提供了调用windows下可执行程序的方法,但我们往往需要调用一些批处理命令。而Java却不提供。这里,我采用一种变相的调用方法,使得Java能调用批处理命令。
前期准备
Quick Batch File (De)Compiler
将任何BAT、CMD批处理脚本编译为EXE文件。
1、运行exe 文件
Java JDK里已经提供了调用的方法,不在累赘,代码如下。
try {
String command = "notepad";
Process child =
Runtime.getRuntime().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编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式:
...
Process process = Runtime.getRuntime().exec(".p.exe");
process.waitfor( );
...
在上面的程序中,第一行的“.p.exe”是要执行的程序名,Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。
但在windows平台上,如果处理不当,有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况:
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 FilesMicrosoft Officeofficewinword.exe .a.doc");
显然,前一种方法更为简捷方便。
3、执行一个有标准输出的DOS可执行程序
在windows平台上,运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭,从而导致Java应用程序阻塞在waitfor( )。导致该现象的一个可能的原因是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java提供的Process 类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。一段典型的程序如下:
...
String ls_1;
Process process = Runtime.getRuntime().exec("cmd /c dir windows");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream());
while ( (ls_1=bufferedReader.readLine()) != null)
System.out.println(ls_1);
process.waitfor( );
...
以上内容为转载~下面内容为原创!
今天在做客户端程序的自动更新,简单描述一下,就是从服务器上将更新包下载下来,然后在本地解压缩,最后删掉~功能很简单~
但是问题出在使用JAVA的ZIP模块做文件的解压缩不是想象的那么简单,资源需要释放,一个不小心就没有办法删除掉原有ZIP文件了~资源的占用确实是个大问题,但是好在,客户端程序更新完是要重启的,一切都烟消云散了~对于删除不掉ZIP文件的问题,我也流氓一下~用DEL硬删除~此处一定要注意!
Process process = Runtime.getRuntime().exec("cmd /c del f:aaa.doc");
这样的调用是没有问题~
Process process = Runtime.getRuntime().exec("del f:aaa.doc");
这样写是不可能对的~
记录一下,警告一下后人!
分享到:
相关推荐
Java调用可执行文件和批处理命令是Java开发中常见的需求,特别是在与系统交互或集成外部工具时。本文将详细讲解两种主要的方法:调用exe文件和通过转换批处理文件来间接调用。 首先,调用Windows下的可执行文件...
在Java中执行外部可执行文件或批处理脚本是一种常见的需求,尤其是在需要调用系统级别的工具或者与操作系统进行交互时。通过Java的`Runtime`类及其提供的方法,我们可以方便地实现这一功能。本文将详细介绍如何在...
批处理文件(.bat)是一种文本文件,包含了可执行的DOS命令。当用户运行这个文件时,Windows会逐行解析并执行这些命令。这对于运行Java程序特别有用,尤其是需要设置环境变量或执行多条命令的情况。 2. **JAVA环境...
这个方法接受一个字符串参数,该参数应该包含完整的操作系统命令,包括可执行文件路径和任何必要的参数。例如,如果你有一个名为`mybatch.bat`的批处理文件,你可以这样调用: ```java Runtime.getRuntime().exec(...
这一步是为了确保批处理文件能找到Java的可执行文件,如`java.exe`。 3. **项目地址**: `cd /D %PROJECT_DIR%`用于切换到项目目录,`%PROJECT_DIR%`是你需要替换为实际项目路径的占位符。这样,批处理文件就能在...
标题中的“生成java可执行文件”指的是将Java程序转换成可以直接运行的格式,如同Windows操作系统下的.exe文件。这种转换的目的是使Java程序更便于运行,尤其是对于那些没有安装Java运行环境的用户。描述中提到的...
例如,`rt.exec("./verifyta 2doors.xml 2doors.q")`会执行名为`verifyta`的可执行文件,并传递`2doors.xml`和`2doors.q`作为参数。这里的路径`./verifyta`假设是在当前工作目录下。 3. **处理输入/输出流**: ...
rem 设置JDK的bin目录,确保Java可执行文件路径正确 set JAVA_HOME=C:\Program Files\Java\jdk版本号\bin set PATH=%JAVA_HOME%;%PATH% rem 指定JAR文件名和主类名 java -jar permutation.jar ``` 这个批处理文件...
批处理执行Java代码的关键在于正确配置环境变量,指定Java的路径和类路径,以及正确地调用`java`命令来运行程序。此外,批处理脚本还可以包含其他操作,如文件操作、条件判断、循环等,以实现更复杂的自动化任务。...
将Java原代码转换为可执行的EXE文件是许多开发者追求的目标,尤其是在Windows平台上,因为EXE文件能够更方便地分发和运行。下面,我们将深入探讨如何通过一系列步骤,利用Eclipse IDE、JAR文件、批处理脚本(BAT)...
Java程序可以直接通过`Runtime.getRuntime().exec()`方法来执行操作系统级别的批处理命令。例如,你可以调用系统中的批处理脚本或者命令,如Windows的`.bat`文件或Linux的`.sh`脚本。这种方式简单直接,但缺点是与...
将Java程序转换为可执行文件的另一种方法是创建一个批处理文件(.bat),该文件可以调用Java虚拟机(JVM)来执行JAR文件。 1. **创建批处理文件**: - 在Eclipse导出JAR文件所在的目录中新建一个文本文件,例如命名...
总之,Java调用DOS命令主要依赖`Runtime`和`Process`类,需要注意命令格式、标准输出处理以及资源管理等问题,以确保命令的正确执行和程序的稳定运行。在实际开发中,应充分考虑各种情况,以保证代码的健壮性和跨...
例如,系统会生成数据库备份命令和文件压缩命令,然后通过调用相应的命令行工具来完成备份任务。 总结来说,文章强调了自动化备份和恢复系统在中小型企业中的重要性,并且通过实际开发的基于Web服务的数据库备份与...
2. **打开非可执行文件**: 如果你想打开一个关联了特定应用程序的文件,比如一个Word文档,你可以使用`exec()`方法直接调用文件。例如,`exec("start .\\a.doc")`会在默认关联的应用程序中打开`a.doc`,而`exec("c...
5. **批处理外部命令**:除了内置命令,还可以调用其他可执行程序或脚本,如`python.exe`、`java.exe`等。 学习批处理教程的关键点: 1. **命令语法**:了解每种批处理命令的正确用法,包括参数和选项。 2. **...
当我们在命令行输入`java`或`javac`等命令时,系统会在`PATH`中列出的每个目录下查找对应的可执行文件。为了能直接在任意目录下运行Java命令,我们需要将`%JAVA_HOME%\bin`添加到`PATH`中。 **3. CLASSPATH** `...