So lesen Sie aus einer lokalen Datei in Java

So lesen Sie aus einer lokalen Datei in Java
Eine lokale Datei befindet sich in der Festplatte oder auf einem am USB -Anschluss angeschlossenen Flash -Laufwerk. Dateien können in zwei Kategorien eingeteilt werden: Textdateien und Byte -Dateien. Typische Textdateien sind Dateien, die von einem Texteditor erstellt wurden. Die Bilddatei ist ein Beispiel für eine Byte -Datei, die hauptsächlich aus rohen Bytes besteht.

Dieser Artikel gibt eine grundlegende Erläuterung, wie lokale Text- und Byte -Dateien in Java gelesen werden können. Verwenden Sie zum Lesen einer Textdatei die Klasse, FileReader. Verwenden Sie zum Lesen einer Byte -Datei die Klasse, FileInputStream. Beide Klassen sind in der Java.io.* Paket, das importiert werden sollte. Die erste Hälfte dieses Artikels befasst sich mit dem Lesen von Textdateien, und die zweite Hälfte befasst sich mit dem Lesen von Byte -Dateien.

Textdateien lesen

Konstruktion eines FileReader -Objekts

Erstellen Sie vor dem Erlernen des Erstellens eines FileReader -Objekts die folgende Textdatei mit einem Texteditor und drücken Sie die Eingabetaste am Ende der ersten beiden Zeilen:

A text 1 a text 1 a text 1 a text 1 a text 1
B Text 2 B Text 2 B Text 2 B Text 2 B Text 2
C Text 3 C Text 3 C Text 3 C Text 3 C Text 3

Wenn die Eingabetaste am Ende der letzten Zeile nicht gedrückt wird, kann der Texteditor eine neue Zeile hinzufügen, wenn die Datei gespeichert wird. Speichern Sie nach dem Erstellen des vorherigen Textes den Inhalt mit dem Namen Temperatur.TXT, verwendete das Texteditor -Menü user@host: ~/dir1 $ in das Verzeichnis. Dies bedeutet, dass das Verzeichnis DIR1 erstellt werden sollte.

Erstellung eines Dateileser

Die Filereader -Klasse hat fünf Konstruktoren. In diesem Artikel wird nur einer dargestellt (um den Artikel kurz zu halten). Die Syntax für den Konstruktor ist:

öffentliche Fileeader (String Dateiname) löst FileNotFoundException aus

Dies wird im Speicher erstellt. Ein Stream (Kopie) der Datei, deren Pfad und Name der Zeichenfolge, Dateiname, ist. Es wirft eine FilenotfoundException aus, wenn die Datei nicht im angegebenen Verzeichnis gefunden wird. Nach dem Kopieren des Dateiinhalts muss das geöffnete Dateiobjekt geschlossen werden, um alle mit der geöffneten Datei verbundenen Systemressourcen zu veröffentlichen.

Wichtige Methoden der Fileraderin

Wenn der Konstruktor erfolgreich erstellt wird, wird die Datei als offen angesehen. Nach der Verwendung der Datei muss die Datei geschlossen werden. Die Syntax zum Schließen einer Datei lautet:

public void close () wirft ioException aus

Nachdem die Datei gerade geöffnet wurde, ist das effektive Lesen der Datei noch nicht aufgetreten. Verwenden Sie die Syntax der FileReader -Methode, um jeweils einen Charakter zu lesen (eine dann die nächste):

public int read () wirft ioException aus

Dies gibt den Charakter (als Ganzzahl) gelesen oder -1 zurück, wenn das Ende des Streams (Dateikopierfluss im Speicher) erreicht wurde.

Verwenden Sie die Syntax der FileReader -Methode, um die nächste Abfolge von Zeichen der Datei in ein Array zu lesen:

public int read (char [] cbuf, int off, int len) wirft ioException aus

Es gibt die Anzahl der gelesenen Zeichen oder -1 zurück, wenn das Ende des Streams erreicht wurde. Off in der Syntax bedeutet Versatz. Es ist der Index in der Datei, in dem das Lesen der folgenden Zeichenfolge beginnen soll. Len ist die Anzahl der zum Lesen zu lesen. Es sollte die Länge des Arrays sein, während CBUF das Array ist, in das die Abfolge von Zeichen gelesen wird.

Denken Sie daran, dass das FileReader -Objekt nach dieser effektiven Lektüre mit seiner engen Methode geschlossen werden muss.

Die Syntax der Methode, um zu wissen, ob die nächste Lektüre nicht -1 zurückgibt, lautet:

öffentlich boolean ready () wirft ioException aus

Es gibt wahr zurück, wenn etwas gelesen und ansonsten falsch ist.

Lesen in eine Zeichenfolge

Der folgende Code liest die vorherige Datei, Zeichen für Charakter, in einen StringBuilder-String:

StringBuilder sb = new StringBuilder ();
versuchen
FileReaderfr = new FileReader ("Dir1/Temp.txt");
während (fr.bereit())
char ch = (char) fr.lesen();
sb.append (ch);


fangen (Ausnahme E)
e.getMessage ();

System.aus.println (SB);

Der Code beginnt mit der Instanziierung eines StringBuilder -Objekts, SB. Dann gibt es das Try-Catch-Konstrukt. Der Versuch beginnt mit der Instanziierung des FileReaders, FR. Und es gibt die While-Loop, die bis zubereit () iteriert. Die erste Aussage in der While-Loop liest und gibt den nächsten Charakter als Ganzzahl zurück und gibt zurück. Es muss an die Charge gegossen werden. Die nächste Anweisung in der While-Loop wendet das nächste Zeichen an die Zeichenfolge an, SB. Die Ausgabe ist:

A text 1 a text 1 a text 1 a text 1 a text 1
B Text 2 B Text 2 B Text 2 B Text 2 B Text 2
C Text 3 C Text 3 C Text 3 C Text 3 C Text 3

Es ist genau der Inhalt der Datei, aber es fügte eine zusätzliche Zeile im Computer des Autors hinzu.

In ein Array lesen

Beim Lesen in ein Array muss der Inhalt des Arrays veröffentlicht werden, damit die nächste Abfolge von Zeichen gelesen werden muss. Der folgende Code zeigt dies:

StringBuilder sb = new StringBuilder ();
versuchen
FileReaderfr = new FileReader ("Dir1/Temp.txt");
während (fr.bereit())
char [] arr = new char [5];
int offset = 0;
fr.Read (arr, offset, 5);
offset = offset + 5;
System.aus.print (arr);


fangen (Ausnahme E)
e.getMessage ();

System.aus.println ();

Der Wert des Offsets muss für jede Iteration durch die Länge des Arrays erhöht werden. Die Ausgabe ist:

A text 1 a text 1 a text 1 a text 1 a text 1
B Text 2 B Text 2 B Text 2 B Text 2 B Text 2
C Text 3 C Text 3 C Text 3 C Text 3 C Text 3

Es ist genau wie der Inhalt der Datei, aber es fügte zusätzliche Zeile auf dem Computer des Autors hinzu.

Byte -Dateien lesen

Konstruktion eines DateiInputStream -Objekts

Die folgende Bilddatei wird als Balken bezeichnet.png. Es befindet sich im Verzeichnisbenutzer@host: ~/dir1 $, das das gleiche Verzeichnis wie Temperatur ist.txt. Es besteht aus nur drei Farbstangen:

Erstellung eines DateiInputStream

Ein Konstruktor für ein FileInputStream -Objekt lautet:

public FileInputStream (String -Name) löst FileNotfoundException aus

Da es eine Ausnahme ausführt, sollte es in einem Versuchskonstrukt sein. Denken Sie daran, dass diese Klasse zum Lesen von Bytes dient.

Wichtige Methoden von FileInputStream

Wenn der Konstruktor erfolgreich erstellt wird, wird die Datei als offen angesehen. Nach dem Lesen der Bytes muss die Datei geschlossen werden, wobei die folgende Syntax verwendet wird:

public void close () wirft ioException aus

Nachdem die Datei gerade geöffnet wurde, ist das effektive Lesen der Datei noch nicht aufgetreten. Verwenden Sie die Syntax der FileInputStream -Methode, um jeweils ein Byte zu lesen (eine dann die nächste):

public int read () wirft ioException aus

Dadurch wird das Byte (als Ganzzahl) gelesen oder -1, wenn das Ende des Streams (Dateikopierfluss im Speicher) erreicht wurde.

Denken Sie daran, dass nach diesem effektiven Lesen das FileInputStream -Objekt mit seiner engen Methode geschlossen werden muss.

Verwenden Sie die Methodensyntax, um eine Schätzung der Anzahl der verbleibenden Bytes zu erhalten:

public int verfügbar () wirft ioException aus

Da diese Methode eine Schätzung zurückgibt, kann man in Verbindung mit Read () nicht sicher sein, dass alle Bytes der Datei gelesen wurden. Und die folgende Methode, mit der alle Bytes liest, sollte bevorzugt werden:

öffentliches Byte [] readAllBytes () löst ioException aus

Diese Methode gibt alle verbleibenden Bytes zurück, würde aber dennoch die gesamte Datei lesen.

Lesen in eine ArrayList

Die ArrayList muss aus der Java importiert werden.Util.* Paket. Der folgende Code liest eine Schätzung aller Bytes in ein ArrayList -Objekt:

ArrayList al = new ArrayList ();
versuchen
FileInputStream fir = new FileInputStream ("Dir1/Bars.png ");
while (fir.Verfügbar ()> 0)
Byte Bt = (Byte) Tanne.lesen();
al.add (bt);


fangen (Ausnahme E)
e.getMessage ();

System.aus.println (al);

Der Code beginnt mit der Instanziierung eines ArrayList -Objekts, AL. Dann gibt es das Try-Catch-Konstrukt. Der Versuch beginnt mit der Instanziierung des FileInputStream, FIR. Und es gibt die While-Loop, die bis zur Verfügung () iteriert () und schlägt vor, dass kein Byte gelesen werden muss. Die erste Aussage in der While-Loop liest und gibt das nächste Byte als Ganzzahl zurück. Es muss in ein Byte gegossen werden. Die nächste Anweisung in der While-Loop fügt das nächste Zeichen zur Liste an (fügt) AL. Die Ausgabe ist:

[-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, - - - - 10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1 , -96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0,. 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, 92, -110, -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, - - - - 26, -70, 44, -41, 5, 104, 58, -99 - - - und Fortsetzung - - -]

Bytes sind Ganzzahlen. Hoffentlich besteht das Bild der letzten drei Balken aus all diesen Bytes. Die Idee ist, dass der Programmierer einige der Bytes ändert, das Bild modifiziert und dann das Ergebnis speichert. Dann mit dem Image-Viewer neu dispedieren, während Sie ein modifiziertes Bild präsentieren. Dieser zusätzliche Zeitplan wird jedoch in diesem Artikel nicht behandelt.

In ein Array lesen

Die Methode ReadAllBytes () gibt ein Array von Bytes zurück. Erhalten Sie also einfach die Rückgabewerte mit einem Byte -Array, wie der folgende Code zeigt:

byte [] arr = new byte [1000];
versuchen
FileInputStream fir = new FileInputStream ("Dir1/Bars.png ");
arr = fir.readAllBytes ();

fangen (Ausnahme E)
e.getMessage ();

für (int i = 0; iSystem.aus.print (arr [i] + ",");
System.aus.println ();

Der Code beginnt mit der Erklärung des Arrays, die die Bytes erhält. Die Größe (Länge) hier sollte über der geschätzten Größe liegen. Die geschätzte Größe kann mit der Methode verfügbar () erhalten werden. Der Hauptcode befindet sich im Try-Block. Die Ausgabe ist:

-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, -10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1, - - 96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110 , -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, -26, -26, -70, 44, -41, 5, 104, 58, -99, - - - und Fortsetzung - - -

Diese und die vorherige Ausgabe sind auf dem Computer des Autors gleich.

Abschluss

Lokale Text- und Byte -Dateien können gelesen werden. Verwenden Sie zum Lesen einer Textdatei die Stream -Klasse, FileReader. Verwenden Sie zum Lesen einer Byte -Datei die Stream -Klasse FileInputStream. Beide Klassen sind in der Java.io.* Paket, das importiert werden sollte. Diese beiden Klassen haben Konstruktoren und Methoden, die das Lesen ermöglichen. Wir hoffen, Sie haben diesen Artikel hilfreich gefunden. Weitere Tipps und Tutorials finden Sie in anderen Linux -Hinweisartikeln.