0

Java コードを使用して検索コマンドを実行しようとしています。私は次のことをしました:

sysCommand = "find . -name '*out*' > file1"

Runtime runtimeObj = Runtime.getRuntime();

try {
    Process processObj = runtimeObj.exec(sysCommand);
    processObj.waitFor();
    ...

この Linux コマンドは、コマンド ラインを使用すると実行されますが、Java では失敗します。なぜですか?

4

3 に答える 3

1

Javaでこれを行うことに興味がある場合は、次のようなことを行う必要があります。

public void find(File startDirectory, FileFilter filter, List<File> matches) {
    File[] files = startDirectory.listFiles(filter);
    for (File file:files) {
        if(file.isDirectory()) {
            find(file, filter, matches);
        } else {
            matches.add(file);
        }
    }
}

FileFilter次に、パターンに一致するディレクトリとファイルを受け入れるように書く必要があります。

于 2013-02-16T02:13:11.737 に答える
1

この質問はおそらく重複または重複しています。

  • とにかく、File.listを使用して、必要なファイルの種類に Filter を提供できます。すべてのサブディレクトリを取得するために再帰的に呼び出すことができます。私はこの答えが好きではありません。もっと簡単な方法があると思うでしょう。

  • 私の友人は、コマンドを実行するために Apache のCommons-Execを勧めました。コマンドでタイムアウトを使用できます。ランタイムは大きな stdout と stderr で問題が発生する可能性があるため、彼はそれを推奨しました。

于 2013-02-16T01:56:32.297 に答える
1

私の知る限り、 ではいかなる形式のパイプ演算子も使用できませんRuntime.exec。結果をファイルに移動したい場合は、Java で を介してその部分を実行する必要がありますProcess.getInputStream

于 2013-02-16T02:01:59.797 に答える