`
soleegn
  • 浏览: 143795 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论
阅读更多

用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");
这样写是不可能对的~

记录一下,警告一下后人!

分享到:
评论

相关推荐

    CCD式铆合测定机保养说明书.doc

    CCD式铆合测定机保养说明书

    IOS操作系统开发/调试的案例

    IOS操作系统开发/调试的案例 iOS操作系统开发和调试是一个复杂但非常有趣的过程。下面是一个简单的iOS应用开发案例,展示了如何使用Swift和Xcode开发一个基本的iOS应用,并进行调试。

    【精美排版】基于STCC单片机的简易电子琴.doc

    单片机

    【精品】毕业设计:单片机模拟交通灯设计.doc

    单片机

    ATM系统需求说明书.doc

    ATM系统需求说明书

    线性离散系统的Z变换分析法-2

    线性离散系统的Z变换分析法的后续部分,计算机控制系统知识

    DF8B机车32位微机控制柜使用维护说明书.doc

    说明书

    ip2region.xdb

    ip2region.xdb

    IBM业务流程和运营决策管理产品词汇表中英文

    IBM业务流程和运营决策管理产品词汇表,包含中英文词汇,官方文档。

    【精美排版】基于单片机ATC电子琴课程设计.doc

    单片机

    数据挖掘与数据分析应用案例 数据挖掘算法实践 基于Python的数据挖掘在超市中的应用与分析.doc

    由于超市所面对的竞争环境越来越严峻,使得很多超市的管理人员和决策人员逐渐的认识到超市在信息时代要想获得更好的发展空间,数据支持是一项必不可少的手段,尤其是近10年来商品条码技术、收银POS系统等在超市中广泛运用,这为超市企业积累了大量的销售以及库存等方面的数据,这为超市的数据分析提供了很庞大的数据资源,由于以往超市很少对这些数据资源进行完整的分析和应用,使得超市在进货选择的类型、数量、厂家等都有一定的盲目性,同时对顾客的购买行为、购买趋势以及客户的关系没有进行透彻分析和研究,导致这些方面都基本缺乏较为科学的数据进行支持,这对提高超市核心竞争力和超市以后的发展极为不利。当人们逐渐认识到数据支持对于超市发展的作用和意义,他们也认识到在21世纪信息时代要想在如此激烈的竞争中占取有利的地位,得到最大的利润,必须要充分的利用好网络计算机信息技术、数据技术等,更深层次的去挖掘和分析以往的所有数据以及相关的数据的关系,从中提取对超市发展有利的核心决策数据,再根据决策数据来制定出相应的决策,最终使超市能够可持续的发展。

    基于Bootstrap实现的完全响应式后台管理模板页面,多平台自动适应

    基于Bootstrap实现的完全响应式后台管理模板页面,多平台自动适应,亲测完整。

    电力变压器保护毕业设计.doc

    变压器

    图论的思维导图-复习.xmind

    图论的思维导图-复习.xmind

    小米的声音世界-声音基础模型如何推动声音理解和生产

    1. 小米为什么做AI声学语音 小米的发展战略是“软件+硬件”结合AI,构建人车家全生态。 小米拥有庞大的硬件基础,包括智能手机、汽车、IoT设备等,需要AI声学语音技术来提升用户体验。 2. AI声学语音的技术和应用 小米已经建立了完善的声学语音算法体系,涵盖语音交互、拾音降噪、声音情境感知、视觉抠音、跨设备声纹识别等技术。 小爱同学作为语音交互平台,拥有庞大的用户群体和应用场景。 3. 声音基础模型赋能声学语音 小米提出了“声音基础模型”的概念,并以Xiaomi Dasheng为例进行介绍。 Xiaomi Dasheng是一个深度音频信号整体嵌入模型,拥有1.2B参数和27万小时的训练数据。 声音基础模型可以应用于多种场景,例如: SCAR (Sound Component Analysis & Reconstruction):提取视频中的语音和环境音,实现声音橡皮擦功能。 大模型语音合成:实现更自然、流畅的语音合成效果。 Unified Model:将语音识别和语音合成模型统一,提升效率和效果。 小米通过AI声学语音技术和声音基础模型,不断提升用户体验,并探索更多应用场景

    使用hadoop进行数据分析.pdf

    Hadoop 是一个分布式系统框架,它允许使用简单的编程模型跨大型集群进行大数据的存储和处理。以下是如何使用 Hadoop 进行数据分析的基本步骤: 环境准备: 1.安装 Hadoop 集群。这通常包括 NameNode、DataNode、ResourceManager、NodeManager 等角色。 2.配置 Hadoop 环境,包括 Hadoop 配置文件(如 core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml 等)。 3.确保集群中的节点之间可以相互通信。 数据上传: 1.使用 Hadoop 的分布式文件系统(HDFS)将数据上传到集群中。你可以使用 hadoop fs -put 命令将本地文件或目录上传到 HDFS。 数据预处理: 1.如果数据需要清洗、转换或整合,可以使用 Hadoop 的 MapReduce 编程模型或其他工具(如 Apache Pig、Hive 等)进行预处理。 2.MapReduce 允许你编写两个函数:Mapper 和 Reducer,以处理数据并产生结果。 数据分析: 1.Map

    source+insight使用技巧.txt

    source+insight使用技巧

    应用密码学课题研究.docx

    ssl的应用与原理

    ERAC192khz至768khz

    本次对ERAC格式进行了升级,目前可以支持1536khz的wav音频压缩。超过384khz不提供播放。实际播放效果以声卡限制为准,目前只能通过PowersShell和CMD使用。

    SQL数据库与表的创建.doc

    数据库

Global site tag (gtag.js) - Google Analytics