2011-05-17 41 views
0

我想列出当前目录的所有文件夹,但有两个问题。每次我运行这个程序时,列表显示目录中最后一个文件夹的所有文件,并且过滤器不起作用。Java目录列表问题

你能帮我吗?

public void foldersPanel() 
{ 

    JPanel folderScreen = new JPanel(); 
    folderScreen.setLayout(new GridLayout(1,1)); 
    direFilter = new FilenameFilter() 
    { 
     public boolean accept(File file, String string) 
     { 
      if (file.isDirectory()) 
      { 
       return file.isDirectory(); 
      } 
      else 
      { 
       return false; 
      } 
     } 
    }; 
    File directory = new File(System.getProperty("user.dir")); 
    File[] listOfFiles = directory.listFiles(direFilter); 
    String[] allFiles = directory.list(); 

    if (directory.isDirectory()) 
    { 
     int x = 1; 

     for (int i =0; i<listOfFiles.length; i++) // displays all the files 
     { 
      if (listOfFiles[i].isDirectory()) 
      { 
       folderList = new JList(listOfFiles[i].list(direFilter)); 
       System.out.println(x +") Directory = " + listOfFiles[i].getName()); 
       x++; 
       folderList.setSelectedIndex(1); 
      } 
      else 
      { 
       System.out.println("is file"); 
      } 
      folderScreen.add(new JScrollPane(folderList)); 

     } 

    } 
    else 
    { 
     System.out.println("This is a file, not a directory, so we will move to the parent folder"); 
     directory = directory.getParentFile(); 
     updateLabels(); 
     System.out.println("The new directory is : " +directory.toString()); 
    } 
} 

code

+0

你得到具体什么错误? “目录中的最后一个文件夹”是什么意思?你能否澄清你的问题?当前目录中的 – alpian 2011-05-17 23:22:24

+0

是3个文件夹,文件夹1,文件夹2和文件夹3.每次运行此代码时,目录的位置是当前目录/ folder3 – Eristikos 2011-05-19 16:31:24

回答

0

你的方法是不是递归。目录是一棵树;你想要递归地调用一个方法,如果它是一个目录,则将文件列表添加到整个列表中,或者只要将文件添加到文件中即可。保持积累所有列表,并且您将每个文件都放在根目录下。

0

FilenameFilter.accept的第一个参数是包含的目录。实际上,您的测试将始终返回true

[编辑]

更具体地说,我觉得你真的想你的测试是:

public boolean accept(File dir, String fileName) { 
    return new File(dir, fileName).isDirectory(); 
} 
+0

哦,也许你应该考虑使用'FileFilter'来代替。可能更符合您的需求。 – 2011-05-17 23:32:53