English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Wie fügt man Daten in eine Datei in Java hinzu?

In den meisten Fällen wird die Datei überschrieben, wenn Sie versuchen, Inhalte in die Datei zu schreiben, indem Sie Klassen aus dem Paket java.io verwenden, d.h. die bestehenden Daten im Datei gelöscht und neue Daten hinzugefügt werden.

Aber in einigen Fällen, wie z.B. das Protokollieren von Ausnahmen in eine Datei (ohne den Logger-Framework zu verwenden), müssen Sie Daten (Nachrichten) an der nächsten Zeile der Datei anhängen.

Sie können die Klasse Files aus dem Paket java.nio verwenden, um dies zu tun. Dieses Objekt bietet eine Methode namenswrite(), dieser Methodenaufruf akzeptiert

  • Ein Objekt der Klasse Path, das einen Dateipfad darstellt.

  • Daten in einen Byte-Array des Files speichern.

  • Sie können einen Variablenparameter des Typs OpenOption (Interface) als Wert an eines der Elemente der Enumeration StandardOpenOption übergeben, das10Optionen, nämlich APPEND, CREATE, CREATE_NEW, DELETE_ON_CLOSE, DSYNC, READ, SPARSE, SYNC, TRUNCATE_EXISTING, WRITE.

Sie können diese Methode aufrufen, indem Sie den Pfad zur Datei, den Byte-Array mit den zu anhängenden Daten und die Option StandardOpenOption.APPEND übergeben.

Beispiel

Der folgende Java-Programm hat ein Array, das5Eine Ganzzahl, die wir dem Benutzer ermöglichen, zwei Elemente (die Indizes der Elemente) aus dem Array auszuwählen und zwischen ihnen zu teilen. Wir verpacken diesen Code in einen try-Block, der drei catch-Blöcke für ArithmeticException, InputMismatchException und ArrayIndexOutOfBoundsException enthält. Jeder von uns ruft daswriteToFile()Klasse.

Diese Methode akzeptiert ein Ausnahmeobjekt und verwendet die Methode derwrite()Methode, um sie zur Datei hinzuzufügen.

public class LoggingToFile {
   private static void writeToFile(Exception e) throws IOException {
      //Logdatei abrufen
      Path logFile = Paths.get("ExceptionLog.txt");
      //Vorbereitung der zu protokollierenden Daten
      byte bytes[] = ("\r\n"+LocalDateTime.now()+": "+e.toString()).getBytes();
      //Fügen Sie die Ausnahme zur Datei hinzu
      Files.write(logFile, bytes, StandardOpenOption.APPEND);
      System.out.println("Ausnahme wurde in Ihre Datei protokolliert");
   }
   public static void main(String [] args) throws IOException {
      Scanner sc = new Scanner(System.in);
      int[] arr = {10, 20, 30, 2, 0, 8};
      System.out.println("Array: "+Arrays.toString(arr));
      System.out.println("Wählen Sie den Nenner und den Zähler (nicht 0) aus diesem Array aus (geben Sie Positionen 0 bis 5) ");
      try {
         int a = sc.nextInt();
         int b = sc.nextInt();
         int result = (arr[a])/(arr[b]);
         System.out.println("Ergebnis von "+arr[a]+"/"+arr[b]+": "+result);
      catch(ArrayIndexOutOfBoundsException ex) {
         System.out.println("Warnung: Sie haben eine Position gewählt, die nicht im Array liegt");
         writeLogToFile(ex);
      }catch(ArithmeticException ex) {
         System.out.println("Warning: You cannot divide an number with 0");
         writeLogToFile(ex);
      }catch(InputMismatchException ex) {
         System.out.println("Warning: You have entered invalid input");
         writeLogToFile(ex);
      }
   }
}

Output1

Enter 3 integer values one by one:
Array: [10, 20, 30, 2, 0, 8]
Choose numerator and denominator (not 0) from this array (enter positions 0 to 5)
2
4
Warning: You cannot divide an number with 0
Exception logged to your file

Output2

Enter 3 integer values one by one:
Array: [10, 20, 30, 2, 0, 8]
Choose numerator and denominator (not 0) from this array (enter positions 0 to 5)
5
12
Warning: You have chosen a position which is not in the array
Exception logged to your file

Output3

Enter 3 integer values one by one:
Array: [10, 20, 30, 2, 0, 8]
Choose numerator and denominator (not 0) from this array (enter positions 0 to 5)
hello
Warning: You have entered invalid input
Exception logged to your file

ExceptionLog.txt

2019-07-19T17:57:09.735: java.lang.ArithmeticException: / von zero
2019-07-19T17:57:39.025: java.lang.ArrayIndexOutOfBoundsException: 12
2019-07-19T18:00:23.374: java.util.InputMismatchException