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

Как добавить данные в файл в Java?

В большинстве случаев, если вы пытаетесь записать содержимое файла с помощью классов пакета java.io, файл будет перезаписан, то есть, удалены существующие данные в файле и добавлены новые данные.

Но в некоторых случаях, например, при записи исключений в файл (без использования фреймворка записи), вам нужно добавить данные (сообщение) на следующей строке файла.

Вы можете выполнить эту операцию с помощью класса Files пакета java.nio, который предоставляет методwrite()}метод принимает

  • Объект класса Path, представляющий файл.

  • Сохранить данные в массив байтов файла.

  • Вы можете передать переменную параметр типа OpenOption (интерфейс) в качестве значения одному из элементов枚ерации StandardOpenOption, который содержит 10 опций: APPEND, CREATE, CREATE_NEW, DELETE_ON_CLOSE, DSYNC, READ, SPARSE, SYNC, TRUNCATE_EXISTING, WRITE .

Вы можете вызвать этот метод, передав путь к файлу, массив байтов с данными, которые нужно добавить, и опцию StandardOpenOption.APPEND.

пример

Следующий Java-программа имеет массив, который хранит 5 целых чисел, и мы позволяем пользователю выбрать два элемента (индексы элементов) и выполнить деление между ними. Мы заключаем этот код в блок try с тремя блоками catch, которые捕获 ArithmeticException, InputMismatchException и ArrayIndexOutOfBoundsException. Мы каждый раз вызываем этотwriteToFile()метод.

Этот метод принимает объекты исключений и использует класс Files дляwrite()}метод добавляет его в файл.

public class LoggingToFile {
   private static void writeToFile(Exception e) throws IOException {
      //Извлечь лог-файл
      Path logFile = Paths.get("ExceptionLog.txt");
      //Подготовить данные для записи
      byte bytes[] = (\r\n" + LocalDateTime.now() + ": " + e.toString()).getBytes();
      //Добавить исключение в файл
      Files.write(logFile, bytes, StandardOpenOption.APPEND);
      System.out.println("Исключение записано в ваш файл");
   }
   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("Массив: " + Arrays.toString(arr));
      System.out.println("Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5)");
      try {
         int a = sc.nextInt();
         int b = sc.nextInt();
         int result = (arr[a]) / (arr[b]);
         System.out.println("Результат " + arr[a] + "/" + arr[b] + ": " + result);
      }catch(ArrayIndexOutOfBoundsException ex) {
         System.out.println("Внимание: Вы выбрали позицию, которая не находится в массиве");
         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);
      }
   }
}

Вывод 1

Введите 3 целых значения по одному:
Массив: [10, 20, 30, 2, 0, 8]
Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5)
2
4
Warning: You cannot divide an number with 0
Exception logged to your file

Вывод 2

Введите 3 целых значения по одному:
Массив: [10, 20, 30, 2, 0, 8]
Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5)
5
12
Warning: You have chosen a position which is not in the array
Exception logged to your file

Вывод 3

Введите 3 целых значения по одному:
Массив: [10, 20, 30, 2, 0, 8]
Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5)
hello
Warning: You have entered invalid input
Exception logged to your file

ExceptionLog.txt

2019-07-19T17:57:09.735: java.lang.ArithmeticException: / by zero
2019-07-19T17:57:39.025: java.lang.ArrayIndexOutOfBoundsException: 12
2019-07-19T18:00:23.374: java.util.InputMismatchException
Вам может понравиться