varios una ruta otra manejo guardar entre directorios crear copiar carpetas carpeta archivos archivo java file directory copy

una - Copia de archivos de un directorio a otro en Java



guardar archivos en carpeta java (28)

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]; }


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); } }


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();


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<children.length; i++) { copyDirectory(new File(sourceLocation, children[i]), new File(targetLocation, children[i])); } } else { InputStream in = new FileInputStream(sourceLocation); OutputStream out = new FileOutputStream(targetLocation); // 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(); } }



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<Path> sources = Files.walk(source).collect(toList()); List<Path> 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.



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.


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

Parece que estás buscando la solución simple (algo bueno). Recomiendo usar el FileUtils.copyDirectory 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);


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.


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(); } } }


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(); } }


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(); } }


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(); } }


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(); } } } } }


Utilizar

org.apache.commons.io.FileUtils

Es muy útil


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);


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;i<flist.length;i++) { if(flist[i].isDirectory()) { dr(flist[i],false); } else { copyData(flist[i].getPath()); } } } else { copyData(fl.getPath()); } } private static void copyData(String name) throws IOException { int i; String str=des; for(i=source.length();i<name.length();i++) { str=str+name.charAt(i); } System.out.println(str); FileInputStream fis=new FileInputStream(name); FileOutputStream fos=new FileOutputStream(str); byte[] buffer = new byte[1024]; int noOfBytes = 0; while ((noOfBytes = fis.read(buffer)) != -1) { fos.write(buffer, 0, noOfBytes); } } private static void createDir(String name, boolean first) { int i; if(first==true) { for(i=name.length()-1;i>0;i--) { if(name.charAt(i)==92) { break; } } for(;i<name.length();i++) { des=des+name.charAt(i); } } else { String str=des; for(i=source.length();i<name.length();i++) { str=str+name.charAt(i); } (new File(str)).mkdirs(); } } public static void main(String args[]) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("program to copy data from source to destination /n"); System.out.print("enter source path : "); source=br.readLine(); System.out.print("enter destination path : "); des=br.readLine(); long startTime = System.currentTimeMillis(); dr(new File(source),true); long endTime = System.currentTimeMillis(); long time=endTime-startTime; System.out.println("/n/n Time taken = "+time+" mili sec"); } }

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


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) { } }


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


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)


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);


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();


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(); } }


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();


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"); } }