Ir al contenido principal

Cómo convertir arreglo de bytes (byte[]) a File [Java Tips]

tip

Existen bastantes situaciones en las cuales es necesario convertir un arreglo de bytes a un archivo en Java, lo ideal desde mi punto de vista sería que los desarrolladores de la clase File implementaran un constructor que aceptara dicho parámetro y así, sencillamente se creara el archivo, desafortunadamente esto aún no existe, afortunadamente es posible hacerlo con algunas pocas líneas de código que mostraré a continuación...

public static boolean escribirArchivo(byte[] fileBytes, String archivoDestino){
   boolean correcto = false;
   try {
     OutputStream out = new FileOutputStream(archivoDestino);
     out.write(fileBytes);
     out.close();        
     correcto = true;
   } catch (Exception e) {
     e.printStackTrace();
   }        
     return correcto;

}

Explicación:
    - Lo primero que vemos es que encerré todo el procedimiento en un método público estático, esto es para que sea accesible desde cualquier lugar de nuestra aplicación sin necesidad de instanciar la clase que lo contiene.
    - El método devuelve un booleano el cual nos indica si el procedimiento de conversión fue correcto o no.
    - Se necesitan 2 parámetros para que el procedimiento se realice, el primero es el arreglo de bytes que deseamos convertir y el segundo es el nombre completo del archivo que vamos a crear (en caso de ser necesario incluyendo su ruta absoluta/relativa).
    - Posteriormente se crea el OutputStream que no es más que el buffer de escritura que utilizaremos, como se puede observar en el código se crea en la ruta indicada por el 'archivoDestino'.
    - Después utilizamos el método write() del stream para escribir los bytes y con ello generar el archivo deseado.
    - Una vez escrito el archivo se cierra el buffer empleado con el método close() y se indica que el procedimiento fue realizado correctamente.
    - Como puedes ver, el bloque de conversión está encerrado con un try-catch que nos permite capturar las excepciones que puedan generarse durante el procedimiento.

Como puedes notar únicamente fueron necesarias 2 simples líneas de código para convertir un arreglo de bytes a un archivo en el disco, ¿sencillo no?

Tus comentarios y/o preguntas son bienvenidos.

Si el código te fue útil puedes compartir el artículo desde los botones sociales (Twitter, Facebook, Google+).

De igual manera puedes suscribirte al blog original feed  para que los nuevos artículos lleguen a tu bandeja de correo o lector de Feeds favorito desde los enlaces del lado derecho de la página.

Comentarios

  1. Muy bueno... Ahora, tienes uno sobre cómo convertir un File a un arreglo de bytes?
    Saludos desde Argentina! Hernán!

    ResponderBorrar
  2. saludos gracias por tu ayuda, y dime como seria el caso inverso

    ResponderBorrar
  3. Qué tal,

    A partir del JDK 7 puedes utilizar el objeto Path, de la siguiente manera:

    Path ruta = Paths.get("c:\archivo.txt");
    byte[] bs = Files.readAllBytes(ruta);

    Espero que te sirva.

    ResponderBorrar
  4. Podemos acomodarlo de la siguiente manera si lo que necesitamos es convertir byte[] a la clase File:

    public File ByteToFile(byte[] data, String filename) {
    try {
    String tmpDir = System.getProperty("user.dir") + "\\tmp\\";
    if (!new File(tmpDir).exists()) {
    if (!new File(tmpDir).mkdirs()) {
    JOptionPane.showMessageDialog(null, "Imposible crear diretorio temporal.");
    return null;
    }
    }
    OutputStream out = new FileOutputStream(tmpDir + filename);
    out.write(data);
    out.close();
    File file = new File(filename);
    file.deleteOnExit();
    return file;
    } catch (IOException ex) {
    Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
    return null;
    }

    ResponderBorrar
  5. public File ByteToFile(byte[] data) {
    try {
    String tmpDir = System.getProperty("user.dir") + "\\tmp\\";
    String tmpFilename = UUID.randomUUID().toString();
    if (!new File(tmpDir).exists()) {
    if (!new File(tmpDir).mkdirs()) {
    JOptionPane.showMessageDialog(null, "Imposible crear diretorio temporal.");
    return null;
    }
    }
    OutputStream out = new FileOutputStream(tmpDir + tmpFilename);
    out.write(data);
    out.close();
    File file = new File(tmpFilename);
    file.deleteOnExit();
    return file;
    } catch (IOException ex) {
    Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
    return null;
    }

    ResponderBorrar
  6. buenos dias señores tengo un problema necesito cargar los bytes de un archivo y persistir ese arreglo de bytes en la BD porfavor alguien me podria dar una explicación gracias

    ResponderBorrar

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.