Copia di file da una directory a un’altra in Java

Voglio copiare i file da una directory a un’altra (sottodirectory) usando Java. Ho una directory, dir, con file di testo. Ripeto i primi 20 file in dir, e voglio copiarli in un’altra directory nella directory dir, che ho creato proprio prima dell’iterazione. Nel codice, voglio copiare la review (che rappresenta il file di testo o revisione) per trainingDir . Come posso fare questo? Non sembra esserci una tale funzione (o non ho potuto trovare). Grazie.

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

Per ora questo dovrebbe risolvere il tuo 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(); } 

Classe FileUtils dalla libreria apache commons-io , disponibile dalla versione 1.2.

Usare strumenti di terze parti invece di scrivere tutte le utility da noi stessi sembra essere un’idea migliore. Può far risparmiare tempo e altre risorse preziose.

Non esiste ancora un metodo di copia dei file nell’API standard. Le tue opzioni sono:

  • Scrivilo tu stesso, usando FileInputStream, FileOutputStream e un buffer per copiare byte da uno all’altro – o meglio ancora, usa FileChannel.transferTo ()
  • FileUtils degli utenti Apache Commons
  • Aspetta NIO2 in Java 7

In Java 7, esiste un metodo standard per copiare i file in java:

Files.copy.

Si integra con I / O nativo O / S per prestazioni elevate.

Vedi il mio A su Standard modo conciso per copiare un file in Java? per una descrizione completa dell’uso.

L’esempio che segue da Java Tips è piuttosto semplice. Da allora sono passato a Groovy per le operazioni relative al file system: molto più semplice ed elegante. Ma ecco i Suggerimenti Java che ho usato in passato. Manca la robusta gestione delle eccezioni necessaria per renderlo infallibile.

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

Se vuoi copiare un file e non muoverlo puoi codificarlo in questo modo.

 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 è utile. puoi fare sotto le attività.

  1. copiare il file da una directory a un’altra directory.

    usa copyFileToDirectory(File srcFile, File destDir)

  2. copia directory da una directory a un’altra directory.

    usa copyDirectory(File srcDir, File destDir)

  3. copiare i contenuti di un file su un altro

    usa static void copyFile(File srcFile, File destFile)

Sembra che tu stia cercando la soluzione semplice (una buona cosa). Raccomando di usare FileUtils.copyDirectory di Apache Common:

Copia un’intera directory in una nuova posizione preservando le date del file.

Questo metodo copia la directory specificata e tutte le relative directory e file secondari nella destinazione specificata. La destinazione è la nuova posizione e il nome della directory.

La directory di destinazione viene creata se non esiste. Se la directory di destinazione esisteva, allora questo metodo unisce l’origine con la destinazione, con l’origine che ha la precedenza.

Il tuo codice potrebbe essere gradevole e semplice come questo:

 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 ha molte classi util simili come Apache Commons Lang. Quindi c’è 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); 

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

Di seguito è riportato il codice modificato di Brian che copia i file dalla posizione di origine alla posizione di destinazione.

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

I comuni di Apache FileUtils saranno utili, se vuoi spostare solo i file dalla directory di origine a quella di destinazione invece di copiare l’intera directory, puoi fare:

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

Se vuoi saltare le directory, puoi fare:

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

È ansible risolvere il problema con la copia del file di origine in un nuovo file ed eliminare l’originale.

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

Ispirato alla risposta di Mohit in questa discussione . Applicabile solo per Java 8.

È ansible utilizzare quanto segue per copiare tutto ricorsivamente da una cartella all’altra:

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

Streaming FTW.

Uso

org.apache.commons.io.FileUtils

È così a portata di mano

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

Metodo di copia

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

Le classi NIO rendono questo abbastanza semplice.

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

Copia il file da una directory a un’altra directory …

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

qui è semplicemente un codice java per copiare i dati da una cartella all’altra, devi solo dare l’input della fonte e della destinazione.

 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 

questo è un codice funzionante per quello che vuoi..attimi sapere se è stato utile

utilizzo il seguente codice per trasferire un CommonMultipartFile caricato in una cartella e copiarlo in una cartella di destinazione nella cartella del progetto web webapps (cioè),

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

È ansible utilizzare il seguente codice per copiare i file da una directory a un’altra

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

codice seguente per copiare i file da una directory a un’altra

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

Neanche questo complicato e nessuna importazione richiesta in Java 7:

Il metodo renameTo( ) cambia il nome di un file:

public boolean renameTo( File destination)

Ad esempio, per cambiare il nome del file src.txt nella directory di lavoro corrente in dst.txt , scrivere:

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

Questo è tutto.

Riferimento:

Harold, Elliotte Rusty (2006-05-16). I / O Java (p. 393). O’Reilly Media. Edizione Kindle.

È ansible utilizzare il seguente codice per copiare i file da una directory a un’altra

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

Seguendo la funzione ricorsiva ho scritto, se aiuta qualcuno. Copierà tutti i file all’interno di sourcedirectory in destinationDirectory.

esempio:

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

usi renameTo () – non ovvio, lo so … ma è l’equivalente Java di move …