Hey, willkommen zurück. Scott Stanlick, hier. In diesem Modul werfen wir einen Blick auf file.io. Diese Lektionen behandeln die alte Art, Dinge zu tun, die neue Art, Dinge zu tun. Wir werden einen Blick auf die Erstellung werfen und Manipulation der temporären Speicherung, und wir zeigen, wie man einen Dateifinder schreibt unter Verwendung von Tiefensuchtechniken. In dieser ersten Lektion werden wir vergleichen und kontrastiere die Art und Weise, wie die Dinge für immer waren so wie es jetzt bei IO ist. Also, wenn Sie hier drüben bemerken, ein paar Dinge, die ich nur erwähnen möchte. IO gibt es seit Java 1.0, und es war nicht die größte IO-Bibliothek. Es hatte einige Probleme. Und diese Probleme wurden seitdem angegangen. Ich verwende etwas namens java.nio oder das neue IO. Seit Java 7 können Sie zwischen beiden wählen. Im NIO bringt diese neue Bibliothek die gleiche Funktionalität die wir mit java.io hatten, aber mit massiven Verbesserungen. Und es gibt auch einen einfachen Weg mühelos zwischen den beiden zu migrieren. Das alte java.io wird nicht für neue Entwicklungen empfohlen, aber es gibt keine Pläne, es abzulehnen. Es geht nirgendwo hin weil es überall verwendet wird. Also werden wir uns hier ein paar Arten ansehen, eine namens java.nio.file.Path, was alles tun wird, was die Datei getan hat, und generell besser. Also lasst uns einfach direkt hier reinspringen. Wenn wir also einmal eine Datei erstellen wollten, wir würden neue Datei sagen. Und dann könnten wir umkehren und die Datei löschen mit file.delete. Und vielleicht hat es funktioniert, vielleicht nicht, aber das Feedback war glanzlos, um sicher zu sein. Es gab schlechte Fehlerbehandlung, wenige Ausnahmen. Das Ergebnis könnte sein, dass es nicht existiert. Sie haben keine Berechtigungen. Es gab viele Mängel bei dieser API. Die neue Art, dies zu tun, ist, Path.of Foo.java zu sagen. Und wenn Sie versuchen, die Methode delete für die Klasse Files zu verwenden und diesen Pfad übergeben, und die Datei existiert nicht, Sie werden eine wirklich nette Ausnahme bekommen. Zum Beispiel kann es eine NoSuchFileException werfen wenn es nicht existiert. Aber es gibt noch viele andere Ausnahmen die dieser Typ Ihnen präsentieren kann die dir ganz gut erklären, warum es vielleicht nicht funktioniert hat. Die Unterstützung zwischen dem neuen IO und dem Legacy ist, wie ich bereits erwähnt habe, mühelos. Die alte Welt war also, ich möchte eine neue Datei erstellen. Sie können ihm die Teile übergeben, den Ordner /java, die Datei Foo.java. Das Gleiche gilt für Paths.get. Paths ist die neue Art, dies zu tun. Wenn Sie zwischen alt und neu tauschen möchten, die Datei hat einen toPath, So lässt sich Altes neu aussehen. Und das neue hat eine toFile, Das ist eine Möglichkeit, das Neue alt aussehen zu lassen. Und so je nach Kontext, Sie müssen möglicherweise die eine oder andere Technik anwenden, aber Sie haben beide jederzeit verfügbar. Es gab eine Möglichkeit, Metadaten aus einer Datei zu erhalten. Daran hat sich also nicht viel geändert. Es ist nur etwas anders in der Art und Weise, wie Sie es verwenden. Also sagen wir Datei, das ist die alte Welt, und wir sagen Pfad, das ist die neue Welt. Und so haben wir eine Datei und einen Pfad, und das java.io sah so aus. Dies waren die beteiligten Methoden beim Abrufen von Metadaten über eine Datei. Liegt es in einem Verzeichnis? Kann ich es lesen, schreiben? Ist es ausführbar, ist es versteckt? All diese Ideen. Und mit der neuen API verwenden wir die Files-Klasse. Die Files-Klasse hat viele Methoden darauf, die wir verwenden, wenn wir den Pfad in diese Methoden übergeben, und es wird uns im Grunde die gleichen Dinge sagen. Aber diese, sie sind viel robuster in der Art, wie sie entworfen wurden. Es ist neuer und wir haben unsere Lektionen gelernt. So hätten wir also vielleicht mit einer Datei gearbeitet mit java.io, also eine neue Datei. Und ich werde es hier setzen in src/test/java/com/acme/io. Ich muss hier irgendwo so einen Ordner haben. Ja, com.acme.io. Ich kann nach einem kanonischen Dateinamen fragen. Ich kann fragen, ob es existiert oder nicht. Und dann kann ich es auch in die neue Welt umwandeln und bestätigen Sie es erneut. Also los geht's, Files.exist, file.toPath. Also nehme ich jetzt den alten und verwandle ihn in einen Pfad. Und das ist sehr ähnlich. Ich erstelle dieselbe Datei, und ich werde nach seinem absoluten Pfad fragen und ob es existiert. Und ebenso kann ich konvertieren aus der neuen Welt zurück in eine Datei, damit ich es in Legacy umwandeln kann und führen Sie die gleiche Überprüfung erneut durch. Im java.io-Bereich ist das Vermächtnis, Es gab eine Methode namens listFiles. Wenn Sie ein Verzeichnis bekommen wollten von allen Dateien in einem Verzeichnis würden Sie listFiles sagen, und es würde ein Array zurückgeben, einen Dateityp. Die neue Welt ist ein bisschen anders. Sie sagen Files.newDirectoryStream, und java.util.streams haben wir uns bereits angesehen mit den Filtern und Karten und Übersetzungen und all das gute Zeug. Files.newDirectoryStream nimmt Ihren Pfad zur Quelle und gibt hier einen Verzeichnisstrom namens Pfade zurück. Und in diesem Fall können wir für jedes Element im Stream sagen: wir werden es ausdrucken. Das ist also nur der neue Weg die Dateien aufzulisten, die in einem Verzeichnis vorhanden sind. Ich weiß es zu schätzen, dass du zusiehst.