Как посчитать количество файлов в каталоге с одинаковым расширением в Java? - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу иметь возможность подсчитать все сохраненные игры, созданные пользователем.

Используя Java, как я могу подсчитать все файлы в каталоге с определенным расширением?

Этот код считает все файлы независимо от расширения:

public class MCVE {

    public static void main(String[] args) {
        countFiles();
    }

    private static void countFiles() {
        long amountOfFiles = 0;
        try {
            Stream<Path> files = Files.list(Paths.get("./saves"));
            amountOfFiles = files.count();
            System.out.println(amountOfFiles);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Мне удалось выяснить это самостоятельно.Поскольку я не мог понять, как использовать метод Path endsWith(), мне пришлось преобразовать каждый объект Path в строку, а затем использовать вместо него версию метода endsWith() для строки.

private static void countFiles() {
    long amountOfFiles = 0;
    try {
        Stream<Path> files = Files.list(Paths.get("./saves"));
        Iterable<Path> iterable = files::iterator;

        String fileName = "";
        for (Path p: iterable) {
            fileName = p.getFileName().toString();
            if(fileName.endsWith(".sav"))
                amountOfFiles++;
        }

        System.out.println(amountOfFiles);

        files.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
0 голосов
/ 21 декабря 2018

Вы можете использовать FilenameFilter и FileFilter для фильтрации необходимого файла или каталога.

File file = new File("pathname");
// fileter file name start wit Chap
file.listFiles(pathname -> pathname.getName().startsWith("Chap"));
// fileter car read file
file.listFiles(pathname -> pathname.canRead());

Вы можете обратиться к официальной документации Java IO

0 голосов
/ 21 декабря 2018

Передайте свой добавочный номер в этой функции.

amountOfFiles = files.map(Path::toFile).filter(e->e.getName().endsWith(".xml")).count();
...