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

Cómo adjuntar datos a un archivo en Java

En la mayoría de los casos, si intenta escribir contenido en un archivo utilizando las clases del paquete java.io, se sobrescribirá el archivo, es decir, se eliminarán los datos existentes en el archivo y se agregarán nuevos datos.

Pero, en algunos casos, como registrar excepciones en un archivo (sin usar el framework de registro), necesita agregar datos (mensajes) en la siguiente línea del archivo.

Puede realizar esta operación utilizando la clase Files del paquete java.nio. Esta clase proporciona un método llamadowrite(),que该方法接受

  • Un objeto de la clase Path, que representa un archivo.

  • Guardar los datos en un array de bytes.

  • Puede pasar un parámetro de tipo OpenOption (interfaz) como valor a uno de los elementos de la enumeración StandardOpenOption, que contiene10Las opciones, es decir, APPEND, CREATE, CREATE_NEW, DELETE_ON_CLOSE, DSYNC, READ, SPARSE, SYNC, TRUNCATE_EXISTING, WRITE.

Puede llamar a este método pasando la ruta del archivo, el array de bytes que contiene los datos que se deben agregar y la opción StandardOpenOption.APPEND.

Ejemplo

El siguiente programa Java tiene un array que almacena5Un valor entero, permitimos que el usuario seleccione dos elementos (índices de los elementos) del array y realice la división entre ellos. Envolvemos este código en un bloque try, que contiene tres bloques catch para capturar ArithmeticException, InputMismatchException y ArrayIndexOutOfBoundsException. Cada uno de nosotros llama a lawriteToFile()método.

Este método acepta un objeto de excepción y utiliza el método de la clase Files.write()Método que lo adjunta al archivo.

public class LoggingToFile {
   private static void writeToFile(Exception e) throws IOException {
      //Recuperar archivo de registro
      Path logFile = Paths.get("ExceptionLog.txt");
      //Preparando los datos a registrar
      byte bytes[] = ("\r\n"+LocalDateTime.now()+": "+e.toString()).getBytes();
      //Adjuntar excepción al archivo
      Files.write(logFile, bytes, StandardOpenOption.APPEND);
      System.out.println("Excepción registrada en su archivo");
   }
   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("Elija el numerador y el denominador (no 0) de este array (ingrese posiciones 0 a 5)");
      try {
         int a = sc.nextInt();
         int b = sc.nextInt();
         int result = (arr[a])/(arr[b]);
         System.out.println("Resultado de "+arr[a]+"/"+arr[b]+": "+result);
      catch(ArrayIndexOutOfBoundsException ex) {
         System.out.println("Advertencia: ha elegido una posición que no está en el array");
         writeLogToFile(ex);
      }catch(ArithmeticException ex) {
         System.out.println("Advertencia: No se puede dividir un número con 0");
         writeLogToFile(ex);
      }catch(InputMismatchException ex) {
         System.out.println("Advertencia: Ha introducido una entrada no válida");
         writeLogToFile(ex);
      }
   }
}

salida1

Ingrese 3 valores enteros uno a uno:
Array: [10, 20, 30, 2, 0, 8]
Elija el numerador y el denominador (no 0) de este array (ingrese posiciones de 0 a 5)
2
4
Advertencia: No se puede dividir un número con 0
Exception registrado en su archivo

salida2

Ingrese 3 valores enteros uno a uno:
Array: [10, 20, 30, 2, 0, 8]
Elija el numerador y el denominador (no 0) de este array (ingrese posiciones de 0 a 5)
5
12
Advertencia: Ha elegido una posición que no está en el array
Exception registrado en su archivo

salida3

Ingrese 3 valores enteros uno a uno:
Array: [10, 20, 30, 2, 0, 8]
Elija el numerador y el denominador (no 0) de este array (ingrese posiciones de 0 a 5)
hola
Advertencia: Ha introducido una entrada no válida
Exception registrado en su archivo

ExceptionLog.txt

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