Java java.nio.file.Files.newInputStream()Methode
newInputStream()Diese Methode wird verwendet, um eine Datei zu öffnen, und gibt einen Eingabestream zurück, um Daten aus der Datei zu lesen. Sie ist eine modernere Dateioperationsmethode, die von Java NIO bereitgestellt wird. Im Vergleich zur traditionellenFileInputStream, bietet sie eine bessere Leistung und einen größeren Funktionsumfang.
Methodendefinition
throws IOException
Parameterbeschreibung
Path path- Das Path-Objekt der zu öffnenden DateiOpenOption... options- Optionaler Parameter, gibt an, wie die Datei geöffnet wird
Rückgabewert
Gibt ein neuesInputStreamObjekt, das verwendet werden kann, um Daten aus der Datei zu lesen
Ausnahmen
IOException- Wenn beim Öffnen der Datei ein E/A-Fehler auftrittSecurityException- Wenn ein Sicherheitsmanager vorhanden ist und den Zugriff auf die Datei verweigert
Grundlegende Verwendung
Beispiel 1: Einfachste Dateilesung
Beispiel
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.Path;
import java.nio.file.Paths;
public class FilesExample {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try (InputStream inputStream = Files.newInputStream(path)) {
int data;
while ((data = inputStream.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
In diesem Beispiel:
- Erstellen Sie ein
PathObjekt, das auf die zu lesende Datei verweist - Verwenden Sie
Files.newInputStream()Methode zum Abrufen des Eingabestreams - Verwenden Sie eine try-with-resources-Anweisung, um sicherzustellen, dass der Stream automatisch geschlossen wird
- Dateiinhalt byteweise lesen und ausgeben
Erweiterte Nutzung
Verwenden des OpenOption-Parameters
OpenOptionDas Interface ermöglicht es uns, festzulegen, wie die Datei geöffnet wird. Die häufig verwendete Implementierungsklasse istStandardOpenOption, sie bietet die folgenden Optionen:
READ- Öffnet die Datei zum Lesen (Standard)WRITE- Öffnet die Datei zum SchreibenAPPEND- Öffnet die Datei zum AnhängenTRUNCATE_EXISTING- Kürzt die Datei, wenn sie bereits vorhanden istCREATE- Erstellt eine neue Datei, wenn sie nicht existiertCREATE_NEW- Erstellt eine neue Datei und schlägt fehl, wenn die Datei bereits existiertDELETE_ON_CLOSE- Löscht die Datei, wenn der Stream geschlossen wirdSPARSE- Gibt dem Dateisystem einen Hinweis, eine Sparse-Datei zu erstellenSYNC- Erfordert, dass jede Aktualisierung synchron auf den Datenträger geschrieben wirdDSYNC- Erfordert, dass jede Aktualisierung synchron auf den Datenträger geschrieben wird (nur Inhalt)
Beispiel 2: Festlegen von Öffnungsoptionen
Beispiel
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
public class FilesExampleWithOptions {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try (InputStream inputStream = Files.newInputStream(path,
StandardOpenOption.READ,
StandardOpenOption.DSYNC)) {
// Datei lesen...
} catch (IOException e) {
e.printStackTrace();
}
}
}
Vergleich mit herkömmlichem FileInputStream
Vorteile
- Modernere API: Basierend auf
PathSchnittstelle, besser in andere Teile von NIO integriert - Flexibler: Kann
OpenOptionmehrere Öffnungsmodi angeben - Bessere Leistung: In einigen Fällen, verglichen mit
FileInputStreamLeistung ist besser - Klarere Ausnahmebehandlung: Die Typen der ausgelösten Ausnahmen sind spezifischer
Nachteile
- Java 7+: Erfordert Java 7 oder höher
- Lernkurve: Entwickler, die mit traditioneller I/O vertraut sind, müssen sich anpassen
Best Practices
- Immer try-with-resources verwenden: Stellen Sie sicher, dass der Eingabestream ordnungsgemäß geschlossen wird
- Pufferung beim Umgang mit großen Dateien verwenden: Erwägen Sie, ihn in
BufferedInputStreamum die Leistung zu verbessern - Prüfen Sie, ob die Datei existiert: Bevor Sie versuchen, sie zu öffnen, können Sie
Files.exists(path) - Ausnahmen behandeln: Behandeln Sie mögliche ordnungsgemäß
IOException
Beispiel 3: Best-Practice-Beispiel
Beispiel
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.Path;
import java.nio.file.Paths;
public class FilesBestPractice {
public static void main(String[] args) {
Path path = Paths.get("largefile.dat");
if (!Files.exists(path)) {
System.err.println("Datei existiert nicht: " + path);
return;
}
try (InputStream rawStream = Files.newInputStream(path);
BufferedInputStream bufferedStream = new BufferedInputStream(rawStream)) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = bufferedStream.read(buffer)) != -1) {
// Die gelesenen Daten verarbeiten...
}
} catch (IOException e) {
System.err.println("Fehler beim Lesen der Datei: " + e.getMessage());
}
}
}
Zusammenfassung
Files.newInputStream()ist ein leistungsstarkes und flexibles Werkzeug zum Lesen von Dateien in Java NIO. Im Vergleich zum traditionellenFileInputStreames bietet mehr Funktionen und eine bessere Leistung. Durch die VerwendungOpenOptionvon Parametern und die Befolgung bewährter Verfahren können Sie effizienten und zuverlässigen Code zum Lesen von Dateien schreiben.
Java java.nio.file.Files