Copiar o mover un fichero

3344 vistas

Copiar ficheros:
El API no proporciona ninguna solución para la copia de ficheros, no obstante, aquà presentamos un trozo de código que tendrÃa que funcionar.



java
  1. /** copia el fichero source en el fichero destination
  2.  * devuelve true si funciona correctamente
  3.  */
  4. public static boolean copiar( File source, File destination )
  5. {
  6.         boolean resultado = false;
  7.         // declaración del flujo
  8.         java.io.FileInputStream sourceFile=null;
  9.         java.io.FileOutputStream destinationFile=null;
  10.         try {
  11.                 // creamos fichero
  12.                 destination.createNewFile();
  13.                 // abrimos flujo
  14.                 sourceFile = new java.io.FileInputStream(source);
  15.                 destinationFile = new java.io.FileOutputStream(destination);
  16.                 // lectura por segmentos de 0.5Mb
  17.                 byte buffer[]=new byte[512*1024];
  18.                 int nbLectura;
  19.                 while( (nbLectura = sourceFile.read(buffer)) != -1 ) {
  20.                         destinationFile.write(buffer, 0, nbLectura);
  21.                 }
  22.                 // copia correcta
  23.                 resultat = true;
  24.         } catch( java.io.FileNotFoundException f ) {
  25.         } catch( java.io.IOException e ) {
  26.         } finally {
  27.                 // pase lo que pase, cerramos flujo
  28.                 try {
  29.                         sourceFile.close();
  30.                 } catch(Exception e) { }
  31.                 try {
  32.                         destinationFile.close();
  33.                 } catch(Exception e) { }
  34.         }
  35.         return( resultat );
  36. }



Mover un fichero:
Podemos realizar el desplazamiento de un fichero gracias al método renameTo(java.io.File) de la clase java.io.File. Pero esta solución sólo funciona dentro de en un disco físico...

Vamos pues a usar el algoritmo de copia cuando el cambio de nombre no sea suficiente:



java
  1. public static boolean desplazar(File source, File destination) {
  2.         if( !destination.exist() ) {
  3.                 // intentamos con renameTo
  4.                 boolean result = source.renameTo(destination);
  5.                 if( !result ) {
  6.                         // intentamos copiar
  7.                         result = true;
  8.                         result &= copiar(source, destination);
  9.                         result &= source.delete();
  10.                 } return(result);
  11.         } else {
  12.                 // Si el fichero destination existe, cancelamos...
  13.                 return(false);
  14.         }
  15. }