一、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命令的情形:
import java.io.BufferedInputStream;
import java.io.IOException;
public class ExecLs {
static public void main(String[] args) {
String cmd = "ls"
try {
Process ps = Runtime.getRuntime().exec(cmds);
System.out.print(loadStream(ps.getInputStream()));
System.err.print(loadStream(ps.getErrorStream()));
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
// read an input-stream into a String
static String loadStream(InputStream in) throws IOException {
int ptr = 0;
in = new BufferedInputStream(in);
StringBuffer buffer = new StringBuffer();
while( (ptr = in.read()) != -1 ) {
buffer.append((char)ptr);
}
return buffer.toString();
}
}
上述代码中重要的部分是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的限制。
说明:
1. exec的必须是可执行的程序,如果是命令行的命令则还需另外处理
2. 在windows中process = runtime.exec(new String[] { "cmd.exe","/C", "dir"});
3. 在linux中process = runtime.exec(new String[] { "/bin/sh","-c", "echo $PATH"});
分享到:
相关推荐
`Runtime.exec()`是最为传统且简单的执行外部程序的方法。它可以启动一个新的进程,并返回一个代表该进程的`Process`对象。但是,这种方法在处理进程的输入/输出流时存在一定的局限性。 **代码示例** ```java ...
另一个类`Shell.java`可能是用来封装命令执行逻辑的。例如,它可能包含一个方法,接收命令字符串或命令数组,然后使用`Runtime.exec`执行命令。这样的封装可以使代码更整洁,易于复用。 然而,执行shell脚本时,...
通过以上介绍,我们不仅了解了如何在Java程序中调用Linux命令的基本原理,还学习了如何通过`Runtime.exec()`方法创建子进程以及如何控制这些子进程。这对于开发需要与操作系统交互的应用程序是非常有用的。
`exec()`方法返回一个`Process`对象,该对象可以用来获取命令执行的状态,读取输出流等。 二、ProcessBuilder类 `ProcessBuilder`类提供了更灵活的方式来执行命令,可以设置环境变量,工作目录等。创建`...
然而,在Java中通过`Runtime.getRuntime().exec()`或`ProcessBuilder`执行命令时,可能还会遇到问题,因为这些方法在处理命令行参数时有自己的规则。在某些情况下,即使在DOS窗口中可以成功执行的命令,通过Java执行...
Java通过Java Native Interface (JNI) 或者使用Runtime.exec() 方法可以与Linux系统进行交互,执行操作系统级别的命令。这种方式允许Java程序运行shell命令,如将一个文件转换成另一种格式。 2. **Apache POI**: ...
综上所述,"Android程序中(APK程序)执行Adb shell命令"涉及到利用Java的Runtime或ProcessBuilder类来调用系统shell,执行特定的命令。这个过程需要理解ADB的作用,以及如何在Android应用程序中安全地使用shell命令...
以上就是使用Java执行本地CMD命令以及通过SSH连接远程Linux服务器执行shell命令的方法。这两个功能的结合,使开发者能够轻松地在不同的操作系统间进行跨平台的系统操作,极大地提高了开发和运维的效率。
另外,虽然可以直接使用`Runtime.exec()`执行单条命令,但更推荐的方法是编写一个bat(Windows)或shell(Linux)脚本,将一系列命令封装在一起,然后通过Java执行这个脚本。这样可以更好地组织和管理复杂的命令序列...
这个函数接受命令行参数数组,执行命令,读取并打印标准输出,等待命令执行完成,然后返回退出状态码。 总的来说,在Linux系统下用Java执行系统命令需要注意命令的正确构造,特别是在处理通配符和交互式命令时。...
总结一下,Java调用本地浏览器的关键在于使用`Runtime.exec()`或`ProcessBuilder`执行操作系统级别的命令。具体命令取决于操作系统的类型,如Windows的`rundll32`,Linux的`xdg-open`,以及Mac OS的`open`。通过`...
- 考虑命令执行的权限问题,确保Java应用有足够的权限执行所需命令。 - 在生产环境中,应监控命令执行的结果,以确保服务的稳定性和可用性。 通过以上内容,你已经了解了如何使用Java调用Linux命令,以及如何在...
Apache Commons Exec库提供了一个更高级的API,可以更方便地处理命令执行,如重定向输入、输出和错误流,处理复杂的命令行构造等。 8. **与Shell脚本结合** 有时,单个命令无法满足需求,这时可以编写Shell脚本,...
我们可以使用 Java 的 Runtime.getRuntime().exec() 方法来执行 ipconfig 命令,并将结果解析出来获取网卡物理地址。下面是一个示例代码: ```java public final static String getMacAddress() throws IOException ...
在Java中,我们可以通过`Runtime.exec()`或`ProcessBuilder`类来执行这样的系统命令。 首先,让我们详细了解一下`Runtime.exec()`方法。这个方法允许Java程序在运行时执行外部程序或命令。例如,如果我们要在CMD中...
Java语言在执行外部程序或与操作系统交互时,通常会用到`java.lang.Runtime`类。这个类提供了运行时环境的接口,允许Java程序执行系统命令。然而,直接使用`Runtime`类进行命令行操作可能会比较繁琐,需要处理进程的...
### Java调用播放器知识点详解 #### 一、概述 ...通过上述内容,我们可以了解到如何在Java中使用`Runtime.exec()`方法来调用播放器以及执行其他系统命令。这对于开发具有多媒体功能的应用程序非常有用。
在Java编程中,有时我们需要与操作系统进行交互,例如在服务器端执行系统命令,这通常通过Java的`Runtime.getRuntime().exec()`或`ProcessBuilder`类来实现。在这个特定的问题"Java调用Linux CentOS系统安装的...
可以使用`Process`对象的`getErrorStream()`方法来获取命令执行时产生的错误输出,并对其进行处理。 ```java BufferedReader err = new BufferedReader(new InputStreamReader(p2.getErrorStream())); String error...
- 对于Windows平台,使用`attrib`命令时,确保路径中包含的空格被正确引用,避免命令执行错误。 - 在实际应用中,还需要考虑异常处理机制,以确保程序的健壮性。 #### 五、示例代码 下面是一个简单的示例代码,...