Après java IO et NIO, passez en revue NIO.2. !!
IO : https://qiita.com/liguofeng29/items/e08dc21b16c0057f601e NIO : https://qiita.com/liguofeng29/items/c827af3d62f219e17755
En termes simples, il s'agit d'une amélioration par rapport au NIO existant.
Nom de l'API | Aperçu |
---|---|
Path | Représente une route indépendante de la plate-forme |
Paths | Classe d'utilitaire de chemin (Pour l'acquisition d'instances Path(get)N'était qu'une méthode) |
Files | Classe d'utilitaire de fichier |
Chat: les chemins et les fichiers suivent les règles de dénomination cohérentes de Java.
Path, Paths
Exemple de chemin(Je voulais l'obtenir avec markdown)
private static void showPath(Path path) {
System.out.println("|Contenu de l'acquisition|résultat|");
System.out.println("|---|---|");
System.out.printf("|%s | %s |\r\n", "Nombre d'éléments", path.getNameCount());
System.out.printf("|%s | %s |\r\n", "Nom d'élément spécifié", path.getName(0));
System.out.printf("|%s | %s |\r\n", "nom de fichier", path.getFileName());
System.out.printf("|%s | %s |\r\n", "Nom du système de fichiers", path.getFileSystem());
System.out.printf("|%s | %s |\r\n", "parent", path.getParent());
System.out.printf("|%s | %s |\r\n", "racine", path.getRoot());
System.out.printf("|%s | %s |\r\n", "Est-ce une passe absolue?", path.isAbsolute());
}
Path,Paths
private static void path_test() {
//Chemin relatif
Path relativePath = Paths.get(".", "NIO2", "sub", "nio2-file.txt");
System.out.println("----Chemin relatif----");
showPath(relativePath);
//Chemin absolu
System.out.println("----Chemin absolu----");
showPath(relativePath.toAbsolutePath());
}
Contenu de l'acquisition | résultat |
---|---|
Nombre d'éléments | 4 |
Nom d'élément spécifié | . |
nom de fichier | nio2-file.txt |
Nom du système de fichiers | sun.nio.fs.WindowsFileSystem@6e0be858 |
parent | .\NIO2\sub |
racine | null |
Est-ce une passe absolue? | false |
Contenu de l'acquisition | résultat |
---|---|
Nombre d'éléments | 8 |
Nom d'élément spécifié | workspace |
nom de fichier | nio2-file.txt |
Nom du système de fichiers | sun.nio.fs.WindowsFileSystem@6e0be858 |
parent | C:\workspace\git\java-projects\java-sample.\NIO2\sub |
racine | C:\ |
Est-ce une passe absolue? | true |
Files
nio2-src.txt
1ère ligne, AIC
Deuxième ligne, UTF-8?
3e ligne
Échantillon de fichiers(Je voulais l'obtenir avec markdown)
private static void testFiles(Path path) {
System.out.println("|Contenu de l'acquisition|résultat|");
System.out.println("|---|---|");
try {
System.out.printf("|%s | %s |\r\n", "Est-ce un annuaire?", Files.isDirectory(path));
System.out.printf("|%s | %s |\r\n", "Caché", Files.isHidden(path));
System.out.printf("|%s | %s |\r\n", "Est-ce un annuaire?", Files.isWritable(path));
System.out.printf("|%s | %s |\r\n", "La taille est", Files.size(path));
System.out.printf("|%s | " , "Obtenir le contenu du fichier");
Files.lines(path).forEach(line -> {
System.out.printf("%s<br>" , line);
});
System.out.printf("|\r\n");
System.out.printf("|%s | " , "Obtenir les éléments du répertoire");
Files.list(path.getParent()).forEach(p -> {
System.out.printf("%s<br>" , p);
});
System.out.printf("|\r\n");
System.out.printf("|%s | %s |\r\n", "Capacité de stockage", Files.getFileStore(path).getTotalSpace() / 1024 / 1024 / 1024 + "GB");
System.out.printf("|%s | %s |\r\n", "Capacité disponible", Files.getFileStore(path).getUsableSpace() / 1024 / 1024 / 1024 + "GB");
System.out.printf("|%s | %s |\r\n", "Capacité non allouée", Files.getFileStore(path).getUnallocatedSpace() / 1024 / 1024 / 1024 + "GB");
System.out.printf("|%s | %s |\r\n", "Existe-t-il", Files.exists(path));
Files.delete(path);
System.out.printf("|%s | %s |\r\n", "effacer", "Supprimé");
System.out.printf("|%s | %s |\r\n", "Existe-t-il", Files.exists(path));
} catch (IOException e) {
e.printStackTrace();
}
}
Contenu de l'acquisition | résultat |
---|---|
Est-ce un annuaire? | false |
Caché | false |
Est-ce un annuaire? | true |
La taille est | 64 |
Obtenir le contenu du fichier | 1ère ligne, AIC Deuxième ligne, UTF-8? 3e ligne |
Obtenir les éléments du répertoire | .\NIO2\nio2-desc.txt .\NIO2\nio2-src.txt .\NIO2\sub |
Capacité de stockage | 111GB |
Capacité disponible | 54GB |
Capacité non allouée | 54GB |
Existe-t-il | true |
effacer | Supprimé |
Existe-t-il | false |
File#WalkTree Avec les E / S existantes, j'ai dû implémenter moi-même l'analyse récursive, et le code était compliqué et pas facile à utiliser.
Dans la version 1.7, Files # walkFileTree permet une analyse récursive.
callback | Aperçu |
---|---|
preVisitDirectory | Se produit avant l'accès au répertoire |
visitFile | Se produit avant l'accès au répertoire |
visitFileFailed | Se produit avant l'accès au répertoire |
postVisitDirectory | Se produit après l'accès au répertoire |
FileVisitResult | Aperçu |
---|---|
CONTINUE | continuer |
SKIP_SIBLINGS | Après avoir continué, le fichier correspondant,Ne pas analyser la hiérarchie des frères du répertoire |
SKIP_SUBTREE | Après avoir continué, le fichier correspondant,Ne pas analyser la hiérarchie enfant du répertoire |
TERMINATE | walk(balayage)Quitter |
Il y avait des exemples de walkFileTree ici et là, je vais donc les omettre!
Files#walk En 1.8, Files # walk est pratique!
Files.walk
Files.walk(Paths.get(".", "NIO2"), FileVisitOption.FOLLOW_LINKS)
//Permuter le répertoire et le fichier
.sorted(Comparator.reverseOrder())
//Confirmation de la cible de suppression
.peek(System.out::println)
//Effacer
.forEach(path -> {
try {
Files.delete(path);
} catch (IOException e) {
e.printStackTrace();
}
});
WatchService C'est un mécanisme pour surveiller les changements de fichiers. De manière traditionnelle, la mise en œuvre possible est
WatchService facilite la création de fichiers.
Échantillon WatchService
try {
WatchService watchService = FileSystems.getDefault().newWatchService();
Paths.get(".").register(
watchService,
StandardWatchEventKinds.ENTRY_CREATE, //CRÉER un moniteur
StandardWatchEventKinds.ENTRY_DELETE, //DELETE surveillance
StandardWatchEventKinds.ENTRY_MODIFY //MODIFIER la surveillance
);
System.out.println("-----regarder démarrer-----");
while (true) {
//Faire attendre
WatchKey key = watchService.take();
key.pollEvents().stream()
.forEach(
watchEvent -> {
System.out.println("Type d'occurrence: " + watchEvent.kind().name());
System.out.println("Nom de la cible: " + watchEvent.context());
});
//Suivi suivant
if (!key.reset()) {
break;
}
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
En gros, il s'agit d'une implémentation de FileAttributeView, et il semble que vous puissiez utiliser des attributs détaillés.
Exemple BasicFileAttributeView
Path path = Paths.get(".", "NIO2", "nio2-src.txt");
BasicFileAttributeView view = Files.getFileAttributeView(path, BasicFileAttributeView.class);
BasicFileAttributes attributes = view.readAttributes();
System.out.println("Dernier accès: " + attributes.lastAccessTime());
System.out.println("Dernière heure de correction: " + attributes.lastModifiedTime());
Recommended Posts