作者:水果jia | 来源:互联网 | 2024-11-17 23:40
在Java开发中,如何利用ProcessBuilder类调用外部程序是一个常见的需求。本文将详细介绍ProcessBuilder类的使用方法,并提供示例代码帮助你更好地理解和应用。
在Java开发中,调用外部程序是一个常见的需求。本文将详细介绍如何使用ProcessBuilder类来实现这一功能,并提供示例代码帮助你更好地理解和应用。
1. 示例1:调用系统命令
@Test
public void testProcessBuilder() {
ProcessBuilder processBuilder = new ProcessBuilder();
// 设置命令
processBuilder.command("ipconfig");
// 将标准输入流和错误输入流合并
processBuilder.redirectErrorStream(true);
try {
// 启动进程
Process process = processBuilder.start();
// 获取输入流
InputStream inputStream = process.getInputStream();
// 转换为字符输入流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
int len = -1;
char[] buffer = new char[1024];
StringBuilder output = new StringBuilder();
// 读取进程输入流中的内容
while ((len = inputStreamReader.read(buffer)) != -1) {
String line = new String(buffer, 0, len);
output.append(line);
System.out.print(line);
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
2. 示例2:调用FFmpeg进行视频转换
@Test
public void testFFmpeg() {
ProcessBuilder processBuilder = new ProcessBuilder();
// 定义命令内容
List command = new ArrayList<>();
command.add("D:/program/ffmpeg-20191229-e20c6d9-win64-static/bin/ffmpeg.exe");
command.add("-i");
command.add("D:/test/video/1.avi");
command.add("-y"); // 覆盖输出文件
command.add("-c:v");
command.add("libx264");
command.add("-s");
command.add("1280x720");
command.add("-pix_fmt");
command.add("yuv420p");
command.add("-b:a");
command.add("63k");
command.add("-b:v");
command.add("753k");
command.add("-r");
command.add("18");
command.add("D:/test/video/1.mp4");
processBuilder.command(command);
// 将标准输入流和错误输入流合并
processBuilder.redirectErrorStream(true);
try {
// 启动进程
Process process = processBuilder.start();
// 获取输入流
InputStream inputStream = process.getInputStream();
// 转换为字符输入流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
int len = -1;
char[] buffer = new char[1024];
StringBuilder output = new StringBuilder();
// 读取进程输入流中的内容
while ((len = inputStreamReader.read(buffer)) != -1) {
String line = new String(buffer, 0, len);
output.append(line);
System.out.print(line);
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
通过上述示例,你应该已经掌握了如何使用Java ProcessBuilder类调用外部程序的方法。如果你还想了解更多相关的技能或内容,欢迎关注编程笔记行业资讯频道,感谢你的阅读!