2011-02-15 27 views
12

Im tratando de copiar un archivo en java y moverlo a una nueva carpeta. Este es el código que he estado usando, pero siempre obtengo este error "(Acceso denegado) en el directorio especificado". ¿Hay alguna manera de solucionar esto o una mejor forma de copiar los archivos? graciasCómo copiar archivos en java

try{ 
      File f1 = new File(fpath); 
      File f2 = new File("C:/users/peter/documents/foldertest2/hats"); 
      InputStream in = new FileInputStream(f1); 

      //For Append the file. 
      //OutputStream out = new FileOutputStream(f2,true); 

      //For Overwrite the file. 
      OutputStream out = new FileOutputStream(f2); 

      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = in.read(buf)) > 0){ 
      out.write(buf, 0, len); 
      } 
      in.close(); 
      out.close(); 
      System.out.println("File copied."); 
     } 
     catch(FileNotFoundException ex){ 
      System.out.println(ex.getMessage() + " in the specified directory."); 
      System.exit(0); 
     } 
     catch(IOException e){ 
      System.out.println(e.getMessage());  
     } 

ACTUALIZACIÓN: he comprobado los permisos de carpeta y todos son abiertas para todos los usuarios y la mía

+0

Suena como que tienes algunos problemas de permisos. Será mejor que hables con el propietario del archivo que intentas leer o con el directorio en el que intentas escribir y pídele que conceda autorización suficiente. – duffymo

+0

Lista de preguntas: ¿cómo se ve fpath? ¿Existen sombreros?es un directorio? – josefx

+0

fpath is = to "C:/users/peter/desktop/hat3", existe sombreros y es una carpeta en la carpeta "foldertest2" en mi carpeta de documentos. Probé otras carpetas y todavía no funciona – Peter

Respuesta

2

Editar ups en mal estado, el segundo intento:

Usted tiene que dar la FileOutputStream un nombre de archivo válido, simplemente añadir el nombre de su archivo a la ruta de destino C:/users/peter/documents/foldertest2/hats/hat3 con sólo el nombre de la carpeta que tratará de acceder al carpeta como si fuera un archivo y fallara

3

¿Hay una manera que puede solucionar este problema o una mejor manera de copiar los archivos ?

Si tiene la opción, recomiendo que vayas con Java version 7, y utiliza el método Path.copyTo.

Copie el archivo ubicado en esta ruta a una ubicación de destino. [...]

De lo contrario, recomendaría al menos mediante los paquetes NIO y FileChannels.

0

Si obtiene esta excepción, el acceso es realmente denegado, es decir, simplemente no tiene derechos para escribir en el directorio o archivo especificado. Entonces, primero verifíquelo. Intente, por ejemplo, crear el archivo en el directorio especificado manualmente. ¿Probablemente intentas crear un archivo en el directorio de inicio de otra persona? ¿O su programa Java se está ejecutando como otro usuario? ¿Qué hay de foldertest2? ¿Existe y puede escribirse? Intenta copiar tu archivo allí.

Y el consejo final. Cuando consiga copiar el archivo, le recomendaría que use IOUtils.copy() (de jacarta commons). Lo uso mucho. Hace casi exactamente lo que implementó, pero tiene que escribir el código solo una línea.

36

Apache Commons IO es también otra forma de hacerlo, específicamente FileUtils.copyFile();, se encarga de todo el trabajo pesado para usted.

0

Hmm, parece que está intentando ejecutar esto en Windows, ¿no debería usar \ en su ruta en lugar de /?

Como dijo AlexR, verifique sus permisos en el directorio en el que está intentando escribir.

Cuestiones relacionadas