先上代码(功能是要列出目录):
package testProcess;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class testProcessBuilder {
public static Object exec(String cmd) {
try {
String[] cmdA = { "/bin/sh", "-c", cmd };
Process process = Runtime.getRuntime().exec(cmdA);
BufferedReader br = new BufferedReader(new InputStreamReader(
process.getInputStream()));
/* LineNumberReader br = new LineNumberReader(new InputStreamReader(
process.getInputStream()));*/
StringBuffer sb = new StringBuffer();
String line;
int i=0;
while ((line = br.readLine()) != null) {
sb.append("["+(i++)+"]"+line).append("\n");
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String netsString = exec("cd ~/testDirectory \r\n ls").toString();
System.out.println("==========列出目录=============");
System.out.println(netsString);
}
}
输出:
==========列出目录=============
[0]360度摄像
[1]A107开发包
[2]adt-bundle-linux-x86_64-20140321
[3]adt-bundle-linux-x86_64-20140321.zip
[4]browserDown
[5]deveEn
[6]project
[7]smart
当不写"/bin/sh", "-c"时,控制台报如下错误:
java.io.IOException: Cannot run program "cd ~/testDirectory
ls": error=2, 没有那个文件或目录
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at java.lang.Runtime.exec(Runtime.java:617)
at java.lang.Runtime.exec(Runtime.java:485)
at testProcess.testProcessBuilder.exec(testProcessBuilder.java:12)
at testProcess.testProcessBuilder.main(testProcessBuilder.java:34)
Caused by: java.io.IOException: error=2, 没有那个文件或目录
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:186)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
... 4 more
Exception in thread "main" java.lang.NullPointerException
at testProcess.testProcessBuilder.main(testProcessBuilder.java:34)
原因如下:
#!/bin/bash 以bash shell来解释(linux平台用到shell命令时)
其他:
#!/bin/csh 以csh shell来解释
#!/usr/bin/env python 以下代码由python来解释
简单介绍下Runtime和Process:
Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime实例,
但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。
一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法
去控制Java虚拟机的状态和行为。
java.lang.Runtime.getRuntime() 方法返回与当前的Java应用程序的运行时对象。
此方法返回与当前的Java应用相关的运行时对象。
Runtime类的方法是实例方法,就必须调用当前运行时对象.Runtime.exec()方法可以创建一个本地进程,
并返回Process子类的一个实例。
Process类是一个抽象类,其内部所有的方法都是抽象的。主要作用是创建一个可以管理的进程,并对它进行管理。
该类提供进程的输入、执行输出到进程、等待进程的完成和检查进程的退出状态及销毁进程的方法。
本文介绍了一个使用Java编写的程序,该程序通过Runtime类执行shell命令来列出指定目录的内容。文章详细展示了如何通过Runtime.getRuntime().exec()方法启动一个本地进程,并读取其输出。
&spm=1001.2101.3001.5002&articleId=49512901&d=1&t=3&u=b8cd9657a9e248a9b78c3e3d45872389)
1969

被折叠的 条评论
为什么被折叠?



