私は、次の作品やってプログラムを書いています:プロセスの入力ストリームから読み込み、指定されたメソッドを使用して処理する方が良いでしょうか?
- は(「SVN情報」または「SVN差分」のような)ProcessBuilderをを使用してコマンドを実行します。
- プロセスの
getInputStream()
からコマンドの出力を読み取ります。 - コマンドの出力では、私はどちらか欲しい:
- は、出力を解析し、私が欲しいものを手に入れると、後でそれを使用し、OR:
- は、指定したファイルに出力を直接書きます。
今、私がやっているものを線でどんなコマンドの出力を読み、ArrayList
に保存し、その後、私はちょうど何かを見つけるために走査線や線を書くかどうかを決定するBufferedReader
を使用していますファイルに。
明らかに、これはコマンドの出力をファイルに保存するにはArrayListを必要としないため、醜い実装です。だから、より良い方法でそれをするために何を提案しますか?
ArrayList<String> reuslt = runCommand(command1);
for (String line: result) {
// ...parse the line here...
}
: コマンドを実行し、プロセス
private ArrayList<String> runCommand(String[] command) throws IOException {
ArrayList<String> result = new ArrayList<>();
_processBuilder.command(command);
Process process = null;
try {
process = _processBuilder.start();
try (InputStream inputStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
String line;
while ((line = bufferedReader.readLine()) != null) {
result.add(line);
}
}
}
catch (IOException ex) {
_logger.log(Level.SEVERE, "Error!", ex);
}
finally {
if (process != null) {
try {
process.waitFor();
}
catch (InterruptedException ex) {
_logger.log(Level.SEVERE, null, ex);
}
}
}
return result;
}
、私はこのように行うことができる1つの方法での出力から読み取るために、これを使用します。ここでは
は、私のコードのいくつかはあります
と私は次のようになります:
ArrayList<String> result = runCommand(command2);
File file = new File(...filename, etc...);
try (PrintWriter printWriter = new PrintWriter(new FileWriter(file, false))) {
for (String line: result) {
printWriter.println(line);
}
}
私が追加したことは、svn diffのようなコマンドが10MBを超える出力を生成することがあるということです。 – coolcfan
OK、上記の編集をご覧ください。 –
ああ、同じインタフェースを実装しているプロセッサをいくつか書くことができ、そのうちの1つをrunCommandメソッドのパラメータとして渡すことができますか? – coolcfan