„Hallo Amigo. Lange nicht gesehen.“

„Hallo, Bilaabo. Worüber wirst du reden?“

„Heute erzähle ich Ihnen von der Arbeit mit Dateien.  Java hat eine spezielle Klasse (File), mit der Sie Dateien auf einer Festplatte verwalten können. Für die Verwaltung von Dateiinhalten gibt es andere Klassen: FileInputStream, FileOutputStream usw. "

Datei, Dateien, Pfad - 1

„Interessant. Aber wenn Sie ‚Dateien verwalten‘ sagen, was meinen Sie damit?“

„Genau das erkläre ich jetzt. Dateien können erstellt, gelöscht, umbenannt werden und vieles mehr. Sie können ein File-Objekt praktisch an jede Klasse übergeben, die mit dem Inhalt einer Datei arbeitet (liest, schreibt, ändert). . Zum Beispiel:"

Sie können den Dateinamen direkt an FileInputStream übergeben
FileInputStream input = new FileInputStream("c:/path/a.txt");
Oder Sie können ein File-Objekt separat erstellen und es dann an FileInputStrea übergeben
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);

„Aber die zweite Option ist länger. Ich verstehe immer noch nicht, warum wir diese Dateiobjekte brauchen.“

„Bei diesem konkreten Beispiel haben Sie recht. „Dies ist kein Beispiel dafür, wie man es machen muss, sondern vielmehr, wie man es machen kann.“
Stellen Sie sich jedoch vor, Sie müssten eine Liste aller Dateien anzeigen, die sich in einem bestimmten Verzeichnis befinden. So kann dies mithilfe von File-Objekten erfolgen:

Code
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

„Ist listFiles() eine Methode, die eine Liste der Dateien in dem durch „c:/path/“ angegebenen Ordner zurückgibt?“

„Ja. Aber Programmierer sagen normalerweise ‚Verzeichnis‘. Der Begriff ‚Ordner‘ ist erst seit relativ kurzer Zeit gebräuchlich, aber im Prinzip sind beide Begriffe richtig und man kann sagen, was einem am besten gefällt.“

„OK. Und was macht getName ()? Gibt den Namen der Datei zurück? Was genau ist im Namen enthalten? Den vollständigen Namen inklusive Pfad oder nur den Namen der Datei selbst?“

„Nur der Name der Datei selbst. Für den vollständigen Pfad gibt es file.getAbsolutePath().“

„Welche anderen Methoden hat die File-Klasse?“

"Schau dir das an:"

Methode Beschreibung
boolean isDirectory() Ist das File-Objekt ein Verzeichnis?
boolean isFile() Ist das Objekt eine Datei?
long length() Gibt die Dateigröße/-länge in Bytes zurück.
boolean createNewFile() Erstellt eine neue, leere Datei, wenn noch keine Datei mit diesem Namen existiert.
boolean mkdir() Erstellt ein Verzeichnis. Der Name „mkdir“ kommt von „make Directory“.
boolean mkdirs() Erstellt ein Verzeichnis und alle seine Unterverzeichnisse.
boolean delete() Löscht die mit dem Objekt verknüpfte Datei. Handelt es sich bei dem Objekt um ein Verzeichnis, wird das Verzeichnis nur gelöscht, wenn darin keine Dateien vorhanden sind.
void deleteOnExit() Fügt die Datei einer speziellen Dateiliste hinzu, die beim Beenden des Programms automatisch gelöscht wird.
File createTempFile(
String prefix,
String suffix,
File directory)
Erstellt eine temporäre Datei mit einem zufällig generierten eindeutigen Namen, etwa „dasd4d53sd“.
Zusätzliche Parameter sind ein Namenspräfix und -suffix. Wenn kein Verzeichnis angegeben ist, wird die Datei in einem speziellen Betriebssystemverzeichnis für temporäre Dateien erstellt.
boolean exists() Gibt true zurück, wenn eine Datei mit demselben Namen auf der Festplatte vorhanden ist.
String getAbsolutePath() Gibt den vollständigen Pfad der Datei mit allen Unterverzeichnissen zurück.
String getCanonicalPath() Gibt den kanonischen Dateipfad zurück.
Konvertiert beispielsweise den Pfad „c:/dir/dir2/../a.txt“ in „c:/dir/a.txt“.
String[] list() Gibt ein Array mit den Namen der Dateien zurück, die in dem durch das aktuelle Objekt dargestellten Verzeichnis enthalten sind.
File[] listFiles() Gibt ein Array von Dateien zurück, die in dem Verzeichnis enthalten sind, das durch das aktuelle File-Objekt dargestellt wird.
long getTotalSpace() Gibt den Gesamtspeicherplatz (Anzahl der Bytes) auf der Festplatte zurück, auf der sich die Datei befindet.
long getFreeSpace() Gibt die Menge an freiem Speicherplatz (Anzahl der Bytes) auf der Festplatte zurück, auf der sich die Datei befindet.
boolean renameTo(File) Benennt die Datei um, dh der Inhalt der Datei erhält tatsächlich einen neuen Namen. Mit anderen Worten, Sie können die Datei „c:/dir/a.txt“ in „d:/out/text/b.doc“ umbenennen.
String getName() Gibt nur den Dateinamen ohne Pfad zurück.
String getParent() Gibt nur den Pfad (Verzeichnis) zur aktuellen Datei zurück, ohne den Namen selbst.
Path toPath() Gibt ein Path-Objekt zurück, das dem aktuellen File-Objekt entspricht.

„Whoa! Keine sehr kleine Liste, oder? Und es scheint, als ob man damit ziemlich viel machen kann: Dateien erstellen und löschen, sie umbenennen, …“

„Um das Verzeichnis der aktuellen Datei zu erhalten, muss ich getParent() aufrufen?“

„Ja, aber sie gibt einen String zurück – den Dateipfad – und kein File-Objekt. Tatsächlich dupliziert die File-Klasse fast alle ihre Methoden: Eine Version gibt einen String zurück, die andere – ein File-Objekt. Schauen Sie sich das an:“

File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();

Wenn Sie einen String mit dem Dateipfad haben und ein File- Objekt benötigen , verwenden Sie den Konstruktor. Wenn die Situation umgekehrt ist (Sie haben ein File- Objekt, benötigen aber einen String), dann verwenden Sie getAbsolutePath (). Zum Beispiel:"

String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();

"Habe es."

„Großartig. Dann ist hier eine kleine Aufgabe für Sie: Zeigen Sie die Namen aller Dateien an, die sich im selben Verzeichnis wie die aktuelle Datei befinden.“

„Nichts könnte einfacher sein. Schauen Sie hier:“

Code
//Some file
File originalFile = new File("c:/path/dir2/a.txt");

//An object representing the directory
File folder = originalFile.getParentFile();

//Print the file list on screen
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

„Hmm. Richtig.“

„Aber es ist ein wenig verwirrend, dass die gleiche Klasse – Datei – sowohl für die Datei als auch für das Verzeichnis verwendet wird. Das erscheint mir nicht sehr logisch.“

„Das hat aus historischen Gründen so geklappt. Ein Verzeichnis war früher eine spezielle ‚leere‘ Datei auf der Festplatte. Natürlich hat sich jetzt viel geändert, aber nicht alles. Das ist alles, was ich heute habe.“

„Danke für die interessante Lektion, Bilaabo.“