2012-06-12 68 views
1

this 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."); 
    } 
} 

¿我應該以一次使用映射的驅動器(或保證我等到驅動器可用)呢?

+0

不將驅動器映射到'B:'會導致第二個軟盤驅動器出現問題? :-) – paxdiablo

回答

0

Runtime.exec啓動一個進程正在運行,但並沒有真正等待它。在知道驅動器的映射之前,您必須等待該過程完成(通過類似p.waitFor())。

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

    Collection<File> files ... 
+0

正確的錢,先生。 – Alfabravo

相關問題