0

次のコードを使用して、.Net コンパイル済み実行可能ファイルを実行し、出力を保存しています。.exe を別のパッケージに入れて実行できるようにしたい。ただし、コードを実行しようとすると、ファイルへのフルパスを入力しなかったため、ファイルが見つからないことが通知されます。クラスパスに含めるなど、これを回避する簡単な方法はありますか?

public class ActiveDirectoryQuery {
    private String email = "";
    public ActiveDirectoryQuery(){}


    public void setEmail(String host){
        this.email = host;
    }

    public String getEmail(){
        return this.email;
    }
    public String getUserName() throws IOException{
        Process process = new ProcessBuilder(
        "/relative/path/to/EmailFQDN.exe", this.email).start();
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        String fullOutput= "";
        while ((line = br.readLine()) != null) {
         System.out.println(line);
         fullOutput=fullOutput+line+"\n";
        }
        return fullOutput;
    }
}
4

3 に答える 3

1

場所がクラスファイルに対して相対的である場合(コメントでそう言っていますが...本当にそうですか?それはかなり珍しいことです)、次の方法で絶対パスを取得してみてください。

URL exe = ActiveDirectoryQuery.class.getResource("relative/path/to/EmailFQDN.exe");
File exefile = new File(exe.getPath());
于 2013-10-08T17:28:14.333 に答える
0

プロセスビルダーのパスは、クラスパスやパッケージとは関係ありません。exeが指定したディレクトリにあることを期待しているだけです。

相対パスを使用している場合は、Java プロセスの現在の作業ディレクトリからの相対パスを指定する必要があります。これをコマンド ラインから実行している場合は、プロセスを開始したときのディレクトリになります。

また、ディレクトリを相対パスにしたい場合は、ディレクトリの先頭のスラッシュを取り除くことを忘れないでください。

于 2013-10-08T17:28:44.020 に答える