{"id":942,"date":"2018-09-17T18:40:44","date_gmt":"2018-09-17T09:40:44","guid":{"rendered":"https:\/\/chat-messenger.com\/?p=942"},"modified":"2018-12-23T01:53:04","modified_gmt":"2018-12-22T16:53:04","slug":"filesearch","status":"publish","type":"post","link":"https:\/\/chat-messenger.com\/de\/blog\/java\/dateisuche","title":{"rendered":"Java sucht rekursiv nach Dateien"},"content":{"rendered":"<h2 class=\"common_title\"><a name=\"0\"><strong>Java<\/strong> <strong>Verzeichnis<\/strong>aus<strong>rekursiv<\/strong>Suchen Sie nach Dateien in<\/a><\/h2>\n<p>\n<strong>Java<\/strong> Hier stellen wir ein Beispielprogramm vor, das rekursiv nach Dateien in einem bestimmten Verzeichnis, einschlie\u00dflich Unterverzeichnissen, sucht und eine Liste von Dateien erh\u00e4lt, die den Suchbedingungen entsprechen.<br \/>\nDiese f\u00fchren die gleiche Verarbeitung durch wie der UNIX-Befehl ls -R und der Windows-Befehl dir \/s.<br \/>\nSie k\u00f6nnen auch * als Platzhalterzeichen im Dateinamen f\u00fcr die Suche angeben oder regul\u00e4re Ausdr\u00fccke f\u00fcr die Suche verwenden.<\/p>\n<p>Als Anwendungsbeispiel wird im folgenden Fall das Verzeichnis filelist rekursiv einschlie\u00dflich der Unterverzeichnisse durchsucht, um eine Liste von Dateien mit der Erweiterung java zu erhalten.\n<\/p>\n<div class=\"point\">\nFileSearch search = new FileSearch();<br \/>\nFile[] files = search.listFiles(\u201cC:\/filelist\/\u201d, \u201e*.java\u201c);\n<\/div>\n<p><script type=\"text\/javascript\" src=\"https:\/\/chat-messenger.com\/js\/common.js?dd12sssas2223\" charset=\"UTF-8\"><\/script><br \/>\n<script type=\"text\/javascript\"> writePR(); <\/script><\/p>\n<h2 class=\"common_title\"><a name=\"1\">Beispielprogramm<\/a><\/h2>\n<p><textarea readonly=\"readonly\" style=\"font-size: 13px; height: 400px;\" class=\"src\" onclick=\"this.focus();this.select()\">import java.io.File;<br \/>\nimport java.text.SimpleDateFormat;<br \/>\nimport java.util.Date;<br \/>\nimport java.util.TreeSet;<\/p>\n<p>\/**<br \/>\n *<br \/>\n *\/<br \/>\n\u00f6ffentliche Klasse FileSearch {<\/p>\n<p>    \u00f6ffentliches statisches final int TYPE_FILE_OR_DIR = 1;<br \/>\n    \u00f6ffentliches statisches final int TYPE_FILE = 2;<br \/>\n    \u00f6ffentliches statisches final int TYPE_DIR = 3;<\/p>\n<p>    \/**<br \/>\n     * Aus dem angegebenen Verzeichnis [directoryPath],<br \/>\n     * Durchsuchen Sie die zu durchsuchende Datei [Dateiname] rekursiv und finden Sie die entsprechende Datei.<br \/>\n     * Gibt eine Liste von Dateiobjekten zur\u00fcck.<br \/>\n     *<br \/>\n     * Beispiel)<br \/>\n     * File[] files =listFiles(\u201cC:\/filelist\/\u201d, \u201e*.java\u201c);<br \/>\n     * Das obige Beispiel durchsucht das Verzeichnis filelist rekursiv und<br \/>\n     * Holen Sie sich eine Liste von Dateien mit der Erweiterung Java.<br \/>\n     *<br \/>\n     * @paramdirectoryPath Pfad, der das zu durchsuchende Verzeichnis darstellt<br \/>\n     * @param fileName Dateiname, nach dem gesucht werden soll<br \/>\n     * Sie k\u00f6nnen * als Platzhalterzeichen im Dateinamen angeben.<br \/>\n     * @return Dateiobjekt, das der Suche entspricht<br \/>\n     *\/<br \/>\n    \u00f6ffentliche Datei[] listFiles(String Verzeichnispfad, String Dateiname) {<br \/>\n        \/\/ Konvertieren Sie * als Platzhalterzeichen in einen regul\u00e4ren Ausdruck<br \/>\n        if (fileName != null) {<br \/>\n            fileName = fileName.replace(\u201c.\u201d, \u201e\\\\.\u201c);<br \/>\n            fileName = fileName.replace(\u201c*\u201c, \u201e.*\u201c);<br \/>\n        }<br \/>\n        return listFiles(directoryPath, fileName, TYPE_FILE, true, 0);<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Aus dem angegebenen Verzeichnis [directoryPath], angegeben als regul\u00e4rer Ausdruck<br \/>\n     * Rekursiv nach der zu durchsuchenden Datei suchen [fileNamePattern],<br \/>\n     * Gibt eine Liste der anwendbaren Dateiobjekte zur\u00fcck.<br \/>\n     *<br \/>\n     * Sie k\u00f6nnen die Suchbedingung auch verwenden, um festzustellen, ob das Aktualisierungsdatum der Datei die angegebene Anzahl von Tagen \u00fcberschritten hat.<br \/>\n     * Kann angegeben werden.<br \/>\n     *<br \/>\n     * Beispiel)<br \/>\n     * Datei[] Dateien =<br \/>\n     * listFiles(\u201cC:\/filelist\/\u201d, \u201c*.java\u201d,TYPE_FILE, true, 2);<br \/>\n     * Im obigen Beispiel wird die Verzeichnisdateiliste rekursiv durchsucht und vor weniger als 7 Tagen aktualisiert.<br \/>\n     * Holen Sie sich eine Liste der Dateien mit der Erweiterung Java.<br \/>\n     *<br \/>\n     * @paramdirectoryPath Pfad, der das zu durchsuchende Verzeichnis darstellt<br \/>\n     * @param fileNamePattern Dateiname, nach dem gesucht werden soll [regul\u00e4rer Ausdruck]<br \/>\n     * @param Typ Das entsprechende Dateiobjekt wird durch [Typ] angegeben.<br \/>\n     * Folgendes kann angegeben werden<br \/>\n     * TYPE_FILE_OR_DIR\u30fb\u30fb\u30fbDatei und Verzeichnis<br \/>\n     * TYPE_FILE\u30fb\u30fb\u30fbDatei<br \/>\n     * TYPE_DIR\u30fb\u30fb\u30fbVerzeichnis<br \/>\n     * @param isRecursive true f\u00fcr rekursive Suche<br \/>\n     * @param period Suche nach Dateien, deren Aktualisierungsdatum die angegebene Anzahl von Tagen \u00fcberschritten hat.<br \/>\n     * Kann eingestellt werden, ob oder nicht<br \/>\n     * Gilt nicht, wenn 0<br \/>\n     * Wenn 1 oder mehr, werden Dateien nach der angegebenen Anzahl von Tagen durchsucht<br \/>\n     * Wenn kleiner als -1, werden Dateien gesucht, die \u00e4lter als die angegebene Anzahl von Tagen sind<br \/>\n     * @return Dateiobjekt, das der Suche entspricht<br \/>\n     *\/<br \/>\n    public File[] listFiles(String VerzeichnisPfad,<br \/>\n            String fileNamePattern, Typ int,<br \/>\n            boolean isRecursive, int period) {<\/p>\n<p>        Dateiverzeichnis = neue Datei (Verzeichnispfad);<br \/>\n        if (!dir.isDirectory()) {<br \/>\n            wirft eine neue IllegalArgumentException<br \/>\n            (\u201ePfad angegeben in argument[\u201c + dir.getAbsolutePath() +<br \/>\n                    \u201e] ist kein Verzeichnis.\u201c);<br \/>\n        }<br \/>\n        File[] files = dir.listFiles();<br \/>\n        \/\/ seine Ausgabe<br \/>\n        for (int i = 0; i &lt; files.length; i++) {<br \/>\n            Datei file = files[i];<br \/>\n            addFile(type, fileNamePattern, set, file, period);<br \/>\n            \/\/ Rekursiv suchen und rekursiv zur Liste hinzuf\u00fcgen, wenn es sich um ein Verzeichnis handelt<br \/>\n            if (isRecursive &amp;&amp; file.isDirectory()) {<br \/>\n                listFiles(file.getAbsolutePath(), fileNamePattern,<br \/>\n                            Typ, isRecursive, Punkt);<br \/>\n            }<br \/>\n        }<br \/>\n        return (File[]) set.toArray(new File[set.size()]);<br \/>\n    }<\/p>\n<p>    private void addFile(int type, String match, TreeSet set,<br \/>\n            Datei file,int period) {<br \/>\n        Schalter (Typ) {<br \/>\n        Fall TYPE_FILE:<br \/>\n            if (!file.isFile()) {<br \/>\n                zur\u00fcckkehren;<br \/>\n            }<br \/>\n            brechen;<br \/>\n        Fall TYPE_DIR:<br \/>\n            if (!file.isDirectory()) {<br \/>\n                zur\u00fcckkehren;<br \/>\n            }<br \/>\n            brechen;<br \/>\n        }<br \/>\n        if (match != null &amp;&amp; !file.getName().matches(match)) {<br \/>\n            zur\u00fcckkehren;<br \/>\n        }<br \/>\n        \/\/ Wenn eine Angabe vorliegt, ob die angegebene Anzahl an Tagen vergangen ist<br \/>\n        if (Punkt != 0) {<br \/>\n            \/\/ Datum der Dateiaktualisierung<br \/>\n            Datum lastModifiedDate = neues Datum(file.lastModified());<br \/>\n            String lastModifiedDateStr = new SimpleDateFormat(\u201cyyyyMMdd\u201d)<br \/>\n                    .format(lastModifiedDate);<\/p>\n<p>            \/\/ Angegebenes Datum (berechnet in Millisekunden pro Tag)<br \/>\n            long oneDayTime = 24L * 60L * 60L * 1000L;<br \/>\n            long periodTime = oneDayTime * Math.abs(period);<br \/>\n            Datum angegebenDate =<br \/>\n                neues Datum(System.currentTimeMillis() \u2013 periodTime);<br \/>\n            String designedDateStr = new SimpleDateFormat(\u201cyyyyMMdd\u201d)<br \/>\n                    .format(designatedDate);<br \/>\n            if (Periode &gt; 0) {<br \/>\n                if (lastModifiedDateStr.compareTo(designatedDateStr) &lt; 0) {<br \/>\n                    zur\u00fcckkehren;<br \/>\n                }<br \/>\n            } anders {<br \/>\n                if (lastModifiedDateStr.compareTo(designatedDateStr) &gt; 0) {<br \/>\n                    zur\u00fcckkehren;<br \/>\n                }<br \/>\n            }<br \/>\n        }<br \/>\n        \/\/ In der Liste speichern, wenn alle Bedingungen erf\u00fcllt sind<br \/>\n        set.add(file);<\/p>\n<p>    }<\/p>\n<p>    \/** Verwenden Sie TreeSet, um alphabetisch zu sortieren. *\/<br \/>\n    private TreeSet set = new TreeSet();<\/p>\n<p>    \/**<br \/>\n     * Wenn Sie die Instanz nach der Erstellung weiterhin verwenden m\u00f6chten, verwenden Sie diese Methode.<br \/>\n     * Anruf muss gel\u00f6scht werden.<br \/>\n     * Beispiel)<br \/>\n     * FileSearch search = new FileSearch();<br \/>\n     * File[] f1 = search.listFiles(C:\/filelist\/\u201c, \u201e*.java\u201c);<br \/>\n     * search.clear();<br \/>\n     * File[] f2 = search.listFiles(\u201cC:\/filelist\/\u201d, \u201c*.jsp\u201d);<br \/>\n     *\/<br \/>\n    public void clear(){<br \/>\n    \tset.clear();<br \/>\n    }<br \/>\n}<br \/>\n<\/textarea><\/p>\n\n<h2 class=\"common_title\"><a name=\"2\">Ausf\u00fchrungsergebnis<\/a><\/h2>\n<p>\nUm das Beispielprogramm zu \u00fcberpr\u00fcfen, habe ich ein Dateilistenverzeichnis erstellt und die folgenden Dateien vorbereitet.<br \/>\n<br \/>\nDer Dateiname und das Aktualisierungsdatum werden angezeigt.<\/p>\n<p>*Bitte beachten Sie, dass es sich um das aktuelle Datum handelt<strong>2007\/08\/18<\/strong>Angenommen, es ist so.\n<\/p>\n<pre class=\"console\">C:\\filelist \u2502 aaa.java 2007\/08\/18 \u2502 bbb.java 2007\/08\/18 \u2514\u2500dir ccc.java 2007\/07\/17 ddd.java 2007\/08\/18 eee.jpg 2007\/08\/16\r\n<\/pre>\n<p>\u25c6Ausf\u00fchrungsbeispiel<br \/>\n<textarea readonly=\"readonly\" style=\"font-size: 13px; height: 400px;\" class=\"src\" onclick=\"this.focus();this.select()\">  public static void main(String[] args) {<br \/>\n      String path = &#8220;C:\\\\filelist&#8221;;<br \/>\n      FileSearch search = new FileSearch();<\/p>\n<p>      System.out.println(\u201c\\n\u25cfAlle Dateien abrufen\u201c);<br \/>\n      File[] files = search.listFiles(path, null);<br \/>\n      printFileList(files);<br \/>\n      search.clear();<\/p>\n<p>      System.out.println(\u201c\\n\u25cfDatei mit der Erweiterung \u201ejava\u201c abrufen\u201c);<br \/>\n      files = search.listFiles(path, \u201e*.java\u201c);<br \/>\n      printFileList(files);<br \/>\n      search.clear();<\/p>\n<p>      System.out.println(\u201c\\n\u25cfAlle Dateien und Verzeichnisse abrufen\u201c);<br \/>\n      files = search.listFiles(path, null,search.TYPE_FILE_OR_DIR, true, 0);<br \/>\n      printFileList(files);<br \/>\n      search.clear();<\/p>\n<p>      System.out.println(\u201c\\n\u25cfAktualisierung der Dateien innerhalb von 2 Tagen ab dem aktuellen Datum erhalten\u201d);<br \/>\n      files = search.listFiles(path, null,search.TYPE_FILE, true, 2);<br \/>\n      printFileList(files);<br \/>\n      search.clear();<\/p>\n<p>      System.out.println(\u201c\\n\u25cfAlte Dateien abrufen, die \u00e4lter als 30 Tage ab dem aktuellen Datum sind\u201d);<br \/>\n      files = search.listFiles(path, null,search.TYPE_FILE, true, -30);<br \/>\n      printFileList(files);<br \/>\n      search.clear();<br \/>\n  }<\/p>\n<p>  private static void printFileList(File[] files) {<br \/>\n      for (int i = 0; i &lt; files.length; i++) {<br \/>\n          Datei file = files[i];<br \/>\n          System.out.println((i + 1) + \u201e:\u201c + Datei);<br \/>\n      }<br \/>\n  }<br \/>\n<\/textarea><br \/>\n<br \/>\n\u25c6Ausgabeergebnis<\/p>\n<pre class=\"console\">\u25cfAlle 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 \u25cfDateien 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 \u25cfAlle 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 \u25cfDateien, 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 \u25cfAktuelles Datum Alte Dateien abrufen, die \u00e4lter als 30 Tage sind von 1: C: \\filelist\\dir\\ccc.java\r\n<\/pre>","protected":false},"excerpt":{"rendered":"<p>Java Rekursive Suche nach Dateien aus einem Verzeichnis In Java aus einem angegebenen Verzeichnis, einschlie\u00dflich Unterverzeichnissen [\u2026]<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":""},"categories":[19],"tags":[],"_links":{"self":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/942"}],"collection":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/comments?post=942"}],"version-history":[{"count":4,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/942\/revisions"}],"predecessor-version":[{"id":1881,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/942\/revisions\/1881"}],"wp:attachment":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/media?parent=942"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/categories?post=942"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/tags?post=942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}