En la publicación de hoy sobre Java I/O vamos a explicar como copiar un fichero y como moverlo de una carpeta a otra desde Java, creamos un paquete org.xulescode.javaio para nuestra clase que llamaremos JavaIOUtils, clase que estoy utilizando en las explicaciones de nuevas funcionalidades de Java I/O, aquí iremos añadiendo para darles utilizad en futuros ejemplos.

Java copiar ficheros

Usamos la clase java.io.File que nos proporciona una representación abstracta de un fichero o directorio, con métodos para el manejo de ficheros y directorios.Código Xules

 
Lo veremos con tres ejemplos:

Java copiar fichero

Creamos el método public boolean copyFile(String fromFile, String toFile) donde implementamos la funcionalidad de Java copiar ficheros, usando:

  • Usamos el paquete java.io: donde se encuentran la mayor parte de las clases para el manejo de archivos
  • Usamos java.io.File: representación abstracta de un fichero o el nombre de una ruta, aquí encontraremos los métodos para saber si existe el directorio que nos pasan en la ruta, y también, un método para leer los ficheros del directorio.
  • java.io.FileOutputStream es un flujo de salida para la escritura de datos a un File o un FileDescriptor
  • java.io.InputStream: superclase de todas las clases que representan un flujo de entrada de bytes.
  • java.io.OutputStream: superclase de todas las clases que representan un flujo de salida de bytes

Este el código que utilizamos para mover de un fichero origen fromFile a un fichero destino toFile comprobando la existencia del fichero origen:

package org.xulescode.javaio;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * Utility class, where we will create methods for training in the use of files,
 * ultimately, Java I / O Basic. Clase de utilidades, donde crearemos métodos
 * para el aprendizaje del manejo de ficheros, en definitiva, Java I/O Básico.
 *
 * @author xulescode You can follow me on my website
 * http://www.codigoxules.org/en Puedes seguirme en mi web
 * http://www.codigoxules.org).
 */
public class JavaIOUtils {

    /**
     * Method to <b>copy</b> a file from a source origin (<code>fromFile</code>)
     * to a destination(<code>toFile</code>). Método para <b>copiar</b> un
     * fichero desde un origen (<code>fromFile</code>) a un destino
     * (<code>toFile</code>).
     *
     * @param fromFile <code>String</code> source file path (ruta del fichero
     * origen).
     * @param toFile <code>String</code> destination file path (ruta del fichero
     * destino).
     * @return <code>boolean</code> It returns true if they could copy the file
     * false on error (devuelve true si se pude copiar el fichero false en caso
     * de error).
     */
    public boolean copyFile(String fromFile, String toFile) {
        File origin = new File(fromFile);
        File destination = new File(toFile);
        if (origin.exists()) {
            try {
                InputStream in = new FileInputStream(origin);
                OutputStream out = new FileOutputStream(destination);
                // We use a buffer for the copy (Usamos un buffer para la copia).
                byte[] buf = new byte[1024];
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                in.close();
                out.close();
                return true;
            } catch (IOException ioe) {
                ioe.printStackTrace();
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * Main method for the tests for the created method, pruebas de <strong>Java
     * copy file</strong>. Método main para las pruebas para el método creado,
     * pruebas de <strong>Java copiar fichero</strong>.
     *
     * @param args
     */
    public static void main(String args[]) {
        JavaIOUtils javaIOUtils = new JavaIOUtils();
        String fromFile = "/home/xules/codigoxules/myfile.txt";
        String toFile = "/home/xules/codigoxules/Files/myfile.txt";
        boolean result = javaIOUtils.copyFile(fromFile, toFile);
        System.out.println(result?
            "Success! File copying (Éxito! Fichero copiado)":
                "Error! Failed to copy the file (Error! No se ha podido copiar el fichero)");

    }
}

 

Si la operación de copiado ha sido correcta obtendrás este mensaje por pantalla:

run:
Success! File copying (Éxito! Fichero copiado)
BUILD SUCCESSFUL (total time: 0 seconds)

 

Java mover fichero

En este caso creamos el método public boolean moveFile(String fromFile, String toFile) donde implementamos la funcionalidad de Java mover ficheros utilizando el ejemplo anterior, con lo que en este caso lo que vamos a hacer es una copia del fichero y una vez finalizado eliminaremos el fichero origen este es el código:

    /**
     * Method to <b>move</b> a file from an origin (<code>fromFile</code>) to a
     * destination (<code>toFile</code>). Método para <b>mover</b> un fichero
     * desde un origen (<code>fromFile</code>) a un destino
     * (<code>toFile</code>).
     *
     * @param fromFile <code>String</code> source file path (ruta del fichero
     * origen).
     * @param toFile <code>String</code> destination file path (ruta del fichero
     * destino).
     * @return <code>boolean</code> It returns true if they could copy the file
     * false on error (devuelve true si se pude copiar el fichero false en caso
     * de error).
     */
    public boolean moveFile(String fromFile, String toFile) {
        File origin = new File(fromFile);
        File destination = new File(toFile);
        if (origin.exists()) {
            try {
                InputStream in = new FileInputStream(origin);
                OutputStream out = new FileOutputStream(destination);
                byte[] buf = new byte[1024];
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                in.close();
                out.close();
                return origin.delete();
            } catch (IOException ioe) {
                ioe.printStackTrace();
                return false;
            }
        } else {
            return false;
        }
    }

 
Añade este método a la clase anteriormente creada y actualiza el método main con el siguiente código para probar el método:

    /**
     * Main method for the tests for the created method, pruebas de <strong>Java
     * copy file</strong>. Método main para las pruebas para el método creado,
     * pruebas de <strong>Java copiar fichero</strong>.
     *
     * @param args
     */
    public static void main(String args[]) {
        JavaIOUtils javaIOUtils = new JavaIOUtils();
        String fromFile = "/home/xules/codigoxules/myfile.txt";
        String toFile = "/home/xules/codigoxules/Files/myfile.txt";
            
        boolean result = javaIOUtils.moveFile(fromFile, toFile);
        System.out.println(result?
            "Success! File moved (Éxito! Fichero movido)"
                : "Error! Failed to move the file (Error! No se ha podido mover el fichero)"); 
    }
}

 
Si la operación de copiado ha sido correcta obtendrás este mensaje por pantalla:

run:
Success! File moved (Éxito! Fichero movido)
BUILD SUCCESSFUL (total time: 0 seconds)

 

Java mover fichero simple

En este caso creamos el método public boolean moveFileSimple(String fromFile, String toFile) donde utilizaremos un método de renombrado del fichero: renameTo(…), con lo que con una única línea movemos el fichero de una carpeta a otra mediante el renombrado: origen.renameTo(new File(toFile)), añade ahora este código a tu clase y pruebalo:

    /**
     * Método para <b>mover</b> un fichero desde un origen
     * (<code>fromFile</code>) a un destino (<code>toFile</code>).
     *
     * @param fromFile <code>String</code> source file path (ruta del fichero
     * origen).
     * @param toFile <code>String</code> destination file path (ruta del fichero
     * destino).
     * @return <code>boolean</code> It returns true if they could copy the file
     * false on error (devuelve true si se pude copiar el fichero false en caso
     * de error).
     */
    public boolean moveFileSimple(String fromFile, String toFile) {
        File origen = new File(fromFile);
        return origen.renameTo(new File(toFile));
    }

 

Este es la actualización del código main para el ejemplo.

Si la operación de copiado ha sido correcta obtendrás este mensaje por pantalla:

run:
Success! File moved (Éxito! Fichero movido)
BUILD SUCCESSFUL (total time: 0 seconds)

 

Espero que te haya sido útil este ejemplo con Java I/O. Déjanos tu opinión con un comentario.Xules

 

¿Qué hacemos ahora?

 
Aquí te dejo otras publicaciones sobre Java I/O:

Java Crear archivo

Creamos un método para explicar como crear un archivo en Java

 

Java leer ficheros del directorio

Creamos varios métodos para explicar como leer los directorios en Java