Проблема со списком каталогов Java - PullRequest
0 голосов
/ 18 мая 2011

Я хочу перечислить все папки текущего каталога, но есть две проблемы. Каждый раз, когда я запускаю эту программу, в списке отображаются все файлы последней папки внутри каталога, и фильтр не работает.

Можете ли вы помочь мне?

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 голосов
/ 18 мая 2011

Первый параметр FilenameFilter.accept является каталогом, в котором находится. По сути, ваш тест всегда будет возвращать true.

[EDIT]

Точнее, я думаю, что вы действительно хотите, чтобы ваш тест был:

public boolean accept(File dir, String fileName) {
    return new File(dir, fileName).isDirectory();
}
0 голосов
/ 18 мая 2011

Ваш метод не рекурсивный.Каталог - это дерево;Вы хотите рекурсивно вызвать метод, который добавляет список файлов в общий список, если это каталог, или просто добавить файл, если это файл.Продолжайте накапливать все списки, и каждый файл будет находиться в корневом каталоге.

...