Java VerzeichnisausrekursivSuchen Sie nach Dateien in
Java Hier stellen wir ein Beispielprogramm vor, das rekursiv nach Dateien in einem bestimmten Verzeichnis, einschließlich Unterverzeichnissen, sucht und eine Liste von Dateien erhält, die den Suchbedingungen entsprechen.
Diese führen die gleiche Verarbeitung durch wie der UNIX-Befehl ls -R und der Windows-Befehl dir /s.
Sie können auch * als Platzhalterzeichen im Dateinamen für die Suche angeben oder reguläre Ausdrücke für die Suche verwenden.
Als Anwendungsbeispiel wird im folgenden Fall das Verzeichnis filelist rekursiv einschließlich der Unterverzeichnisse durchsucht, um eine Liste von Dateien mit der Erweiterung java zu erhalten.
File[] files = search.listFiles(“C:/filelist/”, „*.java“);
Beispielprogramm
/**
*
*/
öffentliche Klasse FileSearch {
öffentliches statisches final int TYPE_FILE_OR_DIR = 1;
öffentliches statisches final int TYPE_FILE = 2;
öffentliches statisches final int TYPE_DIR = 3;
/**
* Aus dem angegebenen Verzeichnis [directoryPath],
* Durchsuchen Sie die zu durchsuchende Datei [Dateiname] rekursiv und finden Sie die entsprechende Datei.
* Gibt eine Liste von Dateiobjekten zurück.
*
* Beispiel)
* File[] files =listFiles(“C:/filelist/”, „*.java“);
* Das obige Beispiel durchsucht das Verzeichnis filelist rekursiv und
* Holen Sie sich eine Liste von Dateien mit der Erweiterung Java.
*
* @paramdirectoryPath Pfad, der das zu durchsuchende Verzeichnis darstellt
* @param fileName Dateiname, nach dem gesucht werden soll
* Sie können * als Platzhalterzeichen im Dateinamen angeben.
* @return Dateiobjekt, das der Suche entspricht
*/
öffentliche Datei[] listFiles(String Verzeichnispfad, String Dateiname) {
// Konvertieren Sie * als Platzhalterzeichen in einen regulären Ausdruck
if (fileName != null) {
fileName = fileName.replace(“.”, „\\.“);
fileName = fileName.replace(“*“, „.*“);
}
return listFiles(directoryPath, fileName, TYPE_FILE, true, 0);
}
/**
* Aus dem angegebenen Verzeichnis [directoryPath], angegeben als regulärer Ausdruck
* Rekursiv nach der zu durchsuchenden Datei suchen [fileNamePattern],
* Gibt eine Liste der anwendbaren Dateiobjekte zurück.
*
* Sie können die Suchbedingung auch verwenden, um festzustellen, ob das Aktualisierungsdatum der Datei die angegebene Anzahl von Tagen überschritten hat.
* Kann angegeben werden.
*
* Beispiel)
* Datei[] Dateien =
* listFiles(“C:/filelist/”, “*.java”,TYPE_FILE, true, 2);
* Im obigen Beispiel wird die Verzeichnisdateiliste rekursiv durchsucht und vor weniger als 7 Tagen aktualisiert.
* Holen Sie sich eine Liste der Dateien mit der Erweiterung Java.
*
* @paramdirectoryPath Pfad, der das zu durchsuchende Verzeichnis darstellt
* @param fileNamePattern Dateiname, nach dem gesucht werden soll [regulärer Ausdruck]
* @param Typ Das entsprechende Dateiobjekt wird durch [Typ] angegeben.
* Folgendes kann angegeben werden
* TYPE_FILE_OR_DIR・・・Datei und Verzeichnis
* TYPE_FILE・・・Datei
* TYPE_DIR・・・Verzeichnis
* @param isRecursive true für rekursive Suche
* @param period Suche nach Dateien, deren Aktualisierungsdatum die angegebene Anzahl von Tagen überschritten hat.
* Kann eingestellt werden, ob oder nicht
* Gilt nicht, wenn 0
* Wenn 1 oder mehr, werden Dateien nach der angegebenen Anzahl von Tagen durchsucht
* Wenn kleiner als -1, werden Dateien gesucht, die älter als die angegebene Anzahl von Tagen sind
* @return Dateiobjekt, das der Suche entspricht
*/
public File[] listFiles(String VerzeichnisPfad,
String fileNamePattern, Typ int,
boolean isRecursive, int period) {
Dateiverzeichnis = neue Datei (Verzeichnispfad);
if (!dir.isDirectory()) {
wirft eine neue IllegalArgumentException
(„Pfad angegeben in argument[“ + dir.getAbsolutePath() +
„] ist kein Verzeichnis.“);
}
File[] files = dir.listFiles();
// seine Ausgabe
for (int i = 0; i < files.length; i++) {
Datei file = files[i];
addFile(type, fileNamePattern, set, file, period);
// Rekursiv suchen und rekursiv zur Liste hinzufügen, wenn es sich um ein Verzeichnis handelt
if (isRecursive && file.isDirectory()) {
listFiles(file.getAbsolutePath(), fileNamePattern,
Typ, isRecursive, Punkt);
}
}
return (File[]) set.toArray(new File[set.size()]);
}
private void addFile(int type, String match, TreeSet set,
Datei file,int period) {
Schalter (Typ) {
Fall TYPE_FILE:
if (!file.isFile()) {
zurückkehren;
}
brechen;
Fall TYPE_DIR:
if (!file.isDirectory()) {
zurückkehren;
}
brechen;
}
if (match != null && !file.getName().matches(match)) {
zurückkehren;
}
// Wenn eine Angabe vorliegt, ob die angegebene Anzahl an Tagen vergangen ist
if (Punkt != 0) {
// Datum der Dateiaktualisierung
Datum lastModifiedDate = neues Datum(file.lastModified());
String lastModifiedDateStr = new SimpleDateFormat(“yyyyMMdd”)
.format(lastModifiedDate);
// Angegebenes Datum (berechnet in Millisekunden pro Tag)
long oneDayTime = 24L * 60L * 60L * 1000L;
long periodTime = oneDayTime * Math.abs(period);
Datum angegebenDate =
neues Datum(System.currentTimeMillis() – periodTime);
String designedDateStr = new SimpleDateFormat(“yyyyMMdd”)
.format(designatedDate);
if (Periode > 0) {
if (lastModifiedDateStr.compareTo(designatedDateStr) < 0) {
zurückkehren;
}
} anders {
if (lastModifiedDateStr.compareTo(designatedDateStr) > 0) {
zurückkehren;
}
}
}
// In der Liste speichern, wenn alle Bedingungen erfüllt sind
set.add(file);
}
/** Verwenden Sie TreeSet, um alphabetisch zu sortieren. */
private TreeSet set = new TreeSet();
/**
* Wenn Sie die Instanz nach der Erstellung weiterhin verwenden möchten, verwenden Sie diese Methode.
* Anruf muss gelöscht werden.
* Beispiel)
* FileSearch search = new FileSearch();
* File[] f1 = search.listFiles(C:/filelist/“, „*.java“);
* search.clear();
* File[] f2 = search.listFiles(“C:/filelist/”, “*.jsp”);
*/
public void clear(){
set.clear();
}
}
Ausführungsergebnis
Um das Beispielprogramm zu überprüfen, habe ich ein Dateilistenverzeichnis erstellt und die folgenden Dateien vorbereitet.
Der Dateiname und das Aktualisierungsdatum werden angezeigt.
*Bitte beachten Sie, dass es sich um das aktuelle Datum handelt2007/08/18Angenommen, es ist so.
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
◆Ausführungsbeispiel
System.out.println(“\n●Alle Dateien abrufen“);
File[] files = search.listFiles(path, null);
printFileList(files);
search.clear();
System.out.println(“\n●Datei mit der Erweiterung „java“ abrufen“);
files = search.listFiles(path, „*.java“);
printFileList(files);
search.clear();
System.out.println(“\n●Alle Dateien und Verzeichnisse abrufen“);
files = search.listFiles(path, null,search.TYPE_FILE_OR_DIR, true, 0);
printFileList(files);
search.clear();
System.out.println(“\n●Aktualisierung der Dateien innerhalb von 2 Tagen ab dem aktuellen Datum erhalten”);
files = search.listFiles(path, null,search.TYPE_FILE, true, 2);
printFileList(files);
search.clear();
System.out.println(“\n●Alte Dateien abrufen, die älter als 30 Tage ab dem aktuellen Datum sind”);
files = search.listFiles(path, null,search.TYPE_FILE, true, -30);
printFileList(files);
search.clear();
}
private static void printFileList(File[] files) {
for (int i = 0; i < files.length; i++) {
Datei file = files[i];
System.out.println((i + 1) + „:“ + Datei);
}
}
◆Ausgabeergebnis
●Alle Dateien abrufen 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 ●Dateien mit der Erweiterung Java 1 abrufen: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc .java 4: C:\filelist\dir\ddd.java ●Alle Dateien und Verzeichnisse abrufen 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 ●Dateien, die innerhalb von 2 Tagen ab dem aktuellen Datum aktualisiert wurden. Erhalten Sie 1: C:\filelist\aaa. Java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ddd.java 4: C:\filelist\dir\eee.jpg ●Aktuelles Datum Alte Dateien abrufen, die älter als 30 Tage sind von 1: C: \filelist\dir\ccc.java