Сопоставьте путь в пути к классу с путем в папке ресурсов при весенней загрузке

#java #spring #spring-boot

Вопрос:

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

 private static Resource[] loadResources(String relativePath) throws IOException {
    ClassLoader cl = FileUtils.class.getClassLoader();
    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
    return resolver.getResources(relativePath);
}
 

Это возвращает все файлы, соответствующие регулярному выражению

 private List<String> getPathFromResources(Resource[] resources) {
    return Arrays.stream(resources)
            .map(this::parseUri)
            .filter(uri -> !uri.getPath().isEmpty())
            .map(URI::getPath)
            .collect(Collectors.toList());
}

private URI parseUri(Resource resource) {
    try {
        return resource.getURI();
    } catch (IOException e) {
        LOGGER.error(String.format("Resource %s cannot be loaded: %s", resource, e.getMessage()));
    }
    return URI.create("");
}
 

Это возвращает их путь

 private List<String> getRelativeFiles(String relativePath) {
    try {
        Resource[] resources = loadResources(relativePath);
        return getPathFromResources(resources);
    } catch (IOException e) {
        LOGGER.error(String.format("Loading relative files with pattern : %s failed with error: %s", relativePath, e.getMessage()));
    }

    return Collections.emptyList();
}
 

И это все объединяет. Теперь, когда у меня есть список всех файлов, соответствующих регулярному выражению, я хочу удалить их. Однако проблема в том, что полученный путь находится в папке /target, что означает, что их удаление бесполезно. Однако все файлы также находятся в папке /resource. Поскольку PathMatchingResourcePatternResolver поиск файлов в пути к классам очевиден, он найдет путь в папке /target, однако есть ли способ сопоставить этот путь в /target с их исходным местоположением в папке /resource?

Комментарии:

1. Вещи, которые записываются/удаляются, на самом деле не являются ресурсами, и вам, вероятно, следует относиться к ним как к файлам

2. однако пользователь может создавать некоторые файлы в тесте, которые сохраняются в тестовых ресурсах, обрабатываются, а затем удаляются

3. Такие файлы следует создавать не в тестовых ресурсах, а во временной папке вашей файловой системы.