1

このスレッドや他のスレッドのリードに続いて、ネットワークドライブをローカルドライブにマップするコードブロックを設定し、その中のいくつかのファイルを一覧表示します。

問題は、最初の呼び出しでFileUtilsメソッドへのマッピングがまだ利用できないようであり、待機してルーチンを再度呼び出す場合にのみ、マップされたドライブを使用する準備ができていることを検出します。

String path = "B:/Files/Somwething/SomethingElse/FinalDepth";
File newFile = new File("B:/Files/Something/SomethingElse");
if (!newFile.isDirectory()) {
    flagNetwork = true;
    p = Runtime.getRuntime().exec("net use B: " + networkSharedFolder);

    if(p != null) {
        Collection<File> files = FileUtils.listFiles(new File(path), arrExt, false);
        Iterator<File> iterFiles = files.iterator();
        while(iterFiles.hasNext()) {
            File tmpFile = (File) iterFiles.next();
            listResult.add(tmpFile);
        }
        LogServicio.doLog("[MyApplication, ContextListener] Drive B mapped to " + networkSharedFolder + ".", LogServicio.CErrorLvl);
    } else {
        throw new Exception("Error mapping network drive.");
    }
}

¿マップされたドライブを一度に使用するには(またはドライブが使用可能になるまで待機したことを保証するには)どうすればよいですか?

4

1 に答える 1

1

Runtime.execプロセスの実行を開始しますが、実際には待機しません。p.waitFor()ドライブがマップされていることを知る前に、プロセスが終了するのを待つ必要があります (のようなものを介して)。

...
if (p != null) {
    while (true) {
        try { p.waitFor(); break; }
        catch (InterruptedException ex) { /* don't care */ }
    }

    Collection<File> files ...
于 2012-06-12T23:27:48.000 に答える