Java目录列表问题

时间:2011-05-17 23:08:03

标签: java directory jlist

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

你能帮帮我吗?

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

2 个答案:

答案 0 :(得分:0)

您的方法不是递归的。目录是树;您希望递归调用一个方法,如果它是一个目录,则将文件列表添加到整个列表中,或者只是添加文件(如果它是文件)。继续累积所有列表,你将拥有根目录下的每个文件。

答案 1 :(得分:0)

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

[编辑]

更具体地说,我认为你真的希望你的测试是:

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