Java发送命令行
在Java开发中,有时候我们需要与命令行进行交互,执行一些系统命令或者外部程序。Java提供了一些方法来发送命令行,并获取执行结果。本文将介绍如何使用Java发送命令行,并给出一些示例代码。
1. 使用Runtime类发送命令行
Java中可以使用Runtime
类来执行外部命令。Runtime
类表示运行时环境,通过它可以获取当前Java应用程序的运行时环境,也可以执行外部程序。
使用Runtime
类发送命令行的基本步骤如下:
- 获取
Runtime
对象:Runtime.getRuntime()
- 调用
exec()
方法执行命令行:runtime.exec(command)
- 获取命令行执行结果:
process.getInputStream()
下面是一个示例代码,演示了如何使用Runtime
类发送命令行并获取结果:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class CommandSender {
public static void main(String[] args) {
try {
// 获取Runtime对象
Runtime runtime = Runtime.getRuntime();
// 执行命令行
Process process = runtime.exec("ls");
// 获取命令行执行结果
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 关闭流
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述示例代码中,通过Runtime
类的exec()
方法执行了一个ls
命令,并通过InputStreamReader
和BufferedReader
读取了命令行的执行结果,并输出到控制台。
2. 使用ProcessBuilder类发送命令行
除了使用Runtime
类,还可以使用ProcessBuilder
类发送命令行。ProcessBuilder
类是Runtime
类的一种封装,提供了更多的灵活性和控制。
使用ProcessBuilder
类发送命令行的基本步骤如下:
- 创建
ProcessBuilder
对象:new ProcessBuilder(command)
- 调用
start()
方法启动命令行:processBuilder.start()
- 获取命令行执行结果:
process.getInputStream()
下面是一个示例代码,演示了如何使用ProcessBuilder
类发送命令行并获取结果:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
public class CommandSender {
public static void main(String[] args) {
try {
// 创建ProcessBuilder对象
ProcessBuilder processBuilder = new ProcessBuilder("ls");
// 启动命令行
Process process = processBuilder.start();
// 获取命令行执行结果
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 关闭流
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述示例代码中,通过ProcessBuilder
类的构造方法创建了一个ls
命令的ProcessBuilder
对象,并通过start()
方法启动了命令行。然后通过InputStreamReader
和BufferedReader
读取了命令行的执行结果,并输出到控制台。
3. 使用Apache Commons Exec库发送命令行
除了使用Java原生的类,还可以使用第三方库Apache Commons Exec来发送命令行。Apache Commons Exec是一个开源的工具库,提供了更高级的API来执行外部命令。
使用Apache Commons Exec发送命令行的基本步骤如下:
- 创建
CommandLine
对象:new CommandLine(command)
- 创建
DefaultExecutor
对象:new DefaultExecutor()
- 执行命令行:
executor.execute(commandLine)
下面是一个示例代码,演示了如何使用Apache Commons Exec发送命令行并获取结果:
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;
import org.apache.commons.exec.ExecuteResultHandler;
import org.apache.commons.exec.ExecuteStreamHandler;
import org.apache.commons.exec.PumpStreamHandler;
import org.apache.commons.io.IOUtils;
import java.io.ByteArrayOutputStream