1

Javaで完全なクロスプレートフォームコンソールを作成したいと思います。

私が抱えている問題は、cdコマンドを使用するとパスがリセットされることです。たとえば、cd bincd ../実行すると、最初のアプリはアプリのディレクトリから実行され、2番目のアプリはまったく同じディレクトリから実行されます。

特定のフォルダに移動してプログラムを実行したい場合は、次のようなことを行う必要があります。

cd C:\mydir & cd bin & start.exe

私がやりたいのは、このcmdをさまざまな部分に分割することです。

cd C:\mydirその後cd binstart.exe

どうやってやるの?cd現在のパスを保存して使用する方法はありますか?


私が使用するコードは次のとおりです。

String[] cmd_exec = new String[] {"cmd", "/c", cmd};

Process child = Runtime.getRuntime().exec(cmd_exec);

BufferedReader in = new BufferedReader(new InputStreamReader(child.getInputStream()));
StringBuffer buffer = new StringBuffer();
buffer.append("> " + cmd + "\n");

String line;
while ((line = in.readLine()) != null)
{
    buffer.append(line + "\n");
}
in.close();
child.destroy();
return buffer.toString();

コマンドを実行してから、コンソールの内容を返します。(これは今のところウィンドウ用です)。

4

3 に答える 3

2

特定のディレクトリからコマンドを実行する場合は、のProcessBuilder代わりにを使用しRuntime.execます。directoryプロセスを開始する前に、メソッドを使用して作業ディレクトリを設定できます。コマンドを使用しようとしないでくださいcd。シェルを実行していないため、意味がありません。

于 2012-04-18T07:52:36.780 に答える
1

あなたがCDをするなら、あなたはそれを実行したくありません。相対パスが存在するかどうかを確認してから、

File currentDir

そのディレクトリに。したがって、コマンドをcd、dir/lsなどの3つに分割することをお勧めします。cdは、前述したように、ファイルcurrentDirを使用してdirを変更します。dirは、currentDirのフォルダーとファイルを取得してリストし、残りはご存知のとおり実行する必要があります。

コマンド文字列は"".split( "&");で分割できることを忘れないでください。このようにして、 "cd C:\ mydir&cd bin&start.exe" .split( "&");を実行できます。=> {"cd C:\ mydir"、 "cd bin"、​​ "start.exe"}すると、それらを順番に実行できます。

幸運を。

于 2012-04-18T07:46:22.530 に答える
1

Madsのおかげで、私はトリックを行うことができました:

これが私が使用したコードです:

if (cmd.indexOf("cd ") >= 0)
{
    String req_cmd = cmd.substring(0, 3);
    String req_path = cmd.substring(3);
    if (req_path.startsWith(File.separator) || req_path.substring(1, 2).equals(":"))
        path = req_path;
    else
        if (new File(path + cmd.substring(3)).exists())
            path += cmd.substring(3);
        else return "[Error] Directory doesn't exist.\n";

    if (!path.endsWith(File.separator)) path += File.separator;

    cmd = req_cmd + path;
}
else cmd = "cd " + path + " & " + cmd;

次に、次のコマンド呼び出しを実行できます。

Runtime.getRuntime().exec(new String[] {"cmd", "/c", cmd});

クラスにこの属性を追加することを忘れないでください:

private static String path = System.getProperty("user.dir") + File.separator;
于 2012-04-18T08:29:01.613 に答える