2012-06-12 41 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

相关问题