Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/11/2007, 18:45
isaacrc82
 
Fecha de Ingreso: junio-2004
Mensajes: 185
Antigüedad: 20 años, 7 meses
Puntos: 0
Pregunta Copiar ficheros demasiado lento !!!

Hola a todos:

Quisiera saber si alguien me puede ayudar a resolver este problema.
El caso es tengo un programa que corre en una máquina linux que lo que hace es copiar ficheros que estan en una maquina windows, la carpeta que quiero copiar que se llama docs está montada en el servidor linux por samba, esta carpeta tiene miles de ficheros de 300 k en formato pdf en total son decenas de Gigas.
Ahora bien no sé por qué razón el programa se demora tantoooo copiando al punto que la velocidad de copiado es de 180 MB en 1 hora, muy muy lento a ese ritmo se demoraría en copiar todo en varios días, aqui les pongo el código del método que copia el fichero a ver si me pueden ayudar:

Código PHP:

        
public static void copy(String source_nameString dest_nameboolean overridethrows IOException
        
{
                
File source_file = new File(source_name);
                
File destination_file = new File(dest_name System.getProperty("file.separator") + source_file.getName());
                
FileInputStream source null;
                
FileOutputStream destination null;
                
byte[] buffer;
                
int bytes_read;
                              
                try {
                
// Primero asegurarse de que el source_file
                // Existe, es un fichero y se puede leer.
                 
if (!source_file.exists() || !source_file.isFile())
                         throw new 
FileCopyException("FileCopy: no existe el fichero origen: " +  source_name);
                 if (!
source_file.canRead())
                         throw new 
FileCopyException("FileCopy: no hay permisos de lectura en fichero origen: " source_name);
                                        
                 
// Si el destino existe asegurarse de que se puede escribir
                 // y preguntar antes de sobreescribirlo.Si el destino no existe asegurarse que el directorio existe y es escribible
                 
if (destination_file.exists()) {
                         if (
destination_file.isFile()) {// isFile  
                                 
                                 
if (!destination_file.canWrite())
                                     throw new 
FileCopyException("FileCopy: no existen permisos de escritura "+"file is unwriteable: " dest_name);
                                
                                 if (!
override)
                                         throw new 
FileCopyException("FileCopy: cancelado no se puede sobreescribir el fichero.");
                                 }
                         else
                                 throw new 
FileCopyException("FileCopy: destination is not a file: " +  dest_name);
                 }
                 else {
                         
File parentdir parent(destination_file);//Vuelvo a coger el directorio no hace falta se puede cambiar
                         
if (!parentdir.exists())
                                 throw new 
FileCopyException("FileCopy: el direcorio destino no existe " 
                                                                       
dest_name);
                         if (!
parentdir.canWrite())
                                 throw new 
FileCopyException("FileCopy: no existen permisos de escritura " +
                                                 
"en el Directorio destino" dest_name);
                 }
                 
// If we've gotten this far, then everything is okay; we can
                 // copy the file.
                 
source = new FileInputStream(source_file);
                 
destination = new FileOutputStream(destination_file);
                 
buffer = new byte[1024*500];
                 while(
true) {
                         
bytes_read source.read(buffer);
                         if (
bytes_read == -1) break;
                         
destination.write(buffer0bytes_read);
                 }
                  
//System.out.print(source_file.getName()+ "Copiado OK");
                
}
                
                
// No importa que pase siempre hay que cerrar cualquier streams que se haya abierto.
                
finally {
                        if (
source != null)
                                try { 
source.close(); } catch (IOException e) { ; }
                                if (
destination != null)
                                        try { 
destination.close(); } catch (IOException e) { ; }
                }
        } 
Espero me puedan ayudar.
Saludos