Как использовать сетевую папку, которая только что была сопоставлена ​​с локальным диском?

Отслеживание ведет в этот thread и другие, я настроил блок кода, в котором я сопоставляю сетевой диск с локальным диском, а затем перечисляю некоторые файлы внутри него.

Проблема в следующем: похоже, что сопоставление еще недоступно для метода 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.");
    }
}

¿Что мне сделать, чтобы использовать подключенный диск сразу (или гарантировать, что я ждал, пока диск будет доступен)?


person Alfabravo    schedule 12.06.2012    source источник
comment
Не вызывает ли сопоставление диска с B: проблемы со вторым дисководом? :-)   -  person paxdiablo    schedule 01.09.2015


Ответы (1)


Runtime.exec запускает процесс, но не ждет его. Вам придется дождаться завершения процесса (через что-то вроде p.waitFor()), прежде чем вы узнаете, что диск подключен.

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

    Collection<File> files ...
person cHao    schedule 12.06.2012