English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В большинстве случаев, если вы пытаетесь записать содержимое файла с помощью классов пакета 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); } } }
Введите 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
Введите 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 целых значения по одному: Массив: [10, 20, 30, 2, 0, 8] Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5) hello Warning: You have entered invalid input Exception logged to your file
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