Copia de archivos de un directorio a otro en Java

Quiero copiar archivos de un directorio a otro (subdirectorio) usando Java. Tengo un directorio, dir, con archivos de texto. Repetiré los primeros 20 archivos en dir, y quiero copiarlos a otro directorio en el directorio dir, que he creado justo antes de la iteración. En el código, quiero copiar la review (que representa el i-ésimo archivo de texto o reseña) a trainingDir . ¿Cómo puedo hacer esto? Parece que no hay tal función (o no pude encontrar). Gracias.

 boolean success = false; File[] reviews = dir.listFiles(); String trainingDir = dir.getAbsolutePath() + "/trainingData"; File trDir = new File(trainingDir); success = trDir.mkdir(); for(int i = 1; i <= 20; i++) { File review = reviews[i]; } 

Por ahora esto debería resolver su problema

 File source = new File("H:\\work-temp\\file"); File dest = new File("H:\\work-temp\\file2"); try { FileUtils.copyDirectory(source, dest); } catch (IOException e) { e.printStackTrace(); } 

Clase FileUtils de la biblioteca Apache commons-io , disponible desde la versión 1.2.

Usar herramientas de terceros en lugar de escribir todos los servicios por nuestra cuenta parece ser una mejor idea. Puede ahorrar tiempo y otros recursos valiosos.

No hay un método de copia de archivo en la API estándar (todavía). Tus opciones son:

  • Escríbelo usted mismo, usando un FileInputStream, un FileOutputStream y un buffer para copiar bytes de uno a otro, o mejor aún, use FileChannel.transferTo ()
  • Usuario Apache Commons ‘ FileUtils
  • Esperar a NIO2 en Java 7

En Java 7, hay un método estándar para copiar archivos en Java:

Files.copy.

Se integra con E / S nativas de O / S para un alto rendimiento.

Ver mi A en forma concisa estándar para copiar un archivo en Java? para una descripción completa del uso.

El siguiente ejemplo de Java Tips es bastante sencillo. Desde entonces, he cambiado a Groovy para las operaciones relacionadas con el sistema de archivos, mucho más fácil y elegante. Pero aquí está el Consejo de Java uno que utilicé en el pasado. Carece del manejo robusto de excepciones que se requiere para hacerlo a prueba de tontos.

  public void copyDirectory(File sourceLocation , File targetLocation) throws IOException { if (sourceLocation.isDirectory()) { if (!targetLocation.exists()) { targetLocation.mkdir(); } String[] children = sourceLocation.list(); for (int i=0; i 0) { out.write(buf, 0, len); } in.close(); out.close(); } } 

Si quiere copiar un archivo y no moverlo, puede codificar de esta manera.

 private static void copyFile(File sourceFile, File destFile) throws IOException { if (!sourceFile.exists()) { return; } if (!destFile.exists()) { destFile.createNewFile(); } FileChannel source = null; FileChannel destination = null; source = new FileInputStream(sourceFile).getChannel(); destination = new FileOutputStream(destFile).getChannel(); if (destination != null && source != null) { destination.transferFrom(source, 0, source.size()); } if (source != null) { source.close(); } if (destination != null) { destination.close(); } } 

Apache commons Fileutils es útil. puedes hacer actividades debajo de

  1. copiando archivo de un directorio a otro.

    use copyFileToDirectory(File srcFile, File destDir)

  2. copiar el directorio de un directorio a otro.

    use copyDirectory(File srcDir, File destDir)

  3. copiar el contenido de un archivo a otro

    use static void copyFile(File srcFile, File destFile)

Parece que estás buscando la solución simple (algo bueno). Recomiendo usar el FileUtils.copyDirectory de Apache Common:

Copia un directorio completo a una nueva ubicación conservando las fechas del archivo.

Este método copia el directorio especificado y todos sus directorios y archivos secundarios al destino especificado. El destino es la nueva ubicación y el nombre del directorio.

El directorio de destino se crea si no existe. Si el directorio de destino existió, este método combina la fuente con el destino, con la fuente tomando precedencia.

Su código podría gustarle así de simple:

 File trgDir = new File("/tmp/myTarget/"); File srcDir = new File("/tmp/mySource/"); FileUtils.copyDirectory(srcDir, trgDir); 
 File sourceFile = new File("C:\\Users\\Demo\\Downloads\\employee\\"+img); File destinationFile = new File("\\images\\" + sourceFile.getName()); FileInputStream fileInputStream = new FileInputStream(sourceFile); FileOutputStream fileOutputStream = new FileOutputStream( destinationFile); int bufferSize; byte[] bufffer = new byte[512]; while ((bufferSize = fileInputStream.read(bufffer)) > 0) { fileOutputStream.write(bufffer, 0, bufferSize); } fileInputStream.close(); fileOutputStream.close(); 

Spring Framework tiene muchas clases de utilidades similares como Apache Commons Lang. Entonces, hay org.springframework.util.FileSystemUtils

 File src = new File("/home/user/src"); File dest = new File("/home/user/dest"); FileSystemUtils.copyRecursively(src, dest); 
 import static java.nio.file.StandardCopyOption.*; ... Files.copy(source, target, REPLACE_EXISTING); 

Fuente: https://docs.oracle.com/javase/tutorial/essential/io/copy.html

A continuación se muestra el código modificado de Brian que copia los archivos de la ubicación de la fuente a la ubicación de destino.

 public class CopyFiles { public static void copyFiles(File sourceLocation , File targetLocation) throws IOException { if (sourceLocation.isDirectory()) { if (!targetLocation.exists()) { targetLocation.mkdir(); } File[] files = sourceLocation.listFiles(); for(File file:files){ InputStream in = new FileInputStream(file); OutputStream out = new FileOutputStream(targetLocation+"/"+file.getName()); // Copy the bits from input stream to output stream byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); } } } 

Apache commons FileUtils será útil, si solo desea mover archivos del directorio de origen al de destino en lugar de copiar todo el directorio, puede hacer:

 for (File srcFile: srcDir.listFiles()) { if (srcFile.isDirectory()) { FileUtils.copyDirectoryToDirectory(srcFile, dstDir); } else { FileUtils.copyFileToDirectory(srcFile, dstDir); } } 

Si desea omitir directorios, puede hacer:

 for (File srcFile: srcDir.listFiles()) { if (!srcFile.isDirectory()) { FileUtils.copyFileToDirectory(srcFile, dstDir); } } 

Puede solucionar el problema con copiar el archivo de origen a un nuevo archivo y eliminar el original.

 public class MoveFileExample { public static void main(String[] args) { InputStream inStream = null; OutputStream outStream = null; try { File afile = new File("C:\\folderA\\Afile.txt"); File bfile = new File("C:\\folderB\\Afile.txt"); inStream = new FileInputStream(afile); outStream = new FileOutputStream(bfile); byte[] buffer = new byte[1024]; int length; //copy the file content in bytes while ((length = inStream.read(buffer)) > 0) { outStream.write(buffer, 0, length); } inStream.close(); outStream.close(); //delete the original file afile.delete(); System.out.println("File is copied successful!"); } catch(IOException e) { e.printStackTrace(); } } } 

Inspirado por la respuesta de Mohit en este hilo . Aplicable solo para Java 8.

Lo siguiente puede usarse para copiar todo recursivamente de una carpeta a otra:

 public static void main(String[] args) throws IOException { Path source = Paths.get("/path/to/source/dir"); Path destination = Paths.get("/path/to/dest/dir"); List sources = Files.walk(source).collect(toList()); List destinations = sources.stream() .map(source::relativize) .map(destination::resolve) .collect(toList()); for (int i = 0; i < sources.size(); i++) { Files.copy(sources.get(i), destinations.get(i)); } } 

Stream-style FTW.

Utilizar

org.apache.commons.io.FileUtils

Es muy útil

 File dir = new File("D:\\mital\\filestore"); File[] files = dir.listFiles(new File_Filter("*"+ strLine + "*.txt")); for (File file : files){ System.out.println(file.getName()); try { String sourceFile=dir+"\\"+file.getName(); String destinationFile="D:\\mital\\storefile\\"+file.getName(); FileInputStream fileInputStream = new FileInputStream(sourceFile); FileOutputStream fileOutputStream = new FileOutputStream( destinationFile); int bufferSize; byte[] bufffer = new byte[512]; while ((bufferSize = fileInputStream.read(bufffer)) > 0) { fileOutputStream.write(bufffer, 0, bufferSize); } fileInputStream.close(); fileOutputStream.close(); } catch (Exception e) { e.printStackTrace(); } } 

Java 8

 Path sourcepath = Paths.get("C:\\data\\temp\\mydir"); Path destinationepath = Paths.get("C:\\data\\temp\\destinationDir"); Files.walk(sourcepath) .forEach(source -> copy(source, destinationepath.resolve(sourcepath.relativize(source)))); 

Copiar método

 static void copy(Path source, Path dest) { try { Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } 

Las clases de NIO lo hacen bastante simple.

http://www.javalobby.org/java/forums/t17036.html

Copie el archivo de un directorio a otro directorio …

 FileChannel source=new FileInputStream(new File("source file path")).getChannel(); FileChannel desti=new FileOutputStream(new File("destination file path")).getChannel(); desti.transferFrom(source, 0, source.size()); source.close(); desti.close(); 

aquí hay simplemente un código Java para copiar datos de una carpeta a otra, solo tiene que dar la entrada de la fuente y el destino.

 import java.io.*; public class CopyData { static String source; static String des; static void dr(File fl,boolean first) throws IOException { if(fl.isDirectory()) { createDir(fl.getPath(),first); File flist[]=fl.listFiles(); for(int i=0;i0;i--) { if(name.charAt(i)==92) { break; } } for(;i 

este es un código de trabajo para lo que quieres ... dime si me ayudó

Utilizo el siguiente código para transferir un CommonMultipartFile cargado a una carpeta y copiar ese archivo a una carpeta de destino en webapps (es decir) carpeta de proyecto web,

  String resourcepath = "C:/resources/images/" + commonsMultipartFile.getOriginalFilename(); File file = new File(resourcepath); commonsMultipartFile.transferTo(file); //Copy File to a Destination folder File destinationDir = new File("C:/Tomcat/webapps/myProject/resources/images/"); FileUtils.copyFileToDirectory(file, destinationDir); 

Puede usar el siguiente código para copiar archivos de un directorio a otro

 // parent folders of dest must exist before calling this function public static void copyTo( File src, File dest ) throws IOException { // recursively copy all the files of src folder if src is a directory if( src.isDirectory() ) { // creating parent folders where source files is to be copied dest.mkdirs(); for( File sourceChild : src.listFiles() ) { File destChild = new File( dest, sourceChild.getName() ); copyTo( sourceChild, destChild ); } } // copy the source file else { InputStream in = new FileInputStream( src ); OutputStream out = new FileOutputStream( dest ); writeThrough( in, out ); in.close(); out.close(); } } 
  File file = fileChooser.getSelectedFile(); String selected = fc.getSelectedFile().getAbsolutePath(); File srcDir = new File(selected); FileInputStream fii; FileOutputStream fio; try { fii = new FileInputStream(srcDir); fio = new FileOutputStream("C:\\LOvE.txt"); byte [] b=new byte[1024]; int i=0; try { while ((fii.read(b)) > 0) { System.out.println(b); fio.write(b); } fii.close(); fio.close(); 

siguiente código para copiar archivos de un directorio a otro

 File destFile = new File(targetDir.getAbsolutePath() + File.separator + file.getName()); try { showMessage("Copying " + file.getName()); in = new BufferedInputStream(new FileInputStream(file)); out = new BufferedOutputStream(new FileOutputStream(destFile)); int n; while ((n = in.read()) != -1) { out.write(n); } showMessage("Copied " + file.getName()); } catch (Exception e) { showMessage("Cannot copy file " + file.getAbsolutePath()); } finally { if (in != null) try { in.close(); } catch (Exception e) { } if (out != null) try { out.close(); } catch (Exception e) { } } 
 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class CopyFiles { private File targetFolder; private int noOfFiles; public void copyDirectory(File sourceLocation, String destLocation) throws IOException { targetFolder = new File(destLocation); if (sourceLocation.isDirectory()) { if (!targetFolder.exists()) { targetFolder.mkdir(); } String[] children = sourceLocation.list(); for (int i = 0; i < children.length; i++) { copyDirectory(new File(sourceLocation, children[i]), destLocation); } } else { InputStream in = new FileInputStream(sourceLocation); OutputStream out = new FileOutputStream(targetFolder + "\\"+ sourceLocation.getName(), true); System.out.println("Destination Path ::"+targetFolder + "\\"+ sourceLocation.getName()); // Copy the bits from instream to outstream byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); noOfFiles++; } } public static void main(String[] args) throws IOException { File srcFolder = new File("C:\\sourceLocation\\"); String destFolder = new String("C:\\targetLocation\\"); CopyFiles cf = new CopyFiles(); cf.copyDirectory(srcFolder, destFolder); System.out.println("No Of Files got Retrieved from Source ::"+cf.noOfFiles); System.out.println("Successfully Retrieved"); } } 

Ni siquiera eso es complicado y no se requieren importaciones en Java 7:

El método renameTo( ) cambia el nombre de un archivo:

public boolean renameTo( File destination)

Por ejemplo, para cambiar el nombre del archivo src.txt en el directorio de trabajo actual a dst.txt , debe escribir:

 File src = new File(" src.txt"); File dst = new File(" dst.txt"); src.renameTo( dst); 

Eso es.

Referencia:

Harold, Elliotte Rusty (2006-05-16). E / S de Java (página 393). O’Reilly Media. Versión Kindle.

Puede usar el siguiente código para copiar archivos de un directorio a otro

 public static void copyFile(File sourceFile, File destFile) throws IOException { InputStream in = null; OutputStream out = null; try { in = new FileInputStream(sourceFile); out = new FileOutputStream(destFile); byte[] buffer = new byte[1024]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } } catch(Exception e){ e.printStackTrace(); } finally { in.close(); out.close(); } } 

Siguiendo la función recursiva que he escrito, si ayuda a alguien. Copiará todos los archivos dentro del directorio original a destinationDirectory.

ejemplo:

función (“D: / MyDirectory”, “D: / MyDirectoryNew”, “D: / MyDirectory”);

 public static void rfunction(String sourcePath, String destinationPath, String currentPath){ File file=new File(currentPath); FileInputStream fi=null; FileOutputStream fo=null; if(file.isDirectory()){ String[] fileFolderNamesArray=file.list(); File folderDes=new File(destinationPath); if(!folderDes.exists()){ folderDes.mkdirs(); } for (String fileFolderName : fileFolderNamesArray) { rfunction(sourcePath, destinationPath+"/"+fileFolderName, currentPath+"/"+fileFolderName); } }else{ try { File destinationFile=new File(destinationPath); fi=new FileInputStream(file); fo=new FileOutputStream(destinationPath); byte[] buffer=new byte[1024]; int ind=0; while((ind=fi.read(buffer))>0){ fo.write(buffer, 0, ind); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(null!=fi){ try { fi.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(null!=fo){ try { fo.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } 

usas renameTo () – no es obvio, lo sé … pero es el equivalente de Java de move …