Copiar un fichero con Java

11/Nov/2010 Java , , , , , , 11 Comentarios

En este ejemplo vamos a ver como podemos copiar un fichero con Java. De tal manera que acabemos teniendo un segundo fichero con el mismo contenido del primer fichero.

Lo primero que haremos será crear dos objetos de tipo File, los cuales representarán al fichero origen y al fichero destino:

  1. File origen = new File("origen.txt");
  2. File destino = new File("destino.txt");

La idea principal para copiar un fichero con Java será la de abrir un stream de lectura, es decir, un InputStream, sobre el fichero origen, realizar la lectura a la vez que abrimos un stream de escritura sobre el fichero destino, es decir, un OutputStream. Sobre este OutputStream realizaremos la escritura.

Nos apoyamos en los objetos File creados anteriormente, así como en las clases FileInputStream y FileOutputStream para abrir los stream a los ficheros:

  1. InputStream in = new FileInputStream(origen);
  2. OutputStream out = new FileOutputStream(destino);

Realizamos la lectura y escritura mientras existan datos en el stream de lectura

  1. byte[] buf = new byte[1024];
  2. int len;
  3.  
  4. while ((len = in.read(buf)) > 0) {
  5. out.write(buf, 0, len);
  6. }

Las lecturas las hacemos mediante el método .read().

Ya solo nos quedará cerrar los stream mediante el método .close() para finalizar el código de nuestro programa.

  1. in.close();
  2. out.close();

Cabe notar que necesitamos controlar la excepción IOException en todo el código. Es por ello, que todo el código lo tendremos en una estructura try-catch.

Ya ya tendremos realizado nuestro ejemplo que nos ayuda a copiar un fichero con Java.

Vídeos sobre Java IO


11 comentarios en “Copiar un fichero con Java”

Víctor Cuervo

Izak

Y para copiar varios ficheros a la vez *.txt como se hace?

Víctor Cuervo

compilex

Muchas gracias por este codigo, ahora tocaria hacer una especie de banner informativo, para que el programa mientras carga el archivo, muestre en pantalla algo asi como cargando 10% 20% etc…

Muchas gracias por su ayuda.

Víctor Cuervo

LAUREN

Y si quiero copiar el fichero en C y me aparece una excepcion de Acceso denegado?

Víctor Cuervo

jorge

Como siempre, simple y efectivo!!!

Me sirvió para importar .jpg y otros tipos de ficheros en un proyecto de almacenamiento de datos.

Exelente y gracias!!!

Víctor Cuervo

Dannte

Y si no fuera un .txt , si se tratara de un .jpg o .gif se puede hacer esto en java?

Víctor Cuervo

Manuel

Hola a todos, es posible copiar el contenido de un excel a otro excel que ya este creado, o bien exportar datos a un excel ya existente.

Saludos.

Víctor Cuervo

Víctor Cuervo

@Fercho G,

Buenas, hay dos formas de mover un archivo de un directorio a otro (aunque sea un fichero Excel).

La primera opción es utilizar el método .renameTo()

File fichero = new File("c:\\escritorio\\archivo1.xls");
if (fichero.renameTo(new File("c:\\escritorio\\documentos\\archivo1.xls")))
  System.out.println("Fichero movido");
else
  System.out.println("No se pudo mover el fichero");

El código completo lo tienes en http://lineadecodigo.com/java/renombrar-un-fichero-con-java-io/

La segunda opción sería copiar el fichero y borrar su origen. Para eso échale un ojo a los artículos http://lineadecodigo.com/java/copiar-un-fichero-con-java/ y http://lineadecodigo.com/java/borrar-un-fichero-con-java/

Espero que te sirva de ayuda.

Víctor Cuervo

Fercho G

Hola esta es la primera vez que visito este sitio, y espero puedan ayudarme a resolver unos problemas con este tema, espero explicar bien mi duda:

supongamos que este es mi archivo /escritorio/archivo1.xls y lo que quiero es moverlo dentro de una carpeta, /escritorio/documentos/archivo1.xls, lo que necesito saber es el código ya sea para moverlo de ubicación el archivo como un copiar y pegar ó la otra sería crear una copia del mismo archivo e indicar donde la quiero guardar.

el problema es que son archivos excel (.xls) y por eso necesitaría saber si se puede copiar el archivo y su contenido sin tener que usar el read y el write.

Víctor Cuervo

Chonyz

Hola Amigos de Linea de Codigo!!

Hace bastante los vengo siguiendo y me vienen ayudando mucho.. Gracias!!

Les escribo para consultarles:

Como puedo hacer para que EN DESTINO. txt NO SE COPIE una linea ingresada por el usuario..??

Por ejemplo si en el DESTINO.txt está escrita una linea que dice “Hola que tal??” y quiero copiar en DESTINO.txt todo el contenido sin la linea “Hola que tal??” como podría hacer??

Víctor Cuervo

lineadecodigo

@Garusis,

El uso del buffer es para mejorar la velocidad. Utilizando el buffer hacemos menos accesos I/O al disco, ya que vamos trayendo de 1Kb en 1Kb.

Normalmente, los buffers, suelen ser de 1Kb o 2Kb. Pero todo depende de la memoria de máquina que puedas ocupar. Supuestamente a mayor buffer, mejor lectura (si los ficheros son grandes).

Ahora que también se podría llevar todo el fichero a memoria. ¿Si tienes un fichero de 10Mb tiene sentido llevarlo entero a memoria?

No sé en que punto se pierde el rendimiento por un tamaño de buffer grande.

Así que dependiendo de la situación podrías utilizar un tamaño u otro. Sobre todo entendiendo el tamaño de los ficheros que leas.

Víctor Cuervo

Garusis

Mi pregunta seria, por que se usa un array de buffer da tamaño 1024… es algo fijo para este proceso??… o es lo recomendado???… o de donde salio???…

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*