[Java] Schreiben Sie die von mir in der Vergangenheit aus java.io.File erstellten Funktionen mit NIO.2 neu.

Hintergrund

Wenn Sie Dateien und Verzeichnisse in Java bearbeiten möchten, werden im Allgemeinen die folgenden Klassen berücksichtigt.

Die File-Klasse gibt es schon lange. NIO.2 ist eine in Java 7 eingeführte Klasse und neuer als die File-Klasse.

Wenn Sie es also neu implementieren möchten, möchte ich NIO.2 verwenden.

Dieses Mal werde ich den Code vorstellen, den ich in java.io.File geschrieben und in NIO.2 neu geschrieben habe.

Zu einführende Funktionen

Existiert die Datei im angegebenen Verzeichnis?

Java 6 oder früher

import java.io.File;

public class Demo {
    public static void main(String[] args) {
        File file = new File("C:/temp/");

        //Holen Sie sich eine Liste der Dateinamen und überprüfen Sie die Existenz
        if (file.listFiles().length == 0) {
            System.out.println("Es gibt keine Datei.");
        } else {
            System.out.println("Es gibt eine Datei.");
        }
    }
}

Der Rückgabewert von File.listFiles () wird als Array vom Typ File zurückgegeben. Es ist ein Fluss, den man beurteilen muss, wenn man die Länge der Sequenz mit dieser Länge betrachtet.

Java 7 oder höher

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Demo {
    public static void main(String[] args) {
        Path path = Paths.get("C:/temp/");

        try {
            if (Files.list(path).findAny().isPresent()) {
                System.out.println("Es gibt eine Datei.");
            } else {
                System.out.println("Es gibt keine Datei.");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Files.list ruft die Einträge im Verzeichnis ab und gibt sie in Strem zurück.


```findany()```Gibt das erste optional gefundene Element zurück.
```ispresent()```Gibt false zurück, wenn optional einen Nullwert enthält, true, wenn er nicht null ist.

# Löschen Sie alle angegebenen Verzeichnisse einschließlich des Inhalts

## Java 6 oder früher

```java
import java.io.File;

public class Demo {
    public static void main(String[] args) {
        File dir = new File("C:/temp/");
        deleteDir(dir);
    }

    public static void deleteDir(File dir) {
        if (dir.exists() && dir.isDirectory()) {
            for (File child : dir.listFiles()) {
                if (child.isDirectory()) {
                    deleteDir(child);
                } else {
                    child.delete();
                }
            }
        }
        dir.delete();
    }
}

Java 8 oder höher

**Hinweis! ** Da ich Stream verwende, funktioniert es nur mit Java8 oder höher.

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Comparator;

public class Demo {
    public static void main(String[] args) {
        Path path = Paths.get("C:/temp/");

        //Löschen Sie alle Verzeichnisse
        try {
            Files.walk(path).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
            path.toFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Files.walk(path)Es kann also zu einer IOException kommen. Bitte werfen oder fangen.



#### **`Files.walk(path)Erhält eine Liste mit Unterverzeichnissen.`**
```walk(path)Erhält eine Liste mit Unterverzeichnissen.


#### **`sorted(Comparator.reverseOrder())Sortiert in absteigender Reihenfolge.`**
```reverseOrder())Sortiert in absteigender Reihenfolge.

 Dadurch werden die Dateien nach oben verschoben und die Verzeichnisse nach hinten sortiert.
 Anschließend wird der durch Filtern extrahierte Pfadtyp in den Dateityp konvertiert und in einer Schleife gelöscht.
 (Es tut mir leid. Ich kann es möglicherweise nicht gut erklären.)

 Sie können `` `Stream <Pfad>` `` in `` `List <Pfad>` `konvertieren, indem Sie die folgenden Schritte ausführen.

#### **`.collect(Collectors.toList())Einfach hinzufügen ...`**
List<Path> list = Files.walk(path).sorted(Comparator.reverseOrder()).collect(Collectors.toList());
for (Path p : list) {
    System.out.println(p);
}

Bonus

Es ist eine Funktion, die zufällig nach Versuch und Irrtum kam. Ich werde es vorstellen, weil es sehr viel ist.

Löschen Sie Dateien im angegebenen Verzeichnis

Java 8 oder höher

**Hinweis! ** Da ich Stream verwende, funktioniert es nur mit Java8 oder höher.

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Demo {
    public static void main(String[] args) {
        Path path = Paths.get("C:/temp/");

        //Löschen Sie Dateien im Verzeichnis(Unterverzeichnisse nicht löschen)
        try {
            Files.walk(path).filter(Files::isRegularFile).map(Path::toFile).forEach(File::delete);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

.filter(Files::isRegularFile)Ich überprüfe also, ob es sich um eine normale Datei handelt.


 Dadurch wird das Verzeichnis vom Löschen ausgeschlossen.

# Schließlich

 Ich bin noch neu in Java 8 Lambda-Ausdrücken, Streams, Optional usw.
 Das Gefühl, veraltet zu sein, ist erstaunlich, deshalb möchte ich etwas dagegen tun. Aber je mehr ich aufschaue, desto weniger verstehe ich und bin süchtig nach dem Sumpf ...


Recommended Posts

[Java] Schreiben Sie die von mir in der Vergangenheit aus java.io.File erstellten Funktionen mit NIO.2 neu.
[Java] Stellen Sie die Zeit im Browser mit jsoup ein
Textextraktion in Java aus PDF mit pdfbox-2.0.8
[Java] Beurteilung durch Eingabe von Zeichen in das Terminal
Aufrufen von Funktionen in großen Mengen mit Java Reflection
Lesen Sie die Paketerfassung, die von tcpdump mit Java erhalten wurde
Schreiben Sie den Code für java.io.File mit java.nio.Path und java.nio.Files neu
Adressiert, da Azure-Funktionen in Java nicht mehr funktionieren
Azure funktioniert in Java
Suchen Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java
JSON in Java und Jackson Teil 1 Gibt JSON vom Server zurück
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
Denken Sie über die Unterschiede zwischen Funktionen und Methoden nach (in Java)