- 浏览: 311112 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
liuyong19832011:
,赞一个
Java通过BufferedWriter追加内容到文件末尾的几种常用方法 -
justjavac:
总结很好,怎么没人支持呢?最近发现iteye踩贴现象很严重。
shell数组的使用
http://www.blogjava.net/supercrsky/articles/176525.html
用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");
这样写是不可能对的~
用Java调用Dos命令时直接用以下命令就可以完成:
String command="ping 192.168.1.1";
Runtime.getRuntime().exec(command);
并可以使用Process类的getInputStream()方法获取输出结果,但是,我在调用一些工具软件的Dos命令时却出现了问题,输出结果只能取到前面一小部分,经测试发现,exec(command)之后没多久,Java就认为这个进程结束了,并立即开始执行下面的操作,但这时command实际上并没有结束,但由于流的关闭而被迫中断。
后来用了同事介绍的方法,将这些Dos命令全部放在一个批处理文件当中,并用
String command="cmd /c start d:\\wmv.bat"
的方法来调用(如果不加cmd /c的话,执行同样会出错),这样一来,Java只是新起了一个进程去执行批处理,并不会去管进程是否结束,而是直接开始执行下面的语句。
但这样还是有一个问题,就是Java和这个批处理没法进行交互,我试过了Process中的existValue()及waitFor()方法(都是网上说可用来判断进程是否结束的方法),但都起不到作用,往往是进程已经结束了,但Java还认为没结束,或者干脆是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");
这样写是不可能对的~
用Java调用Dos命令时直接用以下命令就可以完成:
String command="ping 192.168.1.1";
Runtime.getRuntime().exec(command);
并可以使用Process类的getInputStream()方法获取输出结果,但是,我在调用一些工具软件的Dos命令时却出现了问题,输出结果只能取到前面一小部分,经测试发现,exec(command)之后没多久,Java就认为这个进程结束了,并立即开始执行下面的操作,但这时command实际上并没有结束,但由于流的关闭而被迫中断。
后来用了同事介绍的方法,将这些Dos命令全部放在一个批处理文件当中,并用
String command="cmd /c start d:\\wmv.bat"
的方法来调用(如果不加cmd /c的话,执行同样会出错),这样一来,Java只是新起了一个进程去执行批处理,并不会去管进程是否结束,而是直接开始执行下面的语句。
但这样还是有一个问题,就是Java和这个批处理没法进行交互,我试过了Process中的existValue()及waitFor()方法(都是网上说可用来判断进程是否结束的方法),但都起不到作用,往往是进程已经结束了,但Java还认为没结束,或者干脆是Java认为结束了,但进程却实际还在运行着。
发表评论
-
[转] System.out.println()和System.out.write()的区别
2013-12-27 16:14 988转至:http://blog.chinaunix.net/ui ... -
[转]Java读取解析sql文件,并使用netiler dao执行sql
2013-12-26 15:25 8101转至: 最近在做系统数据初始化,采用sql形式导入基础数据,这 ... -
[转]Java 单例模式详解
2013-08-20 11:15 828转至:http://www.cnblogs.com/whgw/ ... -
[转]Java synchronized详解
2013-08-07 19:12 942转至:http://www.cnblogs.com/devin ... -
[转]Java Socket Programming-Transferring large sized files through socket
2013-08-06 18:26 2917转至:http://www.coderpanda.com/ja ... -
【转】java如何从ftp下载超大文件
2013-08-06 00:28 2139转至: http://www.2cto.com/k ... -
【转】java大数据处理(千万级别FTP下载)
2013-08-06 00:20 1625转至:http://www.th7.cn/Program/ja ... -
Jakarta-Common-IO使用笔记
2013-08-05 14:11 1061转至: http://tech.ddvip.com/2008- ... -
[转]StringUtils详细介绍
2013-07-24 17:31 1335原文地址:http://www.blogj ... -
[转]BeanUtils.copyProperties()的用法
2013-07-24 15:16 2735原文地址: http://blog.csdn.net/itmy ... -
[转]Java内存泄漏
2013-04-10 13:45 922http://www.cnblogs.com/dotnetdo ... -
【转】java实现导出Excel文件和XML文件
2013-03-07 23:00 1450http://www.2cto.com/kf/201208/1 ... -
Java中split的注意事项
2013-01-22 00:08 1093stringObj.split([separator,[lim ... -
Struts2.2.1注解方式使用json整合jquery getJson方法
2013-01-10 22:53 01.引入与json相关的jar文件: json-lib ... -
ssh2常用annotation
2012-01-30 21:54 1044Spring annotation: @Servic ... -
Java日期类型与String的转换
2011-11-04 14:30 91991.String转Date SimpleDateFormat ... -
Java通过BufferedWriter追加内容到文件末尾的几种常用方法
2011-07-18 16:15 33913import java.io.BufferedWriter; ... -
JAVA map的遍历
2011-07-05 09:07 1071第一种entrySet,效率较高,推荐用这种: Map ... -
java.lang.OutOfMemoryError: Java heap space 的解决[转载]
2011-05-27 14:00 10861、首先是:java.lang.OutOfMemoryErro ... -
synchronized与static synchronized 的区别
2011-02-22 14:37 29621.synchronized与static synchro ...
相关推荐
在Java中执行外部可执行文件或批处理脚本是一种常见的需求,尤其是在需要调用系统级别的工具或者与操作系统进行交互时。通过Java的`Runtime`类及其提供的方法,我们可以方便地实现这一功能。本文将详细介绍如何在...
Java调用可执行文件和批处理命令是Java开发中常见的需求,特别是在与系统交互或集成外部工具时。本文将详细讲解两种主要的方法:调用exe文件和通过转换批处理文件来间接调用。 首先,调用Windows下的可执行文件...
综上所述,Java调用Windows可执行文件是一个常见的需求,可以通过Runtime或ProcessBuilder类实现。理解并正确使用这些功能,可以帮助开发者实现更复杂的跨平台集成需求。在具体应用中,应考虑安全性、错误处理和资源...
批处理文件(.bat)是一种文本文件,包含了可执行的DOS命令。当用户运行这个文件时,Windows会逐行解析并执行这些命令。这对于运行Java程序特别有用,尤其是需要设置环境变量或执行多条命令的情况。 2. **JAVA环境...
在Java编程中,调用批处理操作...总之,Java调用批处理是一个涵盖广泛的主题,从简单的系统调用到复杂的批处理框架,都需要根据实际需求来选择合适的方法。理解这些概念和技术将有助于你编写出高效、可靠的批处理程序。
这一步是为了确保批处理文件能找到Java的可执行文件,如`java.exe`。 3. **项目地址**: `cd /D %PROJECT_DIR%`用于切换到项目目录,`%PROJECT_DIR%`是你需要替换为实际项目路径的占位符。这样,批处理文件就能在...
标题中的“生成java可执行文件”指的是将Java程序转换成可以直接运行的格式,如同Windows操作系统下的.exe文件。这种转换的目的是使Java程序更便于运行,尤其是对于那些没有安装Java运行环境的用户。描述中提到的...
这通常涉及到创建一个批处理脚本(在Windows系统中是`.bat`文件,在Unix或Linux系统中是`.sh`文件),然后在这个脚本中调用Java命令来运行程序。这种技术在需要定期执行任务、批量处理数据或者构建自动化流程时非常...
在Windows下,可能需要调用批处理文件(.bat文件)来执行程序。 6. **批处理文件调用**: 在Windows环境下,可以创建一个批处理文件(如`test.bat`),在其中写入执行命令,如`verifyta.exe light.xml light.q > ...
将Java程序转换为可执行文件的另一种方法是创建一个批处理文件(.bat),该文件可以调用Java虚拟机(JVM)来执行JAR文件。 1. **创建批处理文件**: - 在Eclipse导出JAR文件所在的目录中新建一个文本文件,例如命名...
将Java原代码转换为可执行的EXE文件是许多开发者追求的目标,尤其是在Windows平台上,因为EXE文件能够更方便地分发和运行。下面,我们将深入探讨如何通过一系列步骤,利用Eclipse IDE、JAR文件、批处理脚本(BAT)...
接着,通过`java -jar`命令运行JAR文件,这里的`permutation.jar`是你的Java程序的JAR包,`-jar`选项告诉JVM这是一个可执行的JAR文件。 "permutation.jar"是实际的Java应用程序,可能包含一个或多个类,其中一个类...
Linux服务器批处理远程命令执行工具。纯java实现的ssh协议(jsch),支持同时连接多台linux主机,执行相同的命令。...服务器无需配置ssh对等协议或安装任何agent插件...并发命令执行,可配置顺序或随机(阻塞)返回执行结果
8. **Kettle与Java集成的优势**:通过Java调用Kettle,可以充分利用Kettle的ETL能力,同时保留Java的灵活性和可扩展性。这种方法允许开发者将数据处理逻辑与业务逻辑结合,提供更健壮和定制化的解决方案。 以上是...
4. 打开文件:如果文件有与之关联的应用程序(比如`.doc`文件与Word关联),可以通过`exec()`直接打开文件,如`exec("a.doc")`或指定完整路径的可执行文件,如`exec("c:\\Program Files\\Microsoft Office\\office ...
2. **打开非可执行文件**: - 当你需要打开某个与特定应用程序关联的文件,如Word文档`a.doc`,可以直接使用`exec("start .\\a.doc")`。这种方法简洁且跨平台。如果需要明确指定应用程序执行文件,可以写成`"c:\\...
5. **批处理外部命令**:除了内置命令,还可以调用其他可执行程序或脚本,如`python.exe`、`java.exe`等。 学习批处理教程的关键点: 1. **命令语法**:了解每种批处理命令的正确用法,包括参数和选项。 2. **...
BAT批处理脚本是Windows操作系统中的一个非常实用的工具,它允许用户编写一系列命令行指令,形成一个可执行的批处理文件(.bat),从而实现自动化执行任务,提高工作效率。在给定的压缩包"BAT批处理脚本-java语言....
当我们在命令行输入`java`或`javac`等命令时,系统会在`PATH`中列出的每个目录下查找对应的可执行文件。为了能直接在任意目录下运行Java命令,我们需要将`%JAVA_HOME%\bin`添加到`PATH`中。 **3. CLASSPATH** `...