Поиск совпадений эл-та массива с ключом hashmap

299
22 июля 2021, 00:30

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

public void foldersArray(String sourceFolder, File[] filelist) {
    String key = null;
    Map<String, String> foldersForPRT = new HashMap<String, String>();  
    foldersForPRT.put("111.00.000", "D:\\test\\111.00.000");
    foldersForPRT.put("222.00.000", "D:\\test\\222.00.000");
    foldersForPRT.put("333.00.000", "D:\\test\\333.00.000");

for (File file1 : filelist) {           
    for (int i = 0; i < foldersForPRT.keySet().toArray().length; i++) {
        key = foldersForPRT.keySet().toArray()[i].toString();
        destinationFolder = new File(foldersForPRT.values().toArray()[i].toString());
        prtFiles = new File(sourceFolder + File.separator + file1.getName());
    if (file1.getName().contains(key)) {
            System.out.println("Совпадение! " + file1.getName() + " " + key);   
            try {
                FileUtils.copyFileToDirectory(prtFiles, destinationFolder); // копируем
            } catch (IOException e) {
                e.printStackTrace();
            }           
    } else {
        System.out.println("Не совпало! ");
        destinationFolder = new File("D:\\test\\unsorted");
        try {
            FileUtils.copyFileToDirectory(prtFiles, destinationFolder);
        } catch (IOException e) {
            e.printStackTrace();
            }   
        }   
    }       
  }     
}
Answer 1

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

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Map;
public class Test {
    public void foldersArray(String sourceFolder, File[] filelist) {
        Map<String, String> foldersForPRT = new HashMap<>();
        foldersForPRT.put("111.00.000", "D:\\test\\111.00.000");
        foldersForPRT.put("222.00.000", "D:\\test\\222.00.000");
        foldersForPRT.put("333.00.000", "D:\\test\\333.00.000");
        final Map<Integer, String> fileNumber = new HashMap<>();
        for (int i = 0; i < filelist.length; i++) {
            for (String key : foldersForPRT.keySet()) {                    
                if (filelist[i].getName().contains(key)) fileNumber.put(i, foldersForPRT.get(key));
                break;
            }
        }
        for (int i = 0; i < filelist.length; i++) {
            String source = sourceFolder + File.separator + filelist[i].getName();
            if (fileNumber.containsKey(i)) {
                System.out.println("Совпадение! " + filelist[i].getName());
                fileCopy(source, fileNumber.get(i));
            } else {
                System.out.println("Не совпало!");
                fileCopy(source, "D:\\test\\unsorted");                
            }
        }
    }
    private boolean fileCopy(String source, String destination) {
        try {
            Files.copy(Paths.get(source), Paths.get(destination), StandardCopyOption.REPLACE_EXISTING);// копируем
            return true;
        } catch (IOException e) {
            return false;
        }
    }
}
READ ALSO
Hibernate: использование StaticMetamodel

Hibernate: использование StaticMetamodel

Установка и настройка

281
Ошибка при запуске Apache Tomcat в Windows 10, (Непредвиденное появление: Files\Java\jdk-12.0.2&ldquo;&rdquo;) как можно исправить? [закрыт]

Ошибка при запуске Apache Tomcat в Windows 10, (Непредвиденное появление: Files\Java\jdk-12.0.2“”) как можно исправить? [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

132
как сделать rest запрос по дате . Java springboot

как сделать rest запрос по дате . Java springboot

Каждые два секунд , я получаю данные с сайта заношу их в бд и мне нужно сделать rest запрос по DateЯ сделал rest запрос по всем данным

138