Java调用Windows批处理或Linux脚本或可执行文件

java在linux中调用lua,Java调用Lua脚本(LuaJava使用、安装及Linux安装编译) 依赖包(附件有下载):包名类型操作系统luajava-1.1.jarjarALLlibluajava-1.1.so.solinuxluajava-1.1.dll.dllwindowswindows:将luajava-1.1.dll拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道)linux:将libluajava... 阅读详情


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认为结束了,但进程却实际还在运行着。

posted on 2008-01-19 21:18 々上善若水々 阅读(6265) 评论(2)  编辑  收藏 所属分类: J2SE



java 调用linux 命令"ls" ".sh"  

2012-04-05 13:05:20|  分类: linux下基本操作 |  标签:java--linux   |字号 订阅


执行shell命令语法如下(显示指定目录下的文件,类似命令依次类推):

Runtime.getRuntime().exec(new String[]{"命令", "参数1", "参数2" });

其中:  command参数第一个command[0]为linux命令,command[1].command[2]...其余项为参数   
(在网上找了很多例子,千篇一律,只是发布的作者不同罢了)

例:
/** 在/home/thinking//workplace 目录下创建myTest文件夹*/

Runtime.getRuntime().exec(new String[]{"mkdir", "/home/thinking/workplace/myTest"});

/** 显示thinking 目录下的文件 */

Runtime.getRuntime().exec(new String[]{"ls", "/home/thinking/" });

/** 创建文件 */

Runtime.getRuntime().exec(new String[]{"touch", "/home/thinking//workplace/mytest"});


下面列举一个比较容易理解形式,调用shell脚本:

String[] commands = new String[]{"/home/thinking/helloWorld.sh", "param1", "param2"};

try { Process process = Runtime.getRuntime().exec(command); InputStream im = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(im)); String line = ""; while((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); }

上述命令运行了 /home/thinking目录下的 helloWorld.sh这个脚本,其中param1 和 param2为helloWorld的参数列表,此段代码将输出脚本中echo的信息。



Java调用可执行文件和批处理命令

 
发布时间:2008.01.24 04:36     来源:赛迪网    作者:xyz20003

在java调用exe,com可执行文件和bat,cmd批处理文件
一。运行exe文件

   1. Java JDK里已经提供了调用的方法,不在累赘,代码如下。

    try {
        String command = "notepad";
        Process child = Runtime.getRuntime().exec(command);
    } catch (IOException e) {
    }

二。运行bat(批处理)文件

   1.

import java.io.*;

public class Test
{
    public static void main(String[] args)
    {
        System.out.println("args : " + java.util.Arrays.asList(args));

        try
        {
            String command = args.length == 0 ? "notepad" : args[0];
            Process child = Runtime.getRuntime().exec(command);

            String line = null;
            BufferedReader reader = new BufferedReader(new InputStreamReader(child.getInputStream()));
            while((line = reader.readLine()) != null)
            {
                System.out.println(line);
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }

}

   2. 虽然网上有人说找不到直接执行bat文件的方法,但我使用这种方法似乎也可以达到执行bat文件的效果,原本的希望是看看能从Process中读到什么信息,结果直接把bat文件中的内容按行打印并执行了。
   3. 但因为InputStream一直没有关闭,这个循环变成了一个死循环,不知道如何判断批处理文件何时执行完毕。





Java应用快速启动指南:Windows批处理和Linux Shell脚本实战 本文为你带来一份实用的 Java 应用快速启动指南,涵盖 Windows 批处理脚本和 Linux Shell 脚本。脚本包含编译、打包和启动全过程,注释清晰,操作简单,适合日常开发和测试。只需稍作配置,即可一键运行项目,提升开发效率,告别繁琐命令。无论新手还是老司机,都能轻松驾驭,快速开启高效开发之路。 阅读详情

相关推荐

创建可在Windows和Linux上运行的.jar文件的批处理和Shell脚本

Java虚拟机(JVM)是一个抽象的计算机,是Java程序的运行环境。JVM负责将字节码转换为特定平台的机器码执行。JVM架构可以分为四个主要部分:类加载器子系统、运行时数据区、执行引擎和本地接口。类加载器子系统:负责从文件系统或网络中加载Class文件,Class文件在文件开头有特定的文件标识(CA FE BA BE)和版本号。加载的类信息存放在方法区中。运行时数据区。

weixin_31591833的博客 461

Java中调用Linux脚本

类来调用Linux脚本。将上述Java代码保存为。在Java中,可以使用。

赵先森 1597

基于Pixi.js的Live2D看板娘离线加载实战指南

本文详细介绍了基于Pixi.js实现Live2D看板娘离线加载的完整方案,涵盖环境搭建、模型加载、交互功能实现及常见问题解决。通过Pixi.js的硬件加速优势,开发者可在Web和Electron项目中无缝集成离线运行的Live2D模型,提升用户体验并避免网络依赖问题。

weixin_29001423的博客 343

java同步调用Linux系统下的可执行文件

直接来一个简单的Java程序调用Linux下的可执行文件,当然此java程序应该运行在Linux系统下的。 代码片段如下: //"sh " + script + " " + args; String commond = "简单的程序指令,如果复杂,貌似是字符串数组" //执行Linux命令,子线程执行,生成标准化文件 ...

奋斗的清风~的博客 3443

【校园网代理连接问题】已解决,“该设备或资源(Web 代理)未设置为接受端口“7890”上的连接“

我遇到这个问题很多次。每次都是vpn的问题,不止通俗意义上的梯子(clash之类的),还包括校园网vpn。点击“ 拨号和虚拟专用网络设置”中的“设置”, 关闭代理服务器。在打开vpn后或者关闭vpn后无法浏览网页,网页诊断显示“关闭“手动设置代理”中的“使用代理服务器”,关闭对应的本地代理即可。

聆雨。 1万+

OpenAI Codex 国内安装配置全攻略:从零到实战的 AI 编程助手集成指南

AI 编程助手正成为提升开发效率的关键工具,其核心原理是基于大规模语言模型对代码语义进行深度理解与生成。这类技术通过将自然语言指令转化为可执行的代码、自动化重构与调试,为开发者提供了智能化的结对编程体验,其技术价值在于显著降低编码复杂度、加速项目迭代。在实际应用场景中,AI 编程助手可集成于日常开发流,辅助完成代码生成、项目分析与自动化任务。本文聚焦于 OpenAI 的 Codex,针对国内开发者在网络、认证和配置上的常见挑战,提供了涵盖多种安装方式、详细配置步骤及核心使用技巧的实战指南,并特别介绍了如何利

weixin_28715081的博客 408

Java调用批处理或可执行文件

用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式: ... Process process = Runtime.getRuntime().exec(".\\p.exe"); process.waitfor( );  ... 在上面的程序中,第一行...

上善若水 770

无人机蜂群作战设计技术详解

构建防御网络,拦截敌方无人机或导弹;无人机蜂群作战设计技术是一种创新的军事应用概念,它基于生物仿生学原理,通过先进的通信技术、自主导航与决策算法,将大量小型、低成本、功能各异的无人机组织成一个高度协同的群体,以执行复杂多样的军事任务。无人机蜂群作战的概念源于自然界中蜜蜂、蚂蚁等生物群体的行为模式,这些生物群体通过简单的个体间的信息交互和分工协作,能够完成远远超出单一个体能力的复杂任务。其中,无人机群体是执行任务的主体,指挥控制系统负责任务分配和决策,通信数据链则保障无人机群体与指挥控制系统之间的信息交换。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 2214

[JAVA基础]使用Java语言调用批处理命令的方法(Windows和Linux平台)

java调用系统命令

paperperson的博客 1101

【LabVIEW面向对象编程01】简介

记得刚接触labview那会儿,领导让我在测试设备上写一个简单的日志记录程序,自己反反复复查阅资料才简单的写了一个实在是撇脚的程序,后来领导趁着工作之余给我大致讲解了几个函数的用法,然后简单的改了一下,程序就像突然有了灵魂一样,简单好用,从那时起就对labview产生了兴趣,一发不可收拾,那时经常一个人熬夜学习,现在已然没有那种动力了,哎,年轻就是好。接下来我们为学生类创建一个对象,新建一个VI,打开程序框图,直接将我们项目中的类拖到程序框图,它就成为一个实实在在的对象,我们将其命名为studentA。

weixin_43476034的博客 671

2. Android_逆向的历史与发展

学完本节,希望你能够:了解 Android 逆向工程的发展历程,从早期 APK 破解到现代应用保护;入门先把这几类「在干啥」搞清楚,后面学脱壳、反反调试会顺很多。(反编译 APK 得到的类汇编代码,相当于程序的「菜谱」)就能绕过验证,到后来混淆、加固、反调试一起上,逆向难度越来越高。(第三节 什么是 CPU 指令集),帮你搞清楚「反汇编看到的那些指令」是从哪来的、和 Android 逆向有啥关系。有必要——先搞清「没加固时怎么玩」,再学脱壳和对抗,思路才顺。读起来费劲,但逻辑还在,耐心一点还能跟。

长沙火山 1389

java 远程执行windows的脚本命令

要在Java中远程执行Windows系统的脚本命令或批处理文件,通常需要使用基于Windows Remote Management (WinRM)协议的库,如winrm4j。WinRM是Windows系统内置的一项远程管理技术,允许通过HTTP(S)协议进行远程命令执行、脚本调用和系统管理任务。以下是一个使用winrm4j。

zengliguang的专栏 1851

记录:解决Ubuntu20.04安装ros报错E: Unable to locate package ros-kinetic-desktop-full【亲测有效】

报错:E: Unable to locate package ros-kinetic-desktop-full.尝试好久一直都无法下载,最后得知真相的我眼泪哗哗的直流。

**My Coding Family** 6万+

信创操作系统基础:Linux Shell脚本编写指南(替代Windows批处理脚本)

从Windows批处理迁移到Linux Shell脚本是信创开发的基础,开发者需掌握Bash语法、Linux命令及信创生态适配。技术学习:从变量、条件、循环入手,掌握grepfind等命令。实践驱动:开发备份、监控脚本,适配统信UOS。生态融入:加入OpenEuler、麒麟社区,提交Shell项目。合规开发:集成SM4加密,满足《网络安全法》。初学者可从简单文件操作脚本开始;进阶者聚焦系统管理与DevOps;高级开发者探索Shell+Ansible的云原生自动化。

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 2461

【雕爷学编程】Arduino动手做(75)---TTL转RS-485模块之二线制可以实现真正的多点双向通信

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验七十五:TTL转RS-485模块 MAX485 RS485模块 MAX485 是一个8.

雕爷学编程 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java process调用可执行文件(windows 或者 linux)

最近项目中看到有需要在java程序中调用其他三方工具(如程序中调用三方转码工具)的需求,于是process便在这个需求中崭露头角: (一下只简述用法,不透露实际应用) 1.调用windows平台的.bat a.在F:盘下 新建a.txt 编辑内容为“love code”;      新建cmd.bat,编辑内容“notepad F:\a.txt” b.在java程序中写如下调用语句

wangyang2698341的专栏 1680

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

跨平台Java应用打包指南:Windows与Linux下的可执行文件制作

本文介绍了如何制作自己的软件,直接双击可执行,和题目一样,考了两种平台,文章的实现很简单,对于大多数人来说能想到就能实现,只是一种思维,可能内容不是很全面需要自行百度搜索,但是有一些很有趣的东西值得一看。

qq_47923467的博客 1321

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java调用windows系统的批处理(.bat文件) 和 linux系统的shell脚本(.sh文件)

在批量拷贝系统下的文件时如果用java的IO流来读写文件很消耗系统内存,可能发生内存溢出或宕机,目前的解决方案就是调用系统命令来批量拷贝 java code public static void copy(String orPath,String newPath) { String osName = System.getProperty("os.name"); //l

zhibo112的专栏 2558

【Groovy】Groovy 脚本调用 ( Linux 中调用 Groovy 脚本 | Windows 中调用 Groovy 脚本 )

前言、 一、Linux 中调用 Groovy 脚本、 二、Windows 中调用 Groovy 脚本、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3206

linux java调用python_从java编程调用Linux终端的python脚本

我正在开发一个Java应用程序来检查源文件中的补丁程序(如果有的话)。检测补丁更改的核心逻辑出现在python脚本中补丁.py']和我的Java应用程序与这个Python补丁脚本通信,以检索操作的退出状态。在python脚本可以从here获得在windows中,它运行得很好,但是在Linux环境下。脚本本身不会从Java应用程序调用。我不知道我哪里出错了。在我使用'ProcessBuilder'调...

weixin_42524762的博客 1222

java JNI 调用c或c++,windows 或 Linux系统

   由于java程序需要调用C或C++的代码,不得不使用JNI。C的代码在Win32和Linux下都有相同功能的不同实现,就像JDK分几种平台版本(win32,linux,solaris等)。   首先,看一看首先,看一看win32下调用dll文件。    1, 新建HelloWorld.java 1public class HelloWorld 2{ 3  static 4  { 5   

Peter_K的专栏 1万+

linux、windows 可执行脚本

WINDOWS脚本 @echo off Shell窗口不再打印指定,而只打印echo输出信息 call XXX 调用其他批处理,完成后继续执行下一行指令。 例如使用maven打包指定 mvn clean package,打包后默认会自动关闭dos窗口而不执行下一行命令,若使用call mvn XX则不会受到上面的影响。 关闭指定...

a5552157的博客 1248

java调用shell脚本和命令-ProcessBuilder方式

java调用shell脚本和命令-ProcessBuilder方式 在上一节中,我使用Runtime的方式,实现了对命令行和脚本文件的运行。最后我留下了一个小小的问题那就是这个InputStream和errorStream需要分开获取,那有没有其他方,不用分开获取流呢? 1.相关文档 答案当然是有的,这就是这章节要使用的ProcessBuilder方式了。 同样的,也先看下ProcessBuilder的API吧。 类用于创建操作系统进程。 每个 ProcessBuilder 实例管理一个进程属性集。sta

bug_null的博客 7093

java调用批处理命令

java调用批处理命令: windows中的.bat和.cmd文件。 linux中的sh文件。 java实例demo: String cmd = "E:\\Test\\hello.cmd"; Process process = null; InputStream fis = null; InputStreamReader isr = null; BufferedReader br = nu...

quietbxj的博客 477

Windows环境下java远程调用shell脚本,拿到返回值

可以访问我的GitHub地址 https://github.com/yangyayu-last/linuxShell 为什么做的是远程调用,因为项目中还调用了Windows环境下的各种脚本,和Python脚本

qq_38653209的博客 1431

java process linux_java process调用可执行文件(windows 或者 linux)

最近项目中看到有需要在java程序中调用其他三方工具(如程序中调用三方转码工具)的需求,于是process便在这个需求中崭露头角:(一下只简述用法,不透露实际应用)1.调用windows平台的.bata.在F:盘下 新建a.txt 编辑内容为“love code”;新建cmd.bat,编辑内容“notepad F:\a.txt”b.在java程序中写如下调用语句CommandUtil.exec("...

weixin_36140400的博客 292
上一篇: HTML中Id和Name的区别
下一篇: 异常以及异常处理框架探析
lioncode
博客等级 码龄18年 67粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值