- 浏览: 659244 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
HkEndless:
不好意思,请问这确定是回调机制吗。你的例子中只是将接口的实现类 ...
Spring CallBack回调机制介绍 -
hanmiao:
写的真乱啊,完全不知所云...
Java如何调用可执行文件和批处理命令 -
junia_1:
junia_1 写道 shock: ...
为什么要使用EJB -
junia_1:
shock:
为什么要使用EJB -
coollifer:
不错
SQL Server数据导入到Oracle中的方法
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 Files\Microsoft Office\office\winword.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");
这样写是不可能对的~
记录一下,警告一下后人!
发表评论
-
hibernate Restrictions用法 MatchMode.ANYWHERE
2012-07-14 15:50 3970方法 说明 Res ... -
URLClassLoader
2012-05-27 19:45 998This example shows how a serv ... -
MyClassLoader 自定义类加载器
2012-05-27 19:38 1524package demo; import java. ... -
Deal with big-endian and little-endian order
2011-12-25 19:17 1120Java virtual machine always use ... -
修改eclipse的背景色
2011-11-12 19:23 1114eclipse 操作界面默认颜色为白色。对于我们长期 ... -
多线程管道流输入输出模式
2011-11-07 07:23 1091import java.io.* ; class Send ... -
Java计数单字节双字节字符个数的例子
2011-10-26 14:29 1294/* 计数单双字符的个数并存储在Map对象中 ... -
常用内存数据库3
2011-10-24 00:24 15204.1.2 哪些场合适合使用其他的关系型数据库管 ... -
java字节码规则
2011-09-05 13:56 1253栈和局部变量操作 将常量压入栈的指令 aconst_nul ... -
Tomcat中限制ip访问
2011-08-23 21:40 1272Tomcat中限制ip访问是非常简单的,只需要编辑server ... -
一个Java程序员应该掌握的10项技能
2011-08-22 10:27 6211、语法:必须比较熟 ... -
2011 年 8 月 Java 开发人员新闻快讯
2011-08-18 18:59 837Java SE 7 发布了! 经过世界各地 Ja ... -
BlockingQueue
2011-08-13 09:59 718import java.util.concurrent.Arr ... -
eclipse中java项目转换为web项目
2011-07-27 18:29 897经常在eclipse中导入web项目时,出现转不了项目类型 ... -
Oracle官方Weblogic插件安装
2011-07-20 22:00 2881Installing Oracle Enterprise Pa ... -
Java集合HashSet-ArrayList-HashMap的线程同步控制方法和区别
2011-06-21 17:44 2321C ollections类中提供了多 ... -
关于java的集合类,以及HashMap中Set的用法
2011-06-21 17:35 1806import java.util.*; public c ... -
Java的动态代理实例
2011-06-16 03:44 1058首先写一个接口: package net.test.dyna ... -
jsp实现图片验证码的方法
2011-06-07 00:57 1393调用方法 <img src=&quo ... -
java中使用IO流进行文件操作
2011-06-07 00:56 1832Java中对文件的操作 java中提供了i ...
相关推荐
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服务的数据库备份与...
批处理脚本通常包含若干行命令,如复制、移动、重命名文件等,以及调用其他可执行程序。 在使用这个批处理脚本之前,你需要准备以下两个关键文件: 1. 私钥文件:这是用于签名APK的密钥,通常是一个`.keystore`文件...
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** `...