从Java运行外部程序,读取输出,允许中断。
为了实现这个功能,您可以使用ProcessBuilder
和BufferedReader
类。ProcessBuilder
用于创建和配置外部进程,BufferedReader
用于读取输出。
以下是一个示例代码:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class RunExternalProgram {
public static void main(String[] args) throws Exception {
ProcessBuilder processBuilder = new ProcessBuilder("your-command", "your-arguments");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<String> future = executorService.submit(() -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(System.lineSeparator());
}
return stringBuilder.toString();
}
});
// 如果需要中断,可以调用 process.destroy()
// process.destroy();
String output = future.get();
System.out.println("Output: " + output);
int exitCode = process.waitFor();
System.out.println("Exit code: " + exitCode);
}
}
在这个示例中,我们使用ProcessBuilder
创建一个新的进程,并使用BufferedReader
从进程的输出流中读取数据。我们使用ExecutorService
和Future
来异步执行读取任务,以便在需要时可以中断。
如果您需要中断进程,只需调用process.destroy()
即可。
请注意,这个示例代码仅用于演示目的,实际使用时可能需要根据您的需求进行修改。
领取专属 10元无门槛券
手把手带您无忧上云