Шаблон регулярных выражений для фильтрации файлов

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

код, который я использую сейчас:

File source = new File("Any Source file path");
File[] listOfFiles = source.listFiles();  

for (int i = 0; i < listOfFiles.length; i++) {

    if (listOfFiles[i].isFile()) {

        String filename = listOfFiles[i].getName();

        if (filename.endsWith(".x") && filename.contains(aPattern)) {
            try {
                FileUtils.copyDirectory(source, dest));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Примеры имен файлов, которые действительны для сопоставления с образцом: 2015.11.30.x или ivnr.stats

3 ответа

Это утверждение

FileUtils.copyDirectory(source, dest);

где твоя проблема Этот метод просто копирует ваш исходный файл и все в нем в каталог dest.

Вместо этого вам нужно скопировать только тот файл, который соответствует вашему шаблону. Ну вот так

if (filename.endsWith(".x") && filename.contains(pattern)){
        try {
            FileUtils.copyFileToDirectory(listOfFiles[i], dest) );
        } catch (IOException e) {
            e.printStackTrace();
        }
}

Надеюсь это поможет:)

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

FileUtils.copyDirectory(source, dest);

Вместо этого вам нужно скопировать один файл, так как должны копироваться только те файлы, которые соответствуют вашим условиям, и процесс копирования не должен повторяться для каждого файла, соответствующего шаблону:

FileUtils.copyFileToDirectory(listOfFiles[i], dest);

Зачем делать сравнение для шаблона после перечисления файлов, а затем повторять итерации, просто отфильтруйте файлы, используя List Files с фильтром, и файлы, которые удовлетворяют вашим условиям, скопируйте их.

Найти дополнительную информацию и помощь в список файлов, используя шаблон.

Еще один момент, почему вы используете FileUtils.copyDirectory Вы хотите скопировать файлы, а затем использовать копию файла NIO.

Пример кода:

File source = new File("Any Source file path");
    File[] listOfFiles = source.listFiles(new FilenameFilter()
    {

        public boolean accept(File dir, String name)
        {
            if(dir.isDirectory())//If you want to copy recursively to all sub-folders then return true and place proper checks  
                return false;

            if(name satisfies my condition)
                return true;
            return false;
        }

    });                                           
    for (int i = 0; i < listOfFiles.length; i++) 
    {

        if (listOfFiles[i].isFile()) 
        {
            Path sourcePath=FileSystems.getDefault().getPath(listOfFiles[i].getPath());
            Path target=FileSystems.getDefault().getPath(destinationPath);      
            Files.copy(sourcePath, target,  java.nio.file.StandardCopyOption.REPLACE_EXISTING);

        }
    }
Другие вопросы по тегам