Copier des fichiers d’un répertoire vers un autre en Java

Je veux copier des fichiers d’un répertoire vers un autre (sous-répertoire) en utilisant Java. J’ai un répertoire, dir, avec des fichiers texte. Je répète les 20 premiers fichiers de dir et je souhaite les copier dans un autre répertoire du répertoire dir, que j’ai créé juste avant l’itération. Dans le code, je souhaite copier la review (qui représente le fichier texte ou la révision) vers trainingDir . Comment puis-je faire ceci? Il ne semble pas y avoir une telle fonction (ou je ne pouvais pas trouver). Je vous remercie.

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

Pour l’instant, cela devrait résoudre votre problème

 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 de la bibliothèque apache commons-io , disponible depuis la version 1.2.

L’utilisation d’outils tiers au lieu d’écrire tous les utilitaires par nous-mêmes semble être une meilleure idée. Cela permet de gagner du temps et d’autres ressources précieuses.

Il n’existe pas encore de méthode de copie de fichier dans l’API standard. Vos options sont les suivantes:

  • Écrivez-le vous-même, en utilisant un FileInputStream, un FileOutputStream et un tampon pour copier des octets de l’un à l’autre – ou mieux encore, utilisez FileChannel.transferTo ()
  • FileUtils de l’ utilisateur Apache Commons
  • Attendez NIO2 dans Java 7

En Java 7, il existe une méthode standard pour copier des fichiers en Java:

Fichiers.copy.

Il s’intègre aux E / S natives O / S pour des performances élevées.

Voir ma façon concise A sur Standard pour copier un fichier en Java? pour une description complète de l’utilisation.

L’exemple ci-dessous de Java Tips est plutôt simple. Depuis, je suis passé à Groovy pour les opérations concernant le système de fichiers – beaucoup plus facile et élégant. Mais voici le Java Tips que j’ai utilisé par le passé. Il lui manque la gestion robuste des exceptions requirejse pour le rendre infaillible.

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

Si vous souhaitez copier un fichier sans le déplacer, vous pouvez coder comme ceci.

 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 est pratique. vous pouvez faire ci-dessous les activités.

  1. copier un fichier d’un répertoire vers un autre répertoire.

    utiliser copyFileToDirectory(File srcFile, File destDir)

  2. copier le répertoire d’un répertoire vers un autre répertoire.

    utiliser copyDirectory(File srcDir, File destDir)

  3. copier le contenu d’un fichier dans un autre

    utiliser static void copyFile(File srcFile, File destFile)

Vous semblez chercher la solution simple (une bonne chose). Je recommande d’utiliser FileUtils.copyDirectory d’ Apache Common:

Copie un répertoire entier dans un nouvel emplacement en conservant les dates du fichier.

Cette méthode copie le répertoire spécifié et tous ses répertoires et fichiers enfants vers la destination spécifiée. La destination est le nouvel emplacement et le nom du répertoire.

Le répertoire de destination est créé s’il n’existe pas. Si le répertoire de destination existait, cette méthode fusionne la source avec la destination, la source étant prioritaire.

Votre code pourrait être sympa et simple comme ceci:

 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 possède de nombreuses classes util semblables à Apache Commons Lang. Il y a donc 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); 

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

Ci-dessous, le code modifié de Brian qui copie les fichiers de l’emplacement source à l’emplacement de destination.

 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 sera pratique, si vous voulez seulement déplacer des fichiers du répertoire source vers le répertoire cible plutôt que de copier tout le répertoire, vous pouvez faire:

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

Si vous voulez ignorer les répertoires, vous pouvez faire:

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

Vous pouvez contourner le problème en copiant le fichier source dans un nouveau fichier et en supprimant l’original.

 public class MoveFileExample { public static void main(Ssortingng[] 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(); } } } 

Inspiré par la réponse de Mohit dans ce fil . Applicable uniquement pour Java 8.

Les éléments suivants peuvent être utilisés pour tout copier récursivement d’un dossier à un autre:

 public static void main(Ssortingng[] 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)); } } 

FTW style de stream.

Utilisation

org.apache.commons.io.FileUtils

C’est tellement pratique

 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 { Ssortingng sourceFile=dir+"\\"+file.getName(); Ssortingng 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)))); 

Méthode de copie

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

Les classes NIO rendent cela très simple.

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

Copier le fichier d’un répertoire vers un autre répertoire …

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

Voici simplement un code java pour copier des données d’un dossier à un autre, il suffit de donner l’entrée de la source et de la destination.

 import java.io.*; public class CopyData { static Ssortingng source; static Ssortingng 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 

ceci un code de travail pour ce que vous voulez..let me savoir si cela a aidé

CommonMultipartFile le code suivant pour transférer un CommonMultipartFile téléchargé dans un dossier et copier ce fichier dans un dossier de destination dans le dossier du projet Web webapps (c.-à-d.

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

Vous pouvez utiliser le code suivant pour copier des fichiers d’un répertoire vers un autre

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

code suivant pour copier des fichiers d’un répertoire vers un autre

 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, Ssortingng destLocation) throws IOException { targetFolder = new File(destLocation); if (sourceLocation.isDirectory()) { if (!targetFolder.exists()) { targetFolder.mkdir(); } Ssortingng[] 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(Ssortingng[] args) throws IOException { File srcFolder = new File("C:\\sourceLocation\\"); Ssortingng destFolder = new Ssortingng("C:\\targetLocation\\"); CopyFiles cf = new CopyFiles(); cf.copyDirectory(srcFolder, destFolder); System.out.println("No Of Files got Resortingeved from Source ::"+cf.noOfFiles); System.out.println("Successfully Resortingeved"); } } 

Même pas compliqué et aucune importation requirejse dans Java 7:

La méthode renameTo( ) modifie le nom d’un fichier:

public boolean renameTo( File destination)

Par exemple, pour remplacer le nom du fichier src.txt dans le répertoire de travail actuel par dst.txt , vous devez écrire:

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

C’est tout.

Référence:

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

Vous pouvez utiliser le code suivant pour copier des fichiers d’un répertoire vers un autre

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

Suite à une fonction récursive, j’ai écrit, si cela aide quelqu’un. Il copiera tous les fichiers dans le répertoire source vers destinationDirectory.

Exemple:

fonction (“D: / MyDirectory”, “D: / MyDirectoryNew”, “D: / MyDirectory”);

 public static void rfunction(Ssortingng sourcePath, Ssortingng destinationPath, Ssortingng currentPath){ File file=new File(currentPath); FileInputStream fi=null; FileOutputStream fo=null; if(file.isDirectory()){ Ssortingng[] fileFolderNamesArray=file.list(); File folderDes=new File(destinationPath); if(!folderDes.exists()){ folderDes.mkdirs(); } for (Ssortingng 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(); } } } } } 

vous utilisez renameTo () – pas évident, je sais … mais c’est l’équivalent Java de move …