`
cloudeagle
  • 浏览: 111625 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

java使用Runtime.exec执行linux命令

 
阅读更多

转自:http://huajianhsiu.iteye.com/blog/1772775


使用sh -c , 不然会报 can not create Process error =2的错误!

一、Runtime.getRuntime().exec()执行命令情况:
Runtime.getRuntime().exec("cmd /c your command")//2000
Runtime.getRuntime().exec("command /c your command")//98
Runtime.getRuntime().exec("sh/ your command")//linux

二、执行.sh文件的情况:
1、把命令写成a.sh ;执行命令的时候
Process child = Runtime.getRuntime().exec("bash a.sh,null,new File("//usr/local/mysql/bin/"));
child.waitFor();
........
2、Process child = Runtime.getRuntime().

exec(new String[] {"/bin/sh","-c","mysqldump -u root -p7788919 axtic_cg" },

null,
new File("/usr/local/mysql/bin/"));
child.waitFor();

注:waitFor()等待操作完成



Java具有使用Runtime.exec对本地程序调用进行重定向的能力,但是用重定向或者管道进行命令调用将会出错。解决这一问题的办法是通过命令shell运行命令。在Java中调用本地程序会破坏平台独立性规则,但是经常需要这么做才行。
  
  以下是一个简单类的范例,展示了在Unix下运行ls命令的情形:
  
  

Java代码收藏代码
  1. importjava.io.BufferedInputStream;
  2.   importjava.io.IOException;
  3.   
  4.   publicclassExecLs{
  5.   
  6.   staticpublicvoidmain(String[]args){
  7.   Stringcmd="ls"
  8.   
  9.   try{
  10.   Processps=Runtime.getRuntime().exec(cmds);
  11.   System.out.print(loadStream(ps.getInputStream()));
  12.   System.err.print(loadStream(ps.getErrorStream()));
  13.   }catch(IOExceptionioe){
  14.   ioe.printStackTrace();
  15.   }
  16.   }
  17.   
  18.   //readaninput-streamintoaString
  19.   staticStringloadStream(InputStreamin)throwsIOException{
  20.   intptr=0;
  21.   in=newBufferedInputStream(in);
  22.   StringBufferbuffer=newStringBuffer();
  23.   while((ptr=in.read())!=-1){
  24.   buffer.append((char)ptr);
  25.   }
  26.   returnbuffer.toString();
  27.   
  28.   
  29.   
  30.   
  31.   
  32.   }
  33.   
  34.   }
  
  上述代码中重要的部分是exec方法和命令字符串ls。本程序将输出运行目录下的列表细节。
  
  那么,如果你想重定向这些细节内容到文件该怎么办?这一命令行的输入应该写成ls > FILE,但是当你将cmd变量改变成这样的话,运行就会出错,如下:
  
  /bin/ls: >: No such file or directory
  /bin/ls: FILE: No such file or directory
  
  出错的原因在于额外的参数被直接传送到了ls命令而不是送到实际的命令行。解决这一问题的办法是将cmd串弄成一个字符串数组,并且将你想运行的程序传送到命令shell。
  
  因此,将cmd行改成下面的样子:
  
   String[] cmd = { "sh", "-c", "ls > FILE" };
  
  你将得到一个名为FILE的文件,里面是目录列表。-c参数是告诉它读取随后的字符串,而最后的参数是你要运行的脚本。
  
  在这种情况下,管道也运行良好,所以你可以把命令改成下面的方式:
  
  String[] cmd = { "/bin/sh", "-c", "/bin/ls | grep d > FILE" };
  
  这种形式将给你一个名为FILE的文件,里面是ls条目中包含d的条目。给出sh和ls的全路径有利于提供你的程序的安全性。
  
  虽然使用Runtime.exec不是创建独立于平台的Java的最佳方式,但是有些时候是必要的。使用这种重定向技术有助于走出Runtime.exec的限制。

说明:
Java代码收藏代码
  1. 1.exec的必须是可执行的程序,如果是命令行的命令则还需另外处理
  2. 2.在windows中process=runtime.exec(newString[]{"cmd.exe","/C","dir"});
  3. 3.在linux中process=runtime.exec(newString[]{"/bin/sh","-c","echo$PATH"});

分享到:
评论

相关推荐

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    `Runtime.exec()`是最为传统且简单的执行外部程序的方法。它可以启动一个新的进程,并返回一个代表该进程的`Process`对象。但是,这种方法在处理进程的输入/输出流时存在一定的局限性。 **代码示例** ```java ...

    使用runtime实现linux命令行或shell脚本多次调用

    另一个类`Shell.java`可能是用来封装命令执行逻辑的。例如,它可能包含一个方法,接收命令字符串或命令数组,然后使用`Runtime.exec`执行命令。这样的封装可以使代码更整洁,易于复用。 然而,执行shell脚本时,...

    Java调用Linux命令

    通过以上介绍,我们不仅了解了如何在Java程序中调用Linux命令的基本原理,还学习了如何通过`Runtime.exec()`方法创建子进程以及如何控制这些子进程。这对于开发需要与操作系统交互的应用程序是非常有用的。

    在Linux系统下用java执行系统命令实例讲解

    `exec()`方法返回一个`Process`对象,该对象可以用来获取命令执行的状态,读取输出流等。 二、ProcessBuilder类 `ProcessBuilder`类提供了更灵活的方式来执行命令,可以设置环境变量,工作目录等。创建`...

    解决java执行cmd命令调用ffmpeg报错Concat error - No such filter '[0,0]'问题

    然而,在Java中通过`Runtime.getRuntime().exec()`或`ProcessBuilder`执行命令时,可能还会遇到问题,因为这些方法在处理命令行参数时有自己的规则。在某些情况下,即使在DOS窗口中可以成功执行的命令,通过Java执行...

    JAVA实现Linux中word转换pdf

    Java通过Java Native Interface (JNI) 或者使用Runtime.exec() 方法可以与Linux系统进行交互,执行操作系统级别的命令。这种方式允许Java程序运行shell命令,如将一个文件转换成另一种格式。 2. **Apache POI**: ...

    java执行Linux命令的方法

    另外,虽然可以直接使用`Runtime.exec()`执行单条命令,但更推荐的方法是编写一个bat(Windows)或shell(Linux)脚本,将一系列命令封装在一起,然后通过Java执行这个脚本。这样可以更好地组织和管理复杂的命令序列...

    在Linux系统下用java执行系统命令.doc

    这个函数接受命令行参数数组,执行命令,读取并打印标准输出,等待命令执行完成,然后返回退出状态码。 总的来说,在Linux系统下用Java执行系统命令需要注意命令的正确构造,特别是在处理通配符和交互式命令时。...

    java调用本地浏览器的demo

    总结一下,Java调用本地浏览器的关键在于使用`Runtime.exec()`或`ProcessBuilder`执行操作系统级别的命令。具体命令取决于操作系统的类型,如Windows的`rundll32`,Linux的`xdg-open`,以及Mac OS的`open`。通过`...

    Java 调用 Linux 命令实战(含完整代码)1

    - 考虑命令执行的权限问题,确保Java应用有足够的权限执行所需命令。 - 在生产环境中,应监控命令执行的结果,以确保服务的稳定性和可用性。 通过以上内容,你已经了解了如何使用Java调用Linux命令,以及如何在...

    java代码中调用linux/unix命令

    Apache Commons Exec库提供了一个更高级的API,可以更方便地处理命令执行,如重定向输入、输出和错误流,处理复杂的命令行构造等。 8. **与Shell脚本结合** 有时,单个命令无法满足需求,这时可以编写Shell脚本,...

    JAVA得到网卡物理地址(windows和Linux)

    我们可以使用 Java 的 Runtime.getRuntime().exec() 方法来执行 ipconfig 命令,并将结果解析出来获取网卡物理地址。下面是一个示例代码: ```java public final static String getMacAddress() throws IOException ...

    java 调用doc命令

    在Java中,我们可以通过`Runtime.exec()`或`ProcessBuilder`类来执行这样的系统命令。 首先,让我们详细了解一下`Runtime.exec()`方法。这个方法允许Java程序在运行时执行外部程序或命令。例如,如果我们要在CMD中...

    基于java.lang.Runtime封装的用于简化java调用命令行的工具.zip

    Java语言在执行外部程序或与操作系统交互时,通常会用到`java.lang.Runtime`类。这个类提供了运行时环境的接口,允许Java程序执行系统命令。然而,直接使用`Runtime`类进行命令行操作可能会比较繁琐,需要处理进程的...

    java调用播放器

    ### Java调用播放器知识点详解 #### 一、概述 ...通过上述内容,我们可以了解到如何在Java中使用`Runtime.exec()`方法来调用播放器以及执行其他系统命令。这对于开发具有多媒体功能的应用程序非常有用。

    java控制台输入cmd命令, ssh远程linux shell命令, 并打印命令输出到控制台

    以上就是使用Java执行本地CMD命令以及通过SSH连接远程Linux服务器执行shell命令的方法。这两个功能的结合,使开发者能够轻松地在不同的操作系统间进行跨平台的系统操作,极大地提高了开发和运维的效率。

    Java调用Linux CenterOS系统安装的OpenOffice4报错

    在Java编程中,有时我们需要与操作系统进行交互,例如在服务器端执行系统命令,这通常通过Java的`Runtime.getRuntime().exec()`或`ProcessBuilder`类来实现。在这个特定的问题"Java调用Linux CentOS系统安装的...

    java执行系统命令

    可以使用`Process`对象的`getErrorStream()`方法来获取命令执行时产生的错误输出,并对其进行处理。 ```java BufferedReader err = new BufferedReader(new InputStreamReader(p2.getErrorStream())); String error...

    java修改文件属性

    - 对于Windows平台,使用`attrib`命令时,确保路径中包含的空格被正确引用,避免命令执行错误。 - 在实际应用中,还需要考虑异常处理机制,以确保程序的健壮性。 #### 五、示例代码 下面是一个简单的示例代码,...

    Java使用默认浏览器打开指定URL的方法(二种方法).rar

    2. 使用`Runtime.getRuntime().exec()`方法执行系统命令。 以下是在Windows系统中使用`rundll32.exe`的示例: ```java import java.lang.Runtime; public class OpenBrowser { public static void main(String[] ...

Global site tag (gtag.js) - Google Analytics