0

「dir」コマンドの結果をJavaコンソールに出力したい。私はすでにグーグルとここを見てきましたが、どの例も私にはうまくいかないので、私はこの投稿を書きます。

私のコードは次のとおりです。

try
    {
        System.out.println("Thread started..");
        String line = "";
        String cmd = "dir";

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

        //Read output
        BufferedReader dis = new BufferedReader( new InputStreamReader(child.getInputStream() ));

        while ((line = dis.readLine()) != null)
        {
            System.out.println("Line: " + line);
        }

        dis.close();

    }catch (IOException e){

    }

私は何が間違っているのですか?

どんな助けでもとてもいいでしょう。

前もって感謝します、

ダリル

4

5 に答える 5

3
  1. 「dir」をプロセスとして実行することはできません。に変更する必要がありますString cmd = "cmd dir";
  2. 例外はまったく処理しません。catchブロックに行を追加するe.printStackTrace());と、(1)で書いた内容がわかります。例外を無視しないでください!
  3. エラーストリームを処理しません。これにより、プログラムがハングし、エラーストリームを処理し、異なるストリームを使用して両方のストリーム(エラーと入力)から並行して読み取る可能性があります。
于 2011-04-25T22:21:10.763 に答える
1

最良の方法は、commonsexechttp ://commons.apache.org/exec/を使用することです。

これには、出力ストリームをクリアしなかった場合のプロセス全体のブロック、コマンドでの引用符のエスケープなど、壁を実際に駆り立てる可能性のある癖を捕らえるものがあります。

これは、Windowsでdelコマンドを正常に実行するメソッドです。delはスタンドアロンの実行可能ファイルではないため、cmdの使用に注意してください。

private void deleteWithCmd(File toDelete) throws IOException {
    CommandLine cmdLine = new CommandLine("cmd.exe");
    cmdLine.addArgument("/C");
    cmdLine.addArgument("del");
    cmdLine.addArgument(toDelete.getAbsolutePath());
    DefaultExecutor executor = new DefaultExecutor();
    int exitValue = executor.execute(cmdLine);
}
于 2012-06-03T12:33:20.703 に答える
0
  • a)Javaコンソールとは何ですか?
  • b)移植性のないRuntime.execの代わりにjavas File.listFiles()を使用する必要があります。これにより、スペース、空白、改行などを含むファイル名の場合、名前の分割が必要になります。
  • c)コードの何が問題になっていますか?
  • d)例外の場合はどうして何もしませんか?
于 2011-04-25T22:29:04.877 に答える
0

これは、OSのバージョンとエラー状態(上記のMByDで述べられている)を説明するより完全な例です。

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4

「exec」を使用すると、アプリケーションがクロスプラットフォームではなくなり、Javaの主な利点の1つが失われることに注意してください。

より良いアプローチは、java.ioパッケージを使用することです。

http://download.oracle.com/javase/tutorial/essential/io/dirs.html

于 2011-04-25T22:32:19.003 に答える
0

また、Java6でそのようなことを行うことができます。

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

public class ListFilesFromRegExp {

    public static void main(String[] args) throws IOException {
        File dir = new File("files/");
        File[] files = dir.listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.matches("File[0-9].c");
            }
        });
        for (int i = 0; i < files.length; i++) {
            System.out.println(files[i].getAbsolutePath());
        }
    }
}
于 2013-12-13T10:18:19.177 に答える