Regex для файлов в каталоге - PullRequest
7 голосов
/ 28 мая 2010

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

Ответы [ 3 ]

25 голосов
/ 28 мая 2010

Вы можете использовать File.listFiles(FileFilter):

public static File[] listFilesMatching(File root, String regex) {
    if(!root.isDirectory()) {
        throw new IllegalArgumentException(root+" is no directory.");
    }
    final Pattern p = Pattern.compile(regex); // careful: could also throw an exception!
    return root.listFiles(new FileFilter(){
        @Override
        public boolean accept(File file) {
            return p.matcher(file.getName()).matches();
        }
    });
}

EDIT

Итак, чтобы сопоставить файлы, которые выглядят так: TXT-20100505-XXXX.trx, где XXXX может быть любыми четырьмя последовательными цифрами, сделайте что-то вроде этого:

listFilesMatching(new File("/some/path"), "XT-20100505-\\d{4}\\.trx")
1 голос
/ 28 мая 2010

реализовать FileFilter (просто необходимо переопределить метод

public boolean accept(File f)

тогда, каждый раз, когда вы будете запрашивать список файлов, jvm будет сравнивать каждый файл с вашим методом. Regex не может и не должен использоваться, поскольку Java является кроссплатформенным языком, и это может повлиять на различные системы.

0 голосов
/ 06 августа 2012
package regularexpression;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularFile {
    public static void main(String[] args) {
        new RegularFile();
    }

    public RegularFile() {

        String fileName = null;
        boolean bName = false;
        int iCount = 0;
        File dir = new File("C:/regularfolder");
        File[] files = dir.listFiles();
        System.out.println("List Of Files ::");

        for (File f : files) {

            fileName = f.getName();
            System.out.println(fileName);

            Pattern uName = Pattern.compile(".*l.zip.*");
            Matcher mUname = uName.matcher(fileName);
            bName = mUname.matches();
            if (bName) {
                iCount++;

            }
        }
        System.out.println("File Count In Folder ::" + iCount);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...