`

java执行bat和shell

    博客分类:
  • Java
 
阅读更多

1. 请教关于JAVA在WIN下执行.BAT文件的问题 ->6楼的回答

2.请问如何在调用cmd运行完bat文件后自动退出 ->11楼的回答

3.java调用bat

在前面的博客中写道了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("执行完毕!");
  }
  }

 

  1.      * 运行shell 
  2.      *  
  3.      * @param shStr 
  4.      *            需要执行的shell 
  5.      * @return 
  6.      * @throws IOException 
  7.      */  
  8.     public static List runShell(String shStr) throws Exception {  
  9.         List<String> strList = new ArrayList();  
  10.   
  11.         Process process;  
  12.         process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);  
  13.         InputStreamReader ir = new InputStreamReader(process  
  14.                 .getInputStream());  
  15.         LineNumberReader input = new LineNumberReader(ir);  
  16.         String line;  
  17.         process.waitFor();  
  18.         while ((line = input.readLine()) != null){  
  19.             strList.add(line);  
  20.         }  
  21.           
  22.         return strList;  
  23.     }  

 

注:如果sh中含有awk,一定要按new String[]{"/bin/sh","-c",shStr}写,才可以获得流

分享到:
评论

相关推荐

    shell,bat脚本运行java程序

    总的来说,shell和bat脚本提供了一种方便的方式来管理和运行Java程序,特别是对于需要定时执行或在后台运行的任务,它们能极大地简化操作流程。通过熟练掌握这两种脚本,你可以更高效地管理Java应用的生命周期。

    java在win下启动bat和在linux下启动shell脚本

    在Windows和Linux环境中,启动批处理脚本(bat)和shell脚本(sh)是常见的任务,特别是在自动化和脚本执行过程中。`RunScript.java`和`StreamGobbler.java`这两个文件可能就是用来实现这个功能的。 `RunScript....

    java执行shell或bat脚本

    java执行shell或bat脚本,Java可以使用三种方式来执行.bat或.shell脚本文件:使用Runtime.exec()、使用ProcessBuilder、使用第三方工具包commonsexec.jar

    java_dos_shell_bat

    接下来,关于Java执行Shell脚本,你可以使用`Runtime.exec()`或`ProcessBuilder`,但是你需要确保你的脚本文件是可执行的,并且指定正确的路径。例如,执行一个名为`myscript.sh`的Shell脚本: ```java String ...

    Java程序去调用并执行shell脚本及问题总结(推荐)

    Java程序调用并执行shell脚本及问题总结 Java程序调用并执行shell脚本是Java开发中非常重要的一部分,特别是在文本处理过程中。Java开发的特点是可以很早地进行TDDL,METAQ等等的对接,而脚本开发的特点是可以在...

    java调用bat批处理与sh脚本

    Java提供了`Runtime`类和`ProcessBuilder`类,这两个类都可以用来执行外部命令,包括运行批处理文件和Shell脚本。 1. **Runtime类**:`Runtime.getRuntime().exec()`方法是Java最基础的执行外部命令的方式。例如,...

    基于Java、HTML和Shell语言的懒人优化设计源码

    本项目是一套集成了Java、HTML和Shell脚本语言的懒人优化设计源码,实现了对特定开发流程的自动化和优化。源码项目共有75个文件,其中包括了41个Java源文件、8个Java归档(JAR)包、7个XML配置文件以及4个HTML页面和...

    启动停止java服务的shell脚本

    本文将详细介绍如何使用Shell脚本来启动和停止Java服务,适用于包括SpringBoot在内的各种Java应用程序。 首先,让我们理解什么是Shell脚本。Shell脚本是Linux或Unix操作系统中的批处理程序,由一系列命令组成,可以...

    运行jar的bat和.sh文件

    标题中的“运行jar的bat和.sh文件”指的是在Windows和Linux环境下执行Java应用程序的方法。Java应用程序通常被打包成.jar文件,这是一种可执行的二进制格式,但需要Java虚拟机(JVM)来运行。在Windows系统中,我们...

    基于Java和Shell语言的会议室预约系统设计源码

    特别地,run.bat和run.sh文件用于系统的运行,说明本系统可以通过批处理脚本或Shell脚本直接启动。.gitignore文件的出现表明本项目可能使用了Git作为版本控制系统,其内容用于告诉Git哪些文件或目录不需要被跟踪。...

    基于Java和Shell的就业管理系统设计源码

    本项目是一款基于Java和Shell语言开发的就业管理系统,共包含了385个文件,其中大部分为Java源文件。Java语言以其跨平台、面向对象、安全性高等特性,在企业级应用开发中得到了广泛应用。通过使用Java语言开发的就业...

    基于Java和Shell语言的FuZegoExpressVideo设计源码

    例如,gradlew.bat和gradlew文件是Gradle的封装执行脚本,它们分别适用于Windows和Unix系统,方便了项目在不同操作系统上的构建和运行。.gitignore文件指明了哪些文件或文件夹是Git版本控制系统应该忽略的,这有助于...

    基于Java和Shell的车保姆车保养服务端设计源码

    车保姆车保养服务端设计源码项目是一个全面的汽车保养服务管理系统,其主要开发语言为Java,同时结合了Shell和HTML技术,使得系统的开发和维护更加灵活和高效。该项目通过使用Java语言的丰富类库和强大的网络功能,...

    shell文件执行jar,完成自动更新

    NULL 博文链接:https://sky-xin.iteye.com/blog/2289726

    基于Java和Shell的校园运动会毕设设计源码

    从文件名称列表来看,“ry.bat”和“ry.sh”分别代表了Windows平台下的批处理文件和类Unix系统下的Shell脚本文件,可能用于部署和启动项目。”.gitignore”文件用于Git版本控制系统中,标识了不希望被版本控制的文件...

    基于Java和Shell的效益评估智慧管理平台设计源码

    从压缩包的文件名称列表中,我们可以看到除了代码和配置文件外,还包括了批处理文件和Shell脚本文件,如ry.bat和ry.sh。这些文件是系统部署和日常维护的关键部分,它们的存在表明了该智慧管理平台在实际部署和使用中...

    基于Java和Shell的Validator验证器设计源码

    项目文件列表中的release.bat文件则是Windows环境下的批处理文件,它与Shell脚本的功能相似,用于在Windows环境下执行特定的操作。.gitignore文件定义了在使用Git版本控制系统时需要忽略的文件类型,从而避免将编译...

    基于Java和Shell语言的楼盘开发设计源码

    通过这些文件,开发人员可以轻松地掌握项目结构,快速定位到需要的模块和功能,同时利用Java和Shell语言的特性,为楼盘开发提供强大的技术支持,确保项目可以高效、稳定地运行。此外,考虑到开源项目的特性,本项目...

    基于Java和Shell语言的取证中心若依框架后端设计源码

    本文将对基于Java和Shell语言的取证中心若依框架后端设计源码进行详细的知识点解读。该后端设计源码是一个完整的取证中心解决方案,涉及多个技术层面和文件类型的综合应用,旨在为用户提供一个高效、稳定且易于扩展...

    基于Java和Shell语言的联合科研临时仓库设计源码

    Java以其跨平台、面向对象、安全性高等特点,在企业级应用开发中占据重要位置,而Shell脚本则以其轻量级、操作系统的命令解释执行能力在自动化和管理任务中扮演着不可或缺的角色。结合这两种语言的特长,可以开发出...

Global site tag (gtag.js) - Google Analytics