-1
아래 FileRepository
클래스가 주어지면 파일 검색을 최적화하여 어떻게 500 개 이상의 클라이언트 디렉토리를 처리 할 수 있습니까? 아마도 Streams
을 사용하여 아래에 다시 쓸 수 있습니까?패턴 찾기가 파일을 재귀 적으로 찾습니다.
먼저 모든 고객 디렉토리를 살펴보고 foreach 고객 디렉토리는 아래 레벨을보고 어제의 폴더 인 COB02Oct2010
만을 고려해야합니다. 나는 DateHelper
을 써서이 이전 근무일로 돌아가서 관련된 하위 디렉토리 만 고려해 보았다. 그런 다음 그 디렉토리에있는 일치하는 파일 패턴을보고 파일을 보내도록했다.
간단히 Paths
과 DirectoryStream
을 사용할 수 있습니까? AbacusUtil
public List<File> getFilesToSend(String sourcePath, String pattern, String format) {
final Predicate<File> isTargetFile = f -> f.isFile()
&& N.startsWithIgnoreCase(f.getName(), pattern)
&& N.endsWithIgnoreCase(f.getName(), "." + format);
return Stream.list(new File(sourcePath))
.filter(File::isDirectory)
.map(f -> new File(f, "COB" + getPreviousWorkingDay()))
.flatMap(cobDir -> Stream.list(cobDir, true).filter(isTargetFile))
.toList();
}
: 여기
try (DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath, filter)) {
for (Path path : stream) {
if (Files.isRegularFile(path)) {
consumer.accept(path);
}
}
}