2

unix/shellでいくつかのコマンドを実行し、出力を処理したいと考えていJavaます。を使用getRuntime.exec()しましたが、 のような一部のコマンドで正しい出力が得られませんls directory_path/*.tar.gz。そのコマンドの場合、私のプログラムは出力を提供していませんが、エラーが発生していNo such file or directoryます。しかし、同じコマンドがコマンドプロンプトで正しい出力を提供しています。

Javaでワイルドカードを含むコマンドを実行する他の方法はありますか?

4

3 に答える 3

5

Javaでワイルドカードを含むコマンドを実行する他の方法はありますか?

はいあります。

コードに 3 つの潜在的な問題があります。

  1. 外部コマンドの出力を見たいと仮定すると、それが生成する出力を処理し、それを自分で印刷する必要があります。

    ここで提供した例に従ってください。

  2. のシェル展開は、単純に実行すると*機能しません。明示的Runtime.execに実行する必要があります。/bin/bash

  3. の内容を一覧表示しようとするとdirectory_path/*.tar.gz、( で開始していない場合/)現在の作業ディレクトリdirectory_pathに対して相対的に解決されることを知っておく必要があります。最初に絶対パスを指定して動作することを確認してから、相対パスが見つからない理由を突き止めてください。

動作するはずの完全な例を次に示します。

Process proc = new ProcessBuilder("/bin/bash", "-c",
                                  "ls /.../directory_path/*.tar.gz").start();

Reader reader = new InputStreamReader(proc.getInputStream());
int ch;
while ((ch = reader.read()) != -1)
    System.out.print((char) ch);
reader.close();
于 2012-08-03T06:22:29.427 に答える
0

これは、ディレクトリへの相対パスを指定し、アプリケーションが作業ディレクトリで実行されているためです。指定したパスは、その作業ディレクトリからの相対パスです。

絶対パスを確認するには、作業ディレクトリをチェックアウトします。

System.out.println("Working directory: " + System.getProperty("user.dir"));
于 2012-08-03T06:15:08.680 に答える
0

「ls directory_path/*.tar.gz」は、現在のディレクトリに対して相対的に機能します。

于 2012-08-03T06:15:21.270 に答える