#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. Такие файлы следует создавать не в тестовых ресурсах, а во временной папке вашей файловой системы.