Java - Copia de directorios muy lenta

 
Vista:

Copia de directorios muy lenta

Publicado por Carina (3 intervenciones) el 11/11/2005 13:50:28
Hola: Tengo un metodo que me hace la copia de archivos y directorio, parecia funcionar bien y rapido hasta intente copiar un archivo que tenia carpetas y archivos que en total pesaban 589 MB, me llevo mas de 1 hora copiar los archivos. Alguien sabria decirme que podria hacer? o donde esta el problema?
Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Copia de directorios muy lenta

Publicado por chuidiang (950 intervenciones) el 11/11/2005 17:16:48
Hola:

Sin ver el código es dificil saber qué esta pasando.

Una posibilidad habitual que ralentiza el tema de ficheros es la siguiente:

Es mejor usar BufferedStreams que Streams que no sean buffered.
Los primeros, aunque mandes leer solo un par de caracteres, aprovechan el acceso a disco para cargar un montón de caracteres (varios Kbytes). Las siguientes lecturas son inmediatas, puesto que no va al disco a leerlas, te las da de la memoria.

Los segundos, si pides dos caracteres, acceden al disco y te dan dos caracteres. Si accedes a los dos siguientes, vuelven a acceder al disco y así sucesivametne.
Pasa lo mismo con las escrituras. Los Buffered guardan lo que escribes en memoria hasta que tienen bastantes datos. Entonces los vuelcan realmente a disco.

En general, es muchísimo más rápido un acceso a disco para leer 1000 datos que 1000 accesos para leer un solo dato cada vez.

Se buena.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copia de directorios muy lenta

Publicado por Carina (3 intervenciones) el 11/11/2005 19:50:01
Muchas gracias por contestar, el codigo que utilizo es mas o menos este:

File origen=new File(fuente);
String[] contenido=origen.list();
for(int i=0;i<contenido.length;i++){
if(new File(fuente,contenido[i]).isFile()){
File nuevo=new File(fuente,contenido[i]);
FileInputStream fis=new FileInputStream(nuevo);
File f=new File(destino,contenido[i]);
FileOutputStream fos=new FileOutputStream(f);
int c;
while((c=fis.read())!=-1) // -1 indica fin
fos.write(c);
fis.close();
fos.close();
}

utilizo recursividad y si el directorio no existe lo creo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Copia de directorios muy lenta

Publicado por chuidiang (950 intervenciones) el 12/11/2005 14:16:02
Hola:

El problema puede estar en leer y escribir caracteres de uno en uno.

Prueba a crear BufferedInputStream y BufferedOutputStream pasándoles en el constructor los FileInputStream y FileOutputStream que tienes. Usa esos dos primero para leer y escribir.

Si no consigue velocidad, deja el código como lo tienes, pero lee caracteres de 1000 en 1000 o 10000 en 10000 (usa los read() y write() en los que se pasa un array de bytes). Si en el fichero hay menos caracteres, sólo se leeran los disponibles. En el read() debes controlar el valor devuelto, que será el número de caracteres leídos.

Se buena.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copia de directorios muy lenta

Publicado por salva (62 intervenciones) el 14/11/2005 17:08:26
A mi me paso lo mismo en una aplicacion. Trataba de leer el contenido de un fichero de texto bastante grande, hacia la lectura de uno en uno y tardaba una eternidad. Asi que lo que hice fue por codigo averiguar el tamaño del fichero y pasarle al read() la cantidad de bytes que queria leer, en mi caso el fichero entero. Asi leia el ficheor entero de una vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copia de directorios muy lenta

Publicado por Carina (3 intervenciones) el 14/11/2005 18:31:30
Ok. Gracias a ambos, voy a probar las 2 formas.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar