Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java - Dateien und E/A

Das java.io-Paket enthält fast jede Klasse, die Sie jemals benötigen könnten, um Eingaben und Ausgaben (E/A) in Java durchzuführen. Alle diese Streams repräsentieren eine Eingabequelle und ein Ausgabeziel. Der Stream im Paket java.io unterstützt viele Daten wie Primitive, Objekte, lokalisierte Zeichen usw.

Streamen

Ein Stream kann als eine Folge von Daten definiert werden. Es gibt zwei Arten von Streams −

Java bietet starke, aber flexible Unterstützung für I/O in Bezug auf Dateien und Netzwerke, aber dieses Tutorial behandelt sehr grundlegende Funktionen in Bezug auf Streams und I/O. Wir werden die am häufigsten verwendeten Beispiele nacheinander sehen −

Byte-Streams

Java-Byteströme werden verwendet, um die Eingabe und Ausgabe von 8-Bit-Bytes durchzuführen. Obwohl es viele Klassen gibt, die sich auf Bytestreams beziehen, sind die am häufigsten verwendeten Klassen FileInputStream und FileOutputStream . Es folgt ein Beispiel, das diese beiden Klassen verwendet, um eine Eingabedatei in eine Ausgabedatei zu kopieren −

Beispiel

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {  
      FileInputStream in = null;
      FileOutputStream out = null;

      try {
         in = new FileInputStream("input.txt");
         out = new FileOutputStream("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

Jetzt haben wir eine Datei input.txt mit folgendem Inhalt −

This is test for copy file.

Als nächsten Schritt kompilieren Sie das obige Programm und führen es aus, was zur Erstellung einer output.txt-Datei mit demselben Inhalt wie in input.txt führt. Also fügen wir den obigen Code in die Datei CopyFile.java ein und machen folgendes −

$javac CopyFile.java
$java CopyFile

Charakter-Streams

Java Byte Streams werden zur Eingabe und Ausgabe von 8-Bit-Bytes verwendet, während Java Character Streams werden verwendet, um Eingaben und Ausgaben für 16-Bit-Unicode durchzuführen. Obwohl es viele Klassen gibt, die sich auf Zeichenströme beziehen, sind die am häufigsten verwendeten Klassen FileReader und FileWriter . Obwohl FileReader intern FileInputStream und FileWriter FileOutputStream verwendet, besteht hier der Hauptunterschied darin, dass FileReader zwei Bytes gleichzeitig liest und FileWriter zwei Bytes gleichzeitig schreibt.

Wir können das obige Beispiel umschreiben, das diese beiden Klassen verwendet, um eine Eingabedatei (mit Unicode-Zeichen) in eine Ausgabedatei zu kopieren −

Beispiel

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {
      FileReader in = null;
      FileWriter out = null;

      try {
         in = new FileReader("input.txt");
         out = new FileWriter("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

Jetzt haben wir eine Datei input.txt mit folgendem Inhalt −

This is test for copy file.

Als nächsten Schritt kompilieren Sie das obige Programm und führen es aus, was zur Erstellung einer output.txt-Datei mit demselben Inhalt wie in input.txt führt. Also fügen wir den obigen Code in die Datei CopyFile.java ein und machen folgendes −

$javac CopyFile.java
$java CopyFile

Standard-Streams

Alle Programmiersprachen bieten Unterstützung für Standard-E/A, bei der das Programm des Benutzers Eingaben von einer Tastatur entgegennehmen und dann eine Ausgabe auf dem Computerbildschirm erzeugen kann. Wenn Sie C oder C++ Programmiersprachen, dann müssen Sie sich der drei Standardgeräte STDIN, STDOUT und STDERR bewusst sein. In ähnlicher Weise stellt Java die folgenden drei Standard-Streams bereit −

Es folgt ein einfaches Programm, das InputStreamReader erstellt um den Standardeingabestrom zu lesen, bis der Benutzer ein "q" −

eingibt

Beispiel

Live-Demo
import java.io.*;
public class ReadConsole {

   public static void main(String args[]) throws IOException {
      InputStreamReader cin = null;

      try {
         cin = new InputStreamReader(System.in);
         System.out.println("Enter characters, 'q' to quit.");
         char c;
         do {
            c = (char) cin.read();
            System.out.print(c);
         } while(c != 'q');
      }finally {
         if (cin != null) {
            cin.close();
         }
      }
   }
}

Lassen Sie uns den obigen Code in der Datei ReadConsole.java behalten und versuchen, ihn wie im folgenden Programm gezeigt zu kompilieren und auszuführen. Dieses Programm fährt damit fort, dasselbe Zeichen zu lesen und auszugeben, bis wir 'q' −

drücken
$javac ReadConsole.java
$java ReadConsole
Enter characters, 'q' to quit.
1
1
e
e
q
q

Dateien lesen und schreiben

Wie zuvor beschrieben, kann ein Stream als eine Folge von Daten definiert werden. Der InputStream wird verwendet, um Daten aus einer Quelle und dem OutputStream zu lesen wird zum Schreiben von Daten an ein Ziel verwendet.

Hier ist eine Klassenhierarchie für den Umgang mit Eingabe- und Ausgabeströmen.

Die beiden wichtigen Streams sind FileInputStream und FileOutputStream , die in diesem Tutorial besprochen werden.

FileInputStream

Dieser Stream wird zum Lesen von Daten aus den Dateien verwendet. Objekte können mit dem Schlüsselwort new erstellt werden und es sind mehrere Arten von Konstruktoren verfügbar.

Der folgende Konstruktor nimmt einen Dateinamen als Zeichenfolge, um ein Eingabestromobjekt zum Lesen der Datei zu erstellen −

InputStream f = new FileInputStream("C:/java/hello");

Der folgende Konstruktor verwendet ein Dateiobjekt, um ein Eingabestromobjekt zum Lesen der Datei zu erstellen. Zuerst erstellen wir ein Dateiobjekt mit der Methode File() wie folgt −

File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);

Sobald Sie InputStream haben Objekt in der Hand, dann gibt es eine Liste von Hilfsmethoden, die verwendet werden können, um in den Stream einzulesen oder andere Operationen auf dem Stream auszuführen.

Sr.No. Methode &Beschreibung
1

public void close() löst IOException aus{}

Diese Methode schließt den Dateiausgabestream. Gibt alle Systemressourcen frei, die der Datei zugeordnet sind. Löst eine IOException aus.

2

protected void finalize() wirft IOException {}

Diese Methode bereinigt die Verbindung zur Datei. Stellt sicher, dass die Close-Methode dieses Dateiausgabestreams aufgerufen wird, wenn keine Verweise mehr auf diesen Stream vorhanden sind. Löst eine IOException aus.

3

public int read(int r)löst IOException aus{}

Diese Methode liest das angegebene Datenbyte aus dem InputStream. Gibt einen int zurück. Gibt das nächste Datenbyte zurück und -1 wird zurückgegeben, wenn es das Ende der Datei ist.

4

public int read(byte[] r) löst IOException aus{}

Diese Methode liest r.length Bytes aus dem Eingabestream in ein Array. Gibt die Gesamtzahl der gelesenen Bytes zurück. Wenn es das Ende der Datei ist, wird -1 zurückgegeben.

5

public int available() löst IOException aus{}

Gibt die Anzahl der Bytes an, die aus diesem Dateieingabestrom gelesen werden können. Gibt ein int. zurück.

Es sind weitere wichtige Eingabeströme verfügbar, für weitere Details können Sie auf die folgenden Links verweisen −

FileOutputStream

FileOutputStream wird verwendet, um eine Datei zu erstellen und Daten darin zu schreiben. Der Stream würde eine Datei erstellen, falls diese noch nicht existiert, bevor er sie für die Ausgabe öffnet.

Hier sind zwei Konstruktoren, die zum Erstellen eines FileOutputStream-Objekts verwendet werden können.

Der folgende Konstruktor nimmt einen Dateinamen als Zeichenfolge, um ein Eingabestromobjekt zum Schreiben der Datei zu erstellen −

OutputStream f = new FileOutputStream("C:/java/hello") 

Der folgende Konstruktor verwendet ein Dateiobjekt, um ein Ausgabestromobjekt zum Schreiben der Datei zu erstellen. Zuerst erstellen wir ein Dateiobjekt mit der Methode File() wie folgt:−

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

Sobald Sie OutputStream haben Objekt in der Hand, dann gibt es eine Liste von Hilfsmethoden, die verwendet werden können, um in den Stream zu schreiben oder andere Operationen auf dem Stream auszuführen.

Sr.No. Methode &Beschreibung
1

public void close() löst IOException aus{}

Diese Methode schließt den Dateiausgabestream. Gibt alle Systemressourcen frei, die der Datei zugeordnet sind. Löst eine IOException aus.

2

protected void finalize() wirft IOException {}

Diese Methode bereinigt die Verbindung zur Datei. Stellt sicher, dass die Close-Methode dieses Dateiausgabestreams aufgerufen wird, wenn keine Verweise mehr auf diesen Stream vorhanden sind. Löst eine IOException aus.

3

public void write(int w)löst IOException aus{}

Diese Methode schreibt das angegebene Byte in den Ausgabestream.

4

public void write(byte[] w)

Schreibt w.length Bytes aus dem erwähnten Byte-Array in den OutputStream.

Es sind andere wichtige Ausgabeströme verfügbar, für weitere Details können Sie auf die folgenden Links verweisen −

Beispiel

Das folgende Beispiel zeigt InputStream und OutputStream −

import java.io.*;
public class fileStreamTest {

   public static void main(String args[]) {
   
      try {
         byte bWrite [] = {11,21,3,40,5};
         OutputStream os = new FileOutputStream("test.txt");
         for(int x = 0; x < bWrite.length ; x++) {
            os.write( bWrite[x] );   // writes the bytes
         }
         os.close();
     
         InputStream is = new FileInputStream("test.txt");
         int size = is.available();

         for(int i = 0; i < size; i++) {
            System.out.print((char)is.read() + "  ");
         }
         is.close();
      } catch (IOException e) {
         System.out.print("Exception");
      }	
   }
}

Der obige Code würde die Datei test.txt erstellen und gegebene Zahlen im Binärformat schreiben. Dasselbe wäre die Ausgabe auf dem stdout-Bildschirm.

Dateinavigation und E/A

Es gibt mehrere andere Kurse, die wir durchlaufen werden, um die Grundlagen der Dateinavigation und der E/A kennenzulernen.

Verzeichnisse in Java

Ein Verzeichnis ist eine Datei, die eine Liste anderer Dateien und Verzeichnisse enthalten kann. Sie verwenden Datei Objekt zum Erstellen von Verzeichnissen, zum Auflisten von Dateien, die in einem Verzeichnis verfügbar sind. Für vollständige Details sehen Sie sich eine Liste aller Methoden an, die Sie für File-Objekte aufrufen können und die sich auf Verzeichnisse beziehen.

Verzeichnisse erstellen

Es gibt zwei nützliche Dateien Utility-Methoden, die zum Erstellen von Verzeichnissen verwendet werden können −

Das folgende Beispiel erstellt das Verzeichnis "/tmp/user/java/bin" −

Beispiel

import java.io.File;
public class CreateDir {

   public static void main(String args[]) {
      String dirname = "/tmp/user/java/bin";
      File d = new File(dirname);
      
      // Create directory now.
      d.mkdirs();
   }
}

Kompilieren Sie den obigen Code und führen Sie ihn aus, um "/tmp/user/java/bin".

zu erstellen

Hinweis − Java kümmert sich gemäß den Konventionen automatisch um Pfadtrennzeichen unter UNIX und Windows. Wenn Sie in einer Windows-Version von Java einen Schrägstrich (/) verwenden, wird der Pfad dennoch korrekt aufgelöst.

Verzeichnisse auflisten

Sie können list() verwenden Methode, die von Datei bereitgestellt wird Objekt, um alle in einem Verzeichnis verfügbaren Dateien und Verzeichnisse wie folgt aufzulisten −

Beispiel

import java.io.File;
public class ReadDir {

   public static void main(String[] args) {
      File file = null;
      String[] paths;
  
      try {      
         // create new file object
         file = new File("/tmp");

         // array of files and directory
         paths = file.list();

         // for each name in the path array
         for(String path:paths) {
            // prints filename and directory name
            System.out.println(path);
         }
      } catch (Exception e) {
         // if any error occurs
         e.printStackTrace();
      }
   }
}

Dies wird das folgende Ergebnis basierend auf den Verzeichnissen und Dateien erzeugen, die in Ihrem /tmp verfügbar sind Verzeichnis −

Ausgabe

test1.txt
test2.txt
ReadDir.java
ReadDir.class

Java

  1. C Eingang Ausgang (E/A)
  2. Python-Datei-I/O
  3. Java-Variablen und Literale
  4. Java Basic Input und Output
  5. Java-Klasse und -Objekte
  6. Abstrakte Java-Klasse und abstrakte Methoden
  7. Java verschachtelte und innere Klasse
  8. Java-Wurf und Würfe
  9. Java-Scanner-Klasse
  10. Java Autoboxing und Unboxing