4

私はJavaアプリケーションを持っています.Runtime.getRuntime().execを使用してバッチファイルを呼び出します.Runtime.getRuntime().execを使用してLinuxバッチファイルを呼び出すと、バッチファイルは独自のディレクトリを見つけることができませんでした. バッチ ファイルで pwd コマンドを使用していますが、アプリケーション パスが返されます。バッチファイル自体からの物理パスが必要です。これどうやってするの?

4

3 に答える 3

0

これを試して 。それは私のために働いています。

        Process p = Runtime.getRuntime().exec("pwd");
        BufferedReader bri = new BufferedReader
                (new InputStreamReader(p.getInputStream()));
        BufferedReader bre = new BufferedReader
                (new InputStreamReader(p.getErrorStream()));
        String line;
        while ((line = bri.readLine()) != null) {
            System.out.println(line);
        }
        bri.close();
        while ((line = bre.readLine()) != null) {
            System.out.println(line);
        }
        bre.close();
        p.waitFor();
于 2014-08-20T11:55:34.913 に答える
0

「.bat」拡張子を持つファイルを具体的に参照している場合、バッチ ファイルは、Windows の Microsoft のコマンド プロンプト シェル (「cmd.exe」) で使用するように設計されています。具体的には一連のコマンドを含むスクリプト ファイルです。このシェルの場合、Bash などの Unix シェルでは機能しません。

実際に Unix の「シェル スクリプト」を意味していて、具体的には Microsoft の「バッチ ファイル」ではないと仮定すると、 Runtime の方法よりも柔軟性が高いため、 ProcessBuilderクラスを使用したほうがよいでしょう。exec()

ProcessBuilder を使用して独自のディレクトリでスクリプトを実行するには、次のように、スクリプトを指すために使用しているディレクトリと同じディレクトリにビルダーのディレクトリを設定します。

// Point to wherever your script is stored, for example:
String script    = "/home/andy/bin/myscript.sh";
String directory = new File(script).getParent();

// Point to the shell that will run the script
String shell = "/bin/bash";

// Create a ProcessBuilder object
ProcessBuilder processBuilder = new ProcessBuilder(shell, script);

// Set the script to run in its own directory
processBuilder.directory(new File(directory));

// Run the script
Process process = processBuilder.start();
于 2014-08-20T12:29:36.903 に答える