public static printFnames(String sDir) {
Files.find(Paths.get(sDir), 999, (p, bfa) -> bfa.isRegularFile()).forEach(System.out::println);
}
Étant donné quelque chose comme ci-dessus, ou en utilisant Apache IO ou Java NIO, comment puis-je regarder récursive pour le répertoire qui correspondent au schéma suivant:trouver récursive basé sur le modèle
COB03Oct2017 (qui ressemble à la dernière travail jour essentiellement)
J'ai une structure comme /sourcefolder/clientfolders/COB03Oct2017/file.pdf
Il y a beaucoup clientfolders et l'homme y COBddmmyyyy dossiers.
Disons que j'ai déjà une méthode qui me donne le nom du dossier cob.
Comment puis-je trouver tous les dossiers cob correspondants pour tous les dossiers clients?
@Test
public void testFiles() {
String sourcePath = "C:\\sourcepath\\";
String cobPattern = "COB" + DateHelper.getPreviousWorkingDay();
List<Path> clientDirectories = null;
try {
clientDirectories = Files.find(Paths.get(sourcePath), 1,
(path, bfa) -> bfa.isDirectory())
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
List<Path> cobDirectories = getCobDirectories(clientDirectories, cobPattern);
}
private List<Path> getCobDirectories(List<Path> clientDirectories, String cobPattern) {
List<Path> collect = new ArrayList<>();
clientDirectories
.stream()
.forEach(path -> {
try {
collect.addAll(Files.find(Paths.get(path.toString()), 1,
(p, bfa) -> bfa.isDirectory()
&& p.getFileName().toString().equals(cobPattern)).collect(Collectors.toList()));
} catch (IOException e) {
e.printStackTrace();
}
});
System.out.println("Done");
return collect;
}
Ce qui précède est ma tentative. Mais avec votre aide, je voudrais savoir si je fais quelque chose de mal, comment il peut être écrit mieux etc
Ce bit a également travaillé. Mais encore une fois cela peut-il être amélioré? Comment ne pas ignorer les exceptions telles AccessDenied
@Test
public void testFiles() {
String sourcePath = "\\\\server\\pathToCustomerReports\\";
String cobPattern = "COB" + DateHelper.getPreviousWorkingDay();
List<Path> clientDirectories = null;
try {
clientDirectories = Files.find(Paths.get(sourcePath), 1,
(path, bfa) -> bfa.isDirectory())
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
List<Path> cobDirectories = new ArrayList<>();
clientDirectories.forEach(path -> cobDirectories.addAll(getCobdirs(path)));
System.out.println("Done");
}
private List<Path> getCobdirs(Path path) {
List<Path> cobDirs = new ArrayList<>();
String cobPattern = "COB" + DateHelper.getPreviousWorkingDay();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
for (Path p : stream) {
if (path.toFile().isDirectory() && p.getFileName().toString().equals(cobPattern)) {
cobDirs.add(p);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return cobDirs;
}
Donc, dans cet exemple, vous voulez tous les dossiers 'COB03Oct2017' situés sous parent' sourcefolder' et différents 'clientfolders'? – procrastinator
@procrastinator oui - d'abord obtenir tous les dossiers des clients sous la source, puis trouver des dossiers COB. Le but est de rechercher des fichiers uniquement dans le dernier dossier COB car j'ai affaire à un très gros répertoire. – user2781389
Le code fourni fonctionne-t-il comme prévu? – c0der