Мне нужно проверить, что имя файла содержит любую дату или число в его имени, и если оно содержит, чтобы изменить имя соответственно.
Пример 1
phd_20001_pat_apr.txt.gz
В приведенном выше примере имя файла содержит 20001. Поэтому я хочу изменить его соответственно:
phd_*_pat_apr*
пример2
phd_pat_mnc.txt.gz
В приведенном выше примере в имени файла нет ни даты, ни числа. Так что это не будет изменением.
Не могли бы вы рассказать мне, какие изменения я делаю в приведенном ниже коде, чтобы получить желаемый результат?
filename и source_file_nm являются заголовком.
if ( (((java.util.List<String>)globalMap.get("filename")).get(i)).contains("enc_prov") )
{
globalMap.put("source_file_nm",(((java.util.List<String>)globalMap.get("filename")).get(i)).substring(0,(((java.util.List<String>)globalMap.get("filename")).get(i)).lastIndexOf("_")+2));
}
Это дубликат вашего предыдущего вопроса. Попробуйте улучшить этот вопрос вместо того, чтобы публиковать новый.




Вы можете использовать приведенный ниже подход для достижения своей цели.
Вы можете использовать регулярное выражение для этого
String filenamePattern = "phd_[0-9]+_.*"
try (Stream<Path> stream = Files.find(folder,
Integer.MAX_VALUE,
(path,
basicFileAttributes) -> path.toFile().getName().matches(filenamePattern))) {
return stream.collect(Collectors.toList());
}
Это вернет список всех файлов, соответствующих filenamePattern. Соответственно измените [maxDepth максимальное количество уровней каталогов для поиска] в файле files.find.
Можете ли вы опубликовать свой полный код? вместо блока if