Überprüfen Sie nach Java IO und NIO NIO.2. !!
IO : https://qiita.com/liguofeng29/items/e08dc21b16c0057f601e NIO : https://qiita.com/liguofeng29/items/c827af3d62f219e17755
Einfach ausgedrückt ist es eine Verbesserung gegenüber dem bestehenden NIO.
API-Name | Überblick |
---|---|
Path | Stellt eine plattformunabhängige Route dar |
Paths | Pfad-Dienstprogrammklasse (Für die Erfassung von Pfadinstanzen(get)War nur eine Methode) |
Files | Datei-Dienstprogrammklasse |
Chat: Pfade und Dateien folgen den einheitlichen Namensregeln von Java.
Path, Paths
Pfadprobe(Ich wollte es mit Abschlag bekommen)
private static void showPath(Path path) {
System.out.println("|Erfassungsinhalte|Ergebnis|");
System.out.println("|---|---|");
System.out.printf("|%s | %s |\r\n", "Elementanzahl", path.getNameCount());
System.out.printf("|%s | %s |\r\n", "Angegebener Elementname", path.getName(0));
System.out.printf("|%s | %s |\r\n", "Dateiname", path.getFileName());
System.out.printf("|%s | %s |\r\n", "Name des Dateisystems", path.getFileSystem());
System.out.printf("|%s | %s |\r\n", "Elternteil", path.getParent());
System.out.printf("|%s | %s |\r\n", "Wurzel", path.getRoot());
System.out.printf("|%s | %s |\r\n", "Ist es ein absoluter Pass?", path.isAbsolute());
}
Path,Paths
private static void path_test() {
//Relativer Pfad
Path relativePath = Paths.get(".", "NIO2", "sub", "nio2-file.txt");
System.out.println("----Relativer Pfad----");
showPath(relativePath);
//Absoluter Pfad
System.out.println("----Absoluter Pfad----");
showPath(relativePath.toAbsolutePath());
}
Erfassungsinhalte | Ergebnis |
---|---|
Elementanzahl | 4 |
Angegebener Elementname | . |
Dateiname | nio2-file.txt |
Name des Dateisystems | sun.nio.fs.WindowsFileSystem@6e0be858 |
Elternteil | .\NIO2\sub |
Wurzel | null |
Ist es ein absoluter Pass? | false |
Erfassungsinhalte | Ergebnis |
---|---|
Elementanzahl | 8 |
Angegebener Elementname | workspace |
Dateiname | nio2-file.txt |
Name des Dateisystems | sun.nio.fs.WindowsFileSystem@6e0be858 |
Elternteil | C:\workspace\git\java-projects\java-sample.\NIO2\sub |
Wurzel | C:\ |
Ist es ein absoluter Pass? | true |
Files
nio2-src.txt
1. Zeile, AIC
Zweite Zeile, UTF-8?
3. Zeile
Beispiel für Dateien(Ich wollte es mit Abschlag bekommen)
private static void testFiles(Path path) {
System.out.println("|Erfassungsinhalte|Ergebnis|");
System.out.println("|---|---|");
try {
System.out.printf("|%s | %s |\r\n", "Ist es ein Verzeichnis?", Files.isDirectory(path));
System.out.printf("|%s | %s |\r\n", "Versteckt", Files.isHidden(path));
System.out.printf("|%s | %s |\r\n", "Ist es ein Verzeichnis?", Files.isWritable(path));
System.out.printf("|%s | %s |\r\n", "Die Größe ist", Files.size(path));
System.out.printf("|%s | " , "Dateiinhalt abrufen");
Files.lines(path).forEach(line -> {
System.out.printf("%s<br>" , line);
});
System.out.printf("|\r\n");
System.out.printf("|%s | " , "Verzeichniselemente abrufen");
Files.list(path.getParent()).forEach(p -> {
System.out.printf("%s<br>" , p);
});
System.out.printf("|\r\n");
System.out.printf("|%s | %s |\r\n", "Speicherkapazität", Files.getFileStore(path).getTotalSpace() / 1024 / 1024 / 1024 + "GB");
System.out.printf("|%s | %s |\r\n", "Verfügbare Kapazität", Files.getFileStore(path).getUsableSpace() / 1024 / 1024 / 1024 + "GB");
System.out.printf("|%s | %s |\r\n", "Nicht zugewiesene Kapazität", Files.getFileStore(path).getUnallocatedSpace() / 1024 / 1024 / 1024 + "GB");
System.out.printf("|%s | %s |\r\n", "Existiert es", Files.exists(path));
Files.delete(path);
System.out.printf("|%s | %s |\r\n", "löschen", "Gelöscht");
System.out.printf("|%s | %s |\r\n", "Existiert es", Files.exists(path));
} catch (IOException e) {
e.printStackTrace();
}
}
Erfassungsinhalte | Ergebnis |
---|---|
Ist es ein Verzeichnis? | false |
Versteckt | false |
Ist es ein Verzeichnis? | true |
Die Größe ist | 64 |
Dateiinhalt abrufen | 1. Zeile, AIC Zweite Zeile, UTF-8? 3. Zeile |
Verzeichniselemente abrufen | .\NIO2\nio2-desc.txt .\NIO2\nio2-src.txt .\NIO2\sub |
Speicherkapazität | 111GB |
Verfügbare Kapazität | 54GB |
Nicht zugewiesene Kapazität | 54GB |
Existiert es | true |
löschen | Gelöscht |
Existiert es | false |
File#WalkTree Bei vorhandenen E / A musste ich das rekursive Scannen selbst implementieren, und der Code war kompliziert und nicht einfach zu verwenden.
In 1.7 ermöglicht Files # walkFileTree das rekursive Scannen.
callback | Überblick |
---|---|
preVisitDirectory | Tritt vor dem Verzeichniszugriff auf |
visitFile | Tritt vor dem Verzeichniszugriff auf |
visitFileFailed | Tritt vor dem Verzeichniszugriff auf |
postVisitDirectory | Tritt nach dem Verzeichniszugriff auf |
FileVisitResult | Überblick |
---|---|
CONTINUE | fortsetzen |
SKIP_SIBLINGS | Nach dem Fortfahren die entsprechende Datei,Scannen Sie nicht die Geschwisterhierarchie des Verzeichnisses |
SKIP_SUBTREE | Nach dem Fortfahren die entsprechende Datei,Scannen Sie nicht die untergeordnete Verzeichnishierarchie |
TERMINATE | walk(Scannen)Beenden |
Es gab hier und da Beispiele von walkFileTree, also werde ich sie weglassen!
Files#walk In 1.8 ist Files # walk praktisch!
Files.walk
Files.walk(Paths.get(".", "NIO2"), FileVisitOption.FOLLOW_LINKS)
//Verzeichnis und Datei tauschen
.sorted(Comparator.reverseOrder())
//Bestätigung des Löschziels
.peek(System.out::println)
//Löschen
.forEach(path -> {
try {
Files.delete(path);
} catch (IOException e) {
e.printStackTrace();
}
});
WatchService Es ist ein Mechanismus zum Überwachen von Dateiänderungen. In traditioneller Weise ist die mögliche Implementierung
WatchService erleichtert das Erstellen von Dateien.
WatchService-Beispiel
try {
WatchService watchService = FileSystems.getDefault().newWatchService();
Paths.get(".").register(
watchService,
StandardWatchEventKinds.ENTRY_CREATE, //CREATE-Monitor
StandardWatchEventKinds.ENTRY_DELETE, //Überwachung LÖSCHEN
StandardWatchEventKinds.ENTRY_MODIFY //Überwachung ändern
);
System.out.println("-----Uhr starten-----");
while (true) {
//Warte noch
WatchKey key = watchService.take();
key.pollEvents().stream()
.forEach(
watchEvent -> {
System.out.println("Art des Auftretens: " + watchEvent.kind().name());
System.out.println("Zielname: " + watchEvent.context());
});
//Nächste Überwachung
if (!key.reset()) {
break;
}
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
In etwa handelt es sich um eine Implementierung von FileAttributeView, und es scheint, dass Sie detaillierte Attribute bedienen können.
BasicFileAttributeView-Beispiel
Path path = Paths.get(".", "NIO2", "nio2-src.txt");
BasicFileAttributeView view = Files.getFileAttributeView(path, BasicFileAttributeView.class);
BasicFileAttributes attributes = view.readAttributes();
System.out.println("Letzter Zugriff: " + attributes.lastAccessTime());
System.out.println("Letzte Korrekturzeit: " + attributes.lastModifiedTime());
Recommended Posts