Java annuairedepuisrécursifrechercher des fichiers dans
Java Nous présentons ici un exemple de programme qui recherche de manière récursive des fichiers dans un répertoire spécifié, y compris les sous-répertoires, et obtient une liste de fichiers correspondant aux conditions de recherche.
Celles-ci effectuent le même traitement que la commande UNIX ls -R et la commande Windows dir /s.
Vous pouvez également spécifier * comme caractère générique dans le nom du fichier à rechercher ou utiliser des expressions régulières pour effectuer la recherche.
À titre d'exemple d'utilisation, dans le cas suivant, la liste de fichiers du répertoire est recherchée de manière récursive, y compris les sous-répertoires, pour obtenir une liste de fichiers avec l'extension java.
Fichier[] fichiers = search.listFiles("C:/filelist/", "*.java");
exemple de programme
/**
*
*/
classe publique FileSearch {
public static final int TYPE_FILE_OR_DIR = 1;
public static final int TYPE_FILE = 2;
public static final int TYPE_DIR = 3;
/**
* Depuis le répertoire spécifié [directoryPath],
* Recherchez le fichier [fileName] à rechercher de manière récursive et trouvez le fichier correspondant.
* Renvoie une liste d'objets fichier.
*
* exemple)
* Fichier[] fichiers =listFiles("C:/filelist/", "*.java");
* L'exemple ci-dessus recherche la liste de fichiers du répertoire de manière récursive et
* Obtenez une liste de fichiers avec l'extension java.
*
* @param directoryPath Chemin représentant le répertoire dans lequel rechercher
* @param fileName Nom du fichier à rechercher
* Vous pouvez spécifier * comme caractère générique dans le nom du fichier.
* @return Objet fichier correspondant à la recherche
*/
public File[] listFiles (String directoryPath, String fileName) {
// Convertit * en caractère générique en expression régulière
if (fileName != null) {
fileName = fileName.replace(“.”, “\\.”);
fileName = fileName.replace("*", ".*");
}
return listFiles (directoryPath, fileName, TYPE_FILE, true, 0);
}
/**
* À partir du répertoire spécifié [directoryPath], spécifié comme expression régulière
* Rechercher de manière récursive le fichier à rechercher [fileNamePattern],
* Renvoie une liste des objets fichier applicables.
*
* Vous pouvez également utiliser la condition de recherche pour déterminer si la date de mise à jour du fichier a dépassé le nombre de jours spécifié.
* Peut être spécifié.
*
* exemple)
* Fichier[] fichiers =
* listFiles("C:/filelist/", "*.java",TYPE_FILE, true, 2);
* Dans l'exemple ci-dessus, la liste de fichiers du répertoire est recherchée de manière récursive et mise à jour il y a moins de 7 jours.
* Obtenez une liste de fichiers avec l'extension Java.
*
* @param directoryPath Chemin représentant le répertoire dans lequel rechercher
* @param fileNamePattern Nom du fichier à rechercher [expression régulière]
* @param type L'objet fichier correspondant est spécifié par [type].
* Les éléments suivants peuvent être spécifiés
* TYPE_FILE_OR_DIR・・・Fichier et répertoire
* TYPE_FILE・・・Fichier
* TYPE_DIR・・・Répertoire
* @param isRecursive true pour effectuer une recherche récursive
* @param period Recherche les fichiers dont la date de mise à jour a dépassé le nombre de jours spécifié.
* Peut être défini si ou non
* Non applicable si 0
* Si 1 ou plus, recherchez les fichiers après le nombre de jours spécifié
* Si inférieur à -1, recherche les fichiers plus anciens que le nombre de jours spécifié
* @return Objet fichier correspondant à la recherche
*/
public File[] listFiles(String répertoirePath,
Chaîne fileNamePattern, type int,
boolean isRecursive, int point) {
Fichier dir = nouveau fichier (chemin d'accès);
si (!dir.isDirectory()) {
lancer une nouvelle IllegalArgumentException
("Chemin spécifié dans l'argument[" + dir.getAbsolutePath() +
« ] n'est pas un répertoire. » );
}
Fichier[] fichiers = dir.listFiles();
// sa sortie
pour (int i = 0; i < files.length; i++) {
Fichier fichier = fichiers[i];
addFile(type, fileNamePattern, set, file, point);
// Recherche récursive et ajout à la liste récursivement s'il s'agit d'un répertoire
if (isRecursive && file.isDirectory()) {
listFiles(file.getAbsolutePath(), fileNamePattern,
type, isRecursive, point);
}
}
return (File[]) set.toArray(new File[set.size()]);
}
private void addFile (type int, correspondance de chaîne, ensemble TreeSet,
Fichier fichier, point int) {
commutateur (type) {
cas TYPE_FILE :
si (!file.isFile()) {
retour;
}
casser;
cas TYPE_DIR :
si (!file.isDirectory()) {
retour;
}
casser;
}
if (match != null && !file.getName().matches(match)) {
retour;
}
// S'il existe une spécification indiquant si le nombre de jours spécifié s'est écoulé
si (période != 0) {
// Date de mise à jour du fichier
Date lastModifiedDate = new Date(file.lastModified());
Chaîne lastModifiedDateStr = new SimpleDateFormat("aaaaMMjj")
.format(lastModifiedDate);
// Date spécifiée (calculée en millisecondes par jour)
long oneDayTime = 24L * 60L * 60L * 1000L ;
longue périodeTime = oneDayTime * Math.abs(période);
Date désignéeDate =
new Date(System.currentTimeMillis() – periodTime);
Chaîne désignéeDateStr = new SimpleDateFormat("aaaaMMjj")
.format (date désignée);
si (période > 0) {
if (lastModifiedDateStr.compareTo(designatedDateStr) < 0) {
retour;
}
} autre {
if (lastModifiedDateStr.compareTo(designatedDateStr) > 0) {
retour;
}
}
}
// Stocker dans la liste si toutes les conditions sont remplies
set.add(fichier);
}
/** Utilisez TreeSet pour trier par ordre alphabétique. */
ensemble TreeSet privé = new TreeSet ();
/**
* Si vous souhaitez continuer à utiliser l'instance après l'avoir créée, utilisez cette méthode.
* L'appel doit être libéré.
* exemple)
* Recherche FileSearch = new FileSearch();
* Fichier[] f1 = search.listFiles(C:/filelist/”, “*.java”);
* search.clear();
* File[] f2 = search.listFiles("C:/filelist/", "*.jsp");
*/
public void clear(){
mettre au clair();
}
}
Résultat de l'exécution
Pour vérifier l'exemple de programme, j'ai créé un répertoire filelist et préparé les fichiers suivants.
Le nom du fichier et la date de mise à jour sont affichés.
*Veuillez noter que la date actuelle est2007/08/18Supposons que ce soit le cas.
C:\filelist │ aaa.java 2007/08/18 │ bbb.java 2007/08/18 └─dir ccc.java 2007/07/17 ddd.java 2007/08/18 eee.jpg 2007/08/16
◆Exemple d'exécution
System.out.println(« \nweightObtenir tous les fichiers »);
Fichier[] fichiers = search.listFiles(chemin, null);
printFileList(fichiers);
search.clear();
System.out.println(«\ngreet.Obtenir le fichier avec l'extension java»);
files = search.listFiles(chemin, « *.java »);
printFileList(fichiers);
search.clear();
System.out.println(« \nweight Obtenir tous les fichiers et répertoires »);
files = search.listFiles(chemin, null,search.TYPE_FILE_OR_DIR, true, 0);
printFileList(fichiers);
search.clear();
System.out.println("\nQuantityObtenir les fichiers mis à jour dans les 2 jours à compter de la date actuelle");
files = search.listFiles(chemin, null,search.TYPE_FILE, true, 2);
printFileList(fichiers);
search.clear();
System.out.println(« \n ●Récupérer les anciens fichiers datant de plus de 30 jours à compter de la date actuelle »);
files = search.listFiles(chemin, null,search.TYPE_FILE, true, -30);
printFileList(fichiers);
search.clear();
}
private static void printFileList (Fichiers [] fichiers) {
pour (int i = 0; i < files.length; i++) {
Fichier fichier = fichiers[i];
System.out.println((i + 1) + « : » + fichier);
}
}
◆Résultat de sortie
●Récupérer tous les fichiers 1 : C:\filelist\aaa.java 2 : C:\filelist\bbb.java 3 : C:\filelist\dir\ccc.java 4 : C:\filelist\dir\ddd.java 5 : C:\filelist\dir\eee.jpg ●Obtenir les fichiers avec l'extension java 1 : C:\filelist\aaa.java 2 : C:\filelist\bbb.java 3 : C:\filelist\dir\ccc .java 4 : C:\filelist\dir\ddd.java ●Obtenir tous les fichiers et répertoires 1 : C:\filelist\aaa.java 2 : C:\filelist\bbb.java 3 : C:\filelist\dir 4 : C:\filelist \dir\ccc.java 5 : C:\filelist\dir\ddd.java 6 : C:\filelist\dir\eee.jpg ●Fichiers mis à jour dans les 2 jours à compter de la date actuelle Obtenez 1 : C:\filelist\aaa. java 2 : C:\filelist\bbb.java 3 : C:\filelist\dir\ddd.java 4 : C:\filelist\dir\eee.jpg ●Date actuelle Récupérer les anciens fichiers de plus de 30 jours à partir de 1 : C : \filelist\dir\ccc.java