2012-02-10 21 views
8

Me gustaría copiar un archivo de un directorio a otro usando Java y las clases FileUtils de apache org commons.Java - Copie el archivo a otro directorio usando FileUtils y copyFileToDirectory - no funciona -?

Escribí un programa rápido de Java para probar en mi sistema local. Aquí está el código. El archivo existe, pero la copia del archivo a otro directorio no funciona. ¿Qué me estoy perdiendo? ¿Hay alguna sintaxis incorrecta en alguna parte?

import org.apache.commons.io.FileUtils; 
import java.io.File; 

class MoveFile { 

    public static void main(String[] args) { 
     MoveFile myobj = new MoveFile(); 
     myobj.moveTheFile(); 
    } 

    public void moveTheFile() { 
     try { 
      File destDir = new File("C:\\Folder1\\temp2"); 
      File srcFile = new File("C:\\Folder1\\temp\\card.png"); 
      FileUtils.copyFileToDirectory(srcFile, destDir); 
     } catch(Exception e) { 
     } 
    } 

} 
+2

¿Qué significa eso que no funciona? cualquier error? datos no copiados? – kosa

+0

¿existe el archivo inicial? ¿existe el directorio de destino? ¿Qué dice la excepción cuando falla? –

+0

Tanto el archivo como el directorio existen. No hay excepciones registradas. – katura

Respuesta

9

Replicó su error y solo falla cuando el programa no tiene permiso para escribir en la carpeta de destino. Incluso la captura de un stacktrace arrojable e imprimible no muestra información y el método es bastante silencioso ... si la carpeta no existe, el método la crea, por lo que descarta esa posible corrección.

Revisar los permisos de escritura en la carpeta de destino

+0

Pasé por alto un error en la variable del directorio de destino: debería haber sido Folder1/temp/temp2. El directorio tenía permisos de "solo lectura", así que lo cambié. Ahora el programa de prueba funciona. Gracias por tu ayuda. – katura

2

Nunca es una buena idea hacer tragar excepciones. Haga un e.printstacktrace() en su mecanismo de manejo de excepciones para más información. Como no especificó ninguna otra información, lo primero que se le viene a la mente es que si usa Windows Vista o una versión posterior, normalmente le solicitará el consentimiento del administrador al colocar los elementos directamente en su directorio C:\.

Para ver si este es el problema, le recomiendo que pruebe esto en otros directorios como My Documents o, de lo contrario, deshabilite el UAC.

1

Haz

destDir.mkdirs(); 

o

FileUtils.forceMkdir(destDir); 

para crear el directorio temp2 primero.

+0

El directorio temp2 ya está creado en el sistema, por lo que no sería necesario hacer el directorio. – katura

Cuestiones relacionadas