2012-09-02 61 views
0

基本上,我想要做的是从我的Windows机器的特定路径中读取所有文件,例如, “C:\”。在将所有文件读取到文件数组后,我在for循环中检查文件是不是目录。我也在过滤掉隐藏的文件。之后,我对2个数组列表中的每一个进行排序,如果当前目录不是根目录,则添加“../”并将所有内容写入最终数组列表。Java - Windows 7读取文件并将它们写入列表

但问题是 - 这个java程序向我展示了比我更多的目录,我想。因为用于“C:\> dir”的windows cmd shell的输出与我的java程序的输出不同。

任何想法如何解决这个问题?

输出的 “C:\> DIR”:

{ "PerfLogs", "Program Files", "Program Files(x86)", "Users", "Windows" } 

输出这个java程序:

{ "Documents and Settings", "Dokumente und Einstellungen", "PerfLogs", "Program Files(x86)", "Program Files", "Users", "Windows", "pagefile.sys" } 

private void getFileBrowser(String dirPATH) { 
    ITEM_TEMP = new ArrayList<String>(); 
    PATH_TEMP = new ArrayList<String>(); 
    ITEM_TEMP.clear(); 
    PATH_TEMP.clear(); 

    currentWorkingDirectory = dirPATH; 

    File f = new File(dirPATH); 
    File[] files = f.listFiles(); 

    for(int i=0; i < files.length; i++) { 
     File file = files[i]; 

     if(file.isDirectory()) { 
      if(!file.isHidden() & !file.getName().startsWith("$")) { 
       PATH_TEMP.add(file.getPath()); 
       ITEM_TEMP.add(file.getName() + "/"); 
      } 
     } 
     else { 
      if(!file.isHidden()) { 
       PATH_TEMP.add(file.getPath()); 
       ITEM_TEMP.add(file.getName()); 
      } 
     } 
    } 

    Collections.sort(ITEM_TEMP); 
    Collections.sort(PATH_TEMP); 

    ITEM.clear(); 
    PATH.clear(); 

    if(!dirPATH.equals(rootDirectory)) { 
     ITEM.add("../"); 
     PATH.add(f.getParent()); 
    } 

    for(int i=0; i < ITEM_TEMP.size(); i++) { 
     ITEM.add(ITEM_TEMP.get(i)); 
    } 
    for(int i=0; i < PATH_TEMP.size(); i++) { 
     PATH.add(PATH_TEMP.get(i)); 
    } 
} 

回答

0

它看起来像Java代码正在打印出每个文件(pagefile.sys应该隐藏在默认情况下系统)。你说过你想过滤掉隐藏的文件。

问题可能就出在这行:

if(!file.isHidden() & !file.getName().startsWith("$")) 

&是位AND运算符,你应该使用& & - 逻辑AND运算符。

+0

啊好的。有没有一种JAVA方式来获取cmd“dir”命令显示的文件/目录?或者我应该使用运行时选择目录? –

+0

有两种方法。使用'exec'命令通过Java执行dir命令(见这里http://www.java-samples.com/showtutorial.php?tutorialid=8)或者...学习什么样的文件/目录' dir'显示并修复你的代码。当你用'&修复你的错误时,你可能会非常接近解决方案-dir默认情况下不会打印隐藏的文件。我不确定具有'startsWith(“$”)'的语句是否必要。您可以通过执行'dir /?'来阅读dir帮助文件,可能会对您有所帮助。 – Wookie88

+0

看来,如果我使用“&”或“&&”没有关系 - 没有其他结果。也许我会稍后尝试运行时方式。 PS:需要“startsWith(”$“)”命令来过滤掉“Windows”目录中的某些文件夹。它们不会以“isHidden()”消失.. –

相关问题