C'était un incident lorsque je faisais un programme qui utilise la classe File en Java. ..
C'était un programme qui patrouillait dans l'arborescence des dossiers d'un dossier spécifié, lisait le texte après cela et le produisait au format CSV.
targetFolder ├folder1 │ ├folder1_folder1 │ │ ├text1.txt │ │ ├text2.txt │ │ └text3.txt │ └folder1_folder2 │ ├text.txt │ ├text2.txt │ └text3.txt ├folder2 │ ├folder2_folder1 │ │ ├text1.txt │ │ ├text2.txt │ │ └text3.txt
Ce qui suit est omis
La méthode pour faire le tour est la suivante
private static List<File> getFileInstanceList(String filePathStr) throws IOException {
try (Stream<Path> path = Files.list(Paths.get(filePathStr))) {
return path.map(f -> f.getFileName().toFile()).collect(Collectors.toList());
}
}
Si vous passez le chemin du dossier comme argument, l'instance de fichier du dossier dans ce dossier sera renvoyée dans une liste.
List<File> list = getFileInstanceList("C:\Users\hoge\Desktop\targetFile\");
À la source de lecture, la liste retournée a été bouclée avec For-each, et le chemin du fichier du dossier enfant a été à nouveau passé à la méthode ci-dessus, mais ...
Un problème est survenu avec l'instance de fichier renvoyée par cette méthode Quand j'ai eu le chemin du dossier enfant, je n'ai pu obtenir que le nom du fichier
Lorsque j'ai vérifié JavaDoc de la classe File, j'ai trouvé la description suivante
Renvoie un objet File qui représente ce chemin. Si ce chemin est associé au fournisseur par défaut, cette méthode équivaut à renvoyer un objet File construit avec une représentation String de ce chemin. Si ce chemin est créé en appelant la méthode File to Path, il n'y a aucune garantie que l'objet File retourné par cette méthode sera égal au File d'origine.
Équivaut à renvoyer un objet File construit avec une représentation String? ??
Je ne sais pas ce que c'est, mais je pense que c'est comme ça si c'est facile à comprendre. La classe File a un constructeur qui prend String comme argument Lorsque l'instance générée à ce moment-là spécifie le chemin complet de File Parfois, seul le nom du fichier est spécifié, mais ce dernier ne peut pas conserver correctement l'état réel du fichier.
Eh bien, "C: \ Users \ hoge \ Desktop \ targetFile \ folder1" S'il y a une instance de fichier créée par "dossier1", la première serait plus réaliste.
private static List<File> getFileInstanceList(String filePathStr) throws IOException {
try (Stream<Path> path = Files.list(Paths.get(filePathStr))) {
return path.map(f -> new File(f.toUri())).collect(Collectors.toList());
}
}
Puisqu'il suffit de passer le chemin complet pour générer un fichier, je l'ai changé pour instancier un fichier avec l'URI du chemin comme argument.
Je ne suis pas sûr que même si je lis JavaDoc, Api y est-il habitué?
Recommended Posts