2011-05-17 38 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