Javaで外部プログラムを呼び出す方法
Java では、
Runtime クラス
またはProcessBuilder クラス
を通じて外部プログラムを呼び出すことができます。
Runtime クラスと ProcessBuilder クラス
Runtime クラスの使用:
Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("外部程序路径");
ProcessBuilder クラスの使用:
ProcessBuilder builder = new ProcessBuilder("外部程序路径"); Process process = builder.start();
パラメーターの受け渡し
上記の 2 つの方法は両方とも、外部プロセスを開始できます。外部プロセスにパラメーターを渡す必要がある場合は、exec() または ProcessBuilder コンストラクターで文字列配列を渡すことができます。
String[] cmdarray = {"外部程序路径", "参数1", "参数2"};Process process = runtime.exec(cmdarray);
実行結果
戻り結果外部プロセスにプロセスオブジェクトの取得を渡すことができます。 getInputStream() メソッドを使用して外部プロセスの標準出力ストリームを読み取ることも、getErrorStream() メソッドを使用してエラー出力ストリームを読み取ることもできます。
InputStream inputStream = process.getInputStream(); // 标准输出流 InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); // 输出每行结果 }
注
: 外部プログラムを呼び出す場合は、セキュリティ上の問題やシステムクラッシュなどの異常事態が発生する可能性があるため、注意してください。この機能を使用する場合は、外部プログラムを十分にテストして検証することをお勧めします
# @Test
public void runtimeTest() {
try {
//获取执行进程
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("ipconfig");
//读取输入流
InputStream inputStream = process.getInputStream();
//将字节流转成字符流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
//字符缓冲区
char[] c = new char[1024];
int len = -1;
while ((len = inputStreamReader.read(c)) != -1) {
String s = new String(c, 0, len);
System.out.print(s);
}
inputStream.close();
inputStreamReader.close();
//阻塞当前线程,直到进程退出为止
process.waitFor();
int exitValue = process.exitValue();
if (exitValue == 0) {
System.out.println("进程正常结束");
} else {
System.out.println("进程异常结束");
}
} catch (Exception e) {
e.printStackTrace();
}
}
ログイン後にコピー
@Test public void runtimeTest() { try { //获取执行进程 Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("ipconfig"); //读取输入流 InputStream inputStream = process.getInputStream(); //将字节流转成字符流 InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk"); //字符缓冲区 char[] c = new char[1024]; int len = -1; while ((len = inputStreamReader.read(c)) != -1) { String s = new String(c, 0, len); System.out.print(s); } inputStream.close(); inputStreamReader.close(); //阻塞当前线程,直到进程退出为止 process.waitFor(); int exitValue = process.exitValue(); if (exitValue == 0) { System.out.println("进程正常结束"); } else { System.out.println("进程异常结束"); } } catch (Exception e) { e.printStackTrace(); } }
#ProcessBuilder クラスの使用
パラメータなしの呼び出し
@Test public void processBuilderTest1() { ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command("java"); //将标准输入流和错误输入流合并,通过标准输入流读取信息 processBuilder.redirectErrorStream(true); try { //启动进程 Process start = processBuilder.start(); //获取输入流 InputStream inputStream = start.getInputStream(); //转成字符输入流 InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk"); int len = -1; //字符缓冲区 char[] c = new char[1024]; //读取进程输入流中的内容 while ((len = inputStreamReader.read(c)) !=-1){ String s = new String(c, 0, len); System.out.print(s); } inputStreamReader.close(); inputStream.close(); //阻塞当前线程,直到进程退出为止 start.waitFor(); int exitValue = start.exitValue(); if (exitValue == 0) { System.out.println("进程正常结束"); } else { System.out.println("进程异常结束"); } } catch (IOException e) { e.printStackTrace(); } }
##単純なパラメータの呼び出し
processBuilder.command("java","-version");
複雑なパラメータの呼び出し
List<String> command = new ArrayList<>(); command.add("java"); command.add("-version"); processBuilder.command(command);
Apache Commons Exec は、外部プロセスの実行に使用される Java ライブラリです。プロセスを簡単に開始および制御でき、入出力ストリームの管理と処理を提供します
#使用手順の概要1. 依存関係を追加し、Apache Commons Exec ライブラリをプロジェクトに追加します
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-exec</artifactId> <version>1.3</version> </dependency>
2. コマンド ライン オブジェクトを構築します: 実行する必要がある外部プログラムを構築しますCommandLine オブジェクトとパラメーターを通じて。
CommandLine cmdLine = CommandLine.parse("command argument1 argument2");
は次のように書き換えることができます。 executor オブジェクトを作成するには、DefaultExecutor オブジェクトを使用する必要があり、作業ディレクトリは必要に応じて設定できます。
DefaultExecutor executor = new DefaultExecutor(); executor.setWorkingDirectory(new File("/your/workdir"));
4. プロセッサ オブジェクトの作成: PumpStreamHandler オブジェクトは、入力ストリームと出力ストリームを処理し、プロセスの標準出力と標準エラー情報を保存できます。
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream); executor.setStreamHandler(streamHandler);
executor.execute メソッドを呼び出してコマンドを実行し、プロセスが終了するのを待ちます。 process.waitFor() を呼び出して、プロセスが完了するのを待ってから、対応する操作の実行を続行します。実行が完了すると、outputStream の出力結果が処理されます。
executor.execute(cmdLine); String output = outputStream.toString("UTF-8"); System.out.println(output);
使用例
public static void main(String[] args) throws IOException { CommandLine cmdLine = CommandLine.parse("java -version"); DefaultExecutor executor = new DefaultExecutor(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream); executor.setStreamHandler(streamHandler); executor.execute(cmdLine); String output = outputStream.toString("UTF-8"); System.out.println(output); }
実行出力結果:
java バージョン "1.8.0_271"Java(TM) SE 実行環境 (ビルド 1.8.0.0) 0_271-b09)
Java HotSpot(TM) 64 ビット サーバー VM (ビルド 25.271-b09、混合モード)以上がJavaで外部プログラムを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです
