1. 请教关于JAVA在WIN下执行.BAT文件的问题 ->6楼的回答
2.请问如何在调用cmd运行完bat文件后自动退出 ->11楼的回答
在前面的博客中写道了mysql的数据库备份与恢复,这个主要是通过手动调用bat文件来执行的,那么如何在程序中调用bat文件呢。这就是这篇博客需要讲的主题。
2.实例1:
import java.io.IOException;
public class InvokeBat4 {
public void runbat(String batName) {
String cmd = "cmd /c start F:\\database_backup\\ngx_backup\\"+ batName + ".bat";// pass
try {
Process ps = Runtime.getRuntime().exec(cmd);
ps.waitFor();
} catch (IOException ioe) {
ioe.printStackTrace();
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("child thread donn");
}
public static void main(String[] args) {
InvokeBat4 test1 = new InvokeBat4();
test1.runbat("backup_ngx");
System.out.println("main thread");
}
}
2.1.缺点:
会弹出cmd框,并且不能自动关闭
2.2.解决方法:
在bat文件最后加上
exit
比如原来的bat文件内容如下:
mysqldump -uroot -proot --database ngx_ad ngx_authority ngx_jbpm ngx_mes ngx_model > F:\database_backup\ngx_backup\ngx_db.sql
我们将其修改为
mysqldump -uroot -proot --database ngx_ad ngx_authority ngx_jbpm ngx_mes ngx_model > F:\database_backup\ngx_backup\ngx_db.sql
exit
2.3.能够自动退出但依然存在的问题
即使能够自动退出,但是每次调用这个bat的时候屏幕总是会闪一下cmd命令框。
3.改进实例,直接执行bat
import java.io.IOException;
import java.io.InputStream;
public class InvokeBat2 {
public void runbat(String batName) {
try {
Process ps = Runtime.getRuntime().exec(batName);
InputStream in = ps.getInputStream();
int c;
while ((c = in.read()) != -1) {
System.out.print(c);// 如果你不需要看输出,这行可以注销掉
}
in.close();
ps.waitFor();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("child thread done");
}
public static void main(String[] args) {
InvokeBat2 test1 = new InvokeBat2();
String batName = "F:\\database_backup\\ngx_backup\\backup_ngx.bat";
test1.runbat(batName);
System.out.println("main thread");
}
}
1。 bat文件
import java.io.IOException;
import java.io.InputStream;
public class callbat {
public static void main(String args[]){
callCmd("C:/run.bat");
}
public static void callCmd(String locationCmd){
try {
Process child = Runtime.getRuntime().exec("cmd.exe /C start "+locationCmd);
InputStream in = child.getInputStream();
int c;
while ((c = in.read()) != -1) {
}
in.close();
try {
child.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("done");
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.shell文件
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class callshell {
public static void main(String args[]) throws IOException{
Runtime rt=Runtime.getRuntime();
String command="/export/home/xlg/solarischk.sh";
Process pcs=rt.exec(command);
PrintWriter outWriter=new PrintWriter(new File("/export/home/zjg/show.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(pcs.getInputStream()));
String line=new String();
while((line = br.readLine()) != null)
{
System.out.println(line);
outWriter.write(line);
}
try{
pcs.waitFor();
}
catch(InterruptedException e){
System.err.println("processes was interrupted");
}
br.close();
outWriter.flush();
outWriter.close();
int ret=pcs.exitValue();
System.out.println(ret);
System.out.println("执行完毕!");
}
}
- * 运行shell
- *
- * @param shStr
- * 需要执行的shell
- * @return
- * @throws IOException
- */
- public static List runShell(String shStr) throws Exception {
- List<String> strList = new ArrayList();
- Process process;
- process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);
- InputStreamReader ir = new InputStreamReader(process
- .getInputStream());
- LineNumberReader input = new LineNumberReader(ir);
- String line;
- process.waitFor();
- while ((line = input.readLine()) != null){
- strList.add(line);
- }
- return strList;
- }
注:如果sh中含有awk,一定要按new String[]{"/bin/sh","-c",shStr}写,才可以获得流
相关推荐
总的来说,shell和bat脚本提供了一种方便的方式来管理和运行Java程序,特别是对于需要定时执行或在后台运行的任务,它们能极大地简化操作流程。通过熟练掌握这两种脚本,你可以更高效地管理Java应用的生命周期。
在Windows和Linux环境中,启动批处理脚本(bat)和shell脚本(sh)是常见的任务,特别是在自动化和脚本执行过程中。`RunScript.java`和`StreamGobbler.java`这两个文件可能就是用来实现这个功能的。 `RunScript....
java执行shell或bat脚本,Java可以使用三种方式来执行.bat或.shell脚本文件:使用Runtime.exec()、使用ProcessBuilder、使用第三方工具包commonsexec.jar
接下来,关于Java执行Shell脚本,你可以使用`Runtime.exec()`或`ProcessBuilder`,但是你需要确保你的脚本文件是可执行的,并且指定正确的路径。例如,执行一个名为`myscript.sh`的Shell脚本: ```java String ...
Java程序调用并执行shell脚本及问题总结 Java程序调用并执行shell脚本是Java开发中非常重要的一部分,特别是在文本处理过程中。Java开发的特点是可以很早地进行TDDL,METAQ等等的对接,而脚本开发的特点是可以在...
Java提供了`Runtime`类和`ProcessBuilder`类,这两个类都可以用来执行外部命令,包括运行批处理文件和Shell脚本。 1. **Runtime类**:`Runtime.getRuntime().exec()`方法是Java最基础的执行外部命令的方式。例如,...
本文将详细介绍如何使用Shell脚本来启动和停止Java服务,适用于包括SpringBoot在内的各种Java应用程序。 首先,让我们理解什么是Shell脚本。Shell脚本是Linux或Unix操作系统中的批处理程序,由一系列命令组成,可以...
标题中的“运行jar的bat和.sh文件”指的是在Windows和Linux环境下执行Java应用程序的方法。Java应用程序通常被打包成.jar文件,这是一种可执行的二进制格式,但需要Java虚拟机(JVM)来运行。在Windows系统中,我们...
NULL 博文链接:https://sky-xin.iteye.com/blog/2289726
### Java执行可执行文件的方法详解 在Java编程中,经常需要执行一些外部的可执行文件或者脚本(如bat或shell脚本)。本文将详细介绍三种常用的方法:`Runtime.exec()`、`ProcessBuilder`以及`commons-exec`库。 ##...
双向通信意味着两个端点都可以同时发送和接收数据,这对于Java远程调用批处理文件至关重要,因为它允许Java程序发送指令到远程服务器并接收执行结果。 为了实现这个功能,我们可以创建一个服务器端应用,监听特定的...
在实际应用中,开发者可能会创建批处理文件(.bat)或者Shell脚本来"一键"运行Java类。这些脚本可以包含启动JVM的命令,例如: ```bash java -cp . YourPackageName.YourClassName ``` 这里,`-cp .`指定了当前目录...
`wsdl2java.bat`是Apache CXF提供的一个脚本工具,它可以用来根据WSDL文件生成相应的Java客户端和服务端的存根代码(Stub code)。这使得开发人员能够更加便捷地与Web服务进行交互。通过执行该命令,可以自动生成一...
有时,为了提高用户体验或避免用户看到不必要的命令行过程,我们可能需要在运行BAT文件时隐藏这个CMD窗口。这可以通过使用VBScript(Visual Basic Script)来实现。 首先,我们可以创建一个新的VBScript文件,例如`...
标签中的“java shell .bat”暗示了这个工具可能使用了Java的命令行接口(shell)和批处理脚本来完成其功能。Java shell允许开发者在命令行环境中执行Java代码,而批处理脚本则可以自动化执行一系列Windows命令。 ...
本项目为惠生产生产执行管理系统设计源码,采用Java作为主要开发语言,并融入Shell脚本,整体文件量达到1031个。其中,Java源文件863个,XML配置文件135个,其他文件类型包括VM、BAT、Properties、YML、TXT、Jasper...
总的来说,Java Wrapper Service提供了一种方便的方式来管理和运行Windows上的Java应用程序,使得它们可以像原生服务一样工作,这对于需要持续运行的后台应用尤其重要。通过合理配置和使用,我们可以确保Java应用...
首先,Java提供了一个内置的`java.lang.Runtime`类,它可以让我们与运行Java虚拟机的同一操作系统进行交互,包括执行系统命令。我们可以使用`Runtime.getRuntime().exec()`方法来执行外部命令或脚本。例如,如果你有...
使用批处理脚本或者shell循环加载jar包到classpath然后执行java命令
在本文中,我们将深入探讨Dubbo Shell的相关知识点,以及如何编写和使用shell和bat脚本来启动Dubbo服务。 首先,让我们了解什么是Dubbo。Dubbo是一个高性能、轻量级的开源Java RPC框架,它致力于提供一种简单、高效...