Java java.nio.file.Files.newInputStream()Methode

Java File Java java.nio.file.Files


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

public static InputStream newInputStream(Path path, OpenOption... options)
    throws IOException

Parameterbeschreibung

  1. Path path- Das Path-Objekt der zu öffnenden Datei
  2. OpenOption... 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 auftritt
  • SecurityException- Wenn ein Sicherheitsmanager vorhanden ist und den Zugriff auf die Datei verweigert

Grundlegende Verwendung

Beispiel 1: Einfachste Dateilesung

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 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:

  1. Erstellen Sie einPathObjekt, das auf die zu lesende Datei verweist
  2. Verwenden SieFiles.newInputStream()Methode zum Abrufen des Eingabestreams
  3. Verwenden Sie eine try-with-resources-Anweisung, um sicherzustellen, dass der Stream automatisch geschlossen wird
  4. 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 Schreiben
  • APPEND- Öffnet die Datei zum Anhängen
  • TRUNCATE_EXISTING- Kürzt die Datei, wenn sie bereits vorhanden ist
  • CREATE- Erstellt eine neue Datei, wenn sie nicht existiert
  • CREATE_NEW- Erstellt eine neue Datei und schlägt fehl, wenn die Datei bereits existiert
  • DELETE_ON_CLOSE- Löscht die Datei, wenn der Stream geschlossen wird
  • SPARSE- Gibt dem Dateisystem einen Hinweis, eine Sparse-Datei zu erstellen
  • SYNC- Erfordert, dass jede Aktualisierung synchron auf den Datenträger geschrieben wird
  • DSYNC- Erfordert, dass jede Aktualisierung synchron auf den Datenträger geschrieben wird (nur Inhalt)

Beispiel 2: Festlegen von Öffnungsoptionen

Beispiel

import java.io.IOException;
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

  1. Modernere API: Basierend aufPathSchnittstelle, besser in andere Teile von NIO integriert
  2. Flexibler: KannOpenOptionmehrere Öffnungsmodi angeben
  3. Bessere Leistung: In einigen Fällen, verglichen mitFileInputStreamLeistung ist besser
  4. Klarere Ausnahmebehandlung: Die Typen der ausgelösten Ausnahmen sind spezifischer

Nachteile

  1. Java 7+: Erfordert Java 7 oder höher
  2. Lernkurve: Entwickler, die mit traditioneller I/O vertraut sind, müssen sich anpassen

Best Practices

  1. Immer try-with-resources verwenden: Stellen Sie sicher, dass der Eingabestream ordnungsgemäß geschlossen wird
  2. Pufferung beim Umgang mit großen Dateien verwenden: Erwägen Sie, ihn inBufferedInputStreamum die Leistung zu verbessern
  3. Prüfen Sie, ob die Datei existiert: Bevor Sie versuchen, sie zu öffnen, können SieFiles.exists(path)
  4. Ausnahmen behandeln: Behandeln Sie mögliche ordnungsgemäßIOException

Beispiel 3: Best-Practice-Beispiel

Beispiel

import java.io.BufferedInputStream;
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 File Java java.nio.file.Files

Andere Erweiterungen