如何将文件从一个位置复制到另一个位置?

我想要将文件从一个位置复制到Java中的另一个位置。

这是我到目前为止:

import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.List; public class TestArrayList { public static void main(String[] args) { File f = new File( "D:\\CBSE_Demo\\Demo_original\\fscommand\\contentplayer\\config"); List<String>temp=new ArrayList<String>(); temp.add(0, "N33"); temp.add(1, "N1417"); temp.add(2, "N331"); File[] matchingFiles = null; for(final String temp1: temp){ matchingFiles = f.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.startsWith(temp1); } }); System.out.println("size>>--"+matchingFiles.length); } } } 

这不会复制该文件,这样做的最好方法是什么?

您可以使用此 (或任何变体):

 Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING); 

此外,我build议使用File.separator/而不是\\使其在多个操作系统兼容,问题/答案在这里可用。

由于您不确定如何临时存储文件,请查看ArrayList

 List<File> files = new ArrayList(); files.add(foundFile); 

将文件List移动到单个目录中:

 List<File> files = ...; String path = "C:/destination/"; for(File file : files) { Files.copy(file.toPath(), (new File(path + file.getName())).toPath(), StandardCopyOption.REPLACE_EXISTING); } 

使用stream

 private static void copyFileUsingStream(File source, File dest) throws IOException { InputStream is = null; OutputStream os = null; try { is = new FileInputStream(source); os = new FileOutputStream(dest); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } } finally { is.close(); os.close(); } } 

使用频道

 private static void copyFileUsingChannel(File source, File dest) throws IOException { FileChannel sourceChannel = null; FileChannel destChannel = null; try { sourceChannel = new FileInputStream(source).getChannel(); destChannel = new FileOutputStream(dest).getChannel(); destChannel.transferFrom(sourceChannel, 0, sourceChannel.size()); }finally{ sourceChannel.close(); destChannel.close(); } } 

使用Apache Commons IO lib:

 private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException { FileUtils.copyFile(source, dest); } 

使用Java SE 7文件类:

 private static void copyFileUsingJava7Files(File source, File dest) throws IOException { Files.copy(source.toPath(), dest.toPath()); } 

性能testing:

  File source = new File("/Users/pankaj/tmp/source.avi"); File dest = new File("/Users/pankaj/tmp/dest.avi"); //copy file conventional way using Stream long start = System.nanoTime(); copyFileUsingStream(source, dest); System.out.println("Time taken by Stream Copy = "+(System.nanoTime()-start)); //copy files using java.nio FileChannel source = new File("/Users/pankaj/tmp/sourceChannel.avi"); dest = new File("/Users/pankaj/tmp/destChannel.avi"); start = System.nanoTime(); copyFileUsingChannel(source, dest); System.out.println("Time taken by Channel Copy = "+(System.nanoTime()-start)); //copy files using apache commons io source = new File("/Users/pankaj/tmp/sourceApache.avi"); dest = new File("/Users/pankaj/tmp/destApache.avi"); start = System.nanoTime(); copyFileUsingApacheCommonsIO(source, dest); System.out.println("Time taken by Apache Commons IO Copy = "+(System.nanoTime()-start)); //using Java 7 Files class source = new File("/Users/pankaj/tmp/sourceJava7.avi"); dest = new File("/Users/pankaj/tmp/destJava7.avi"); start = System.nanoTime(); copyFileUsingJava7Files(source, dest); System.out.println("Time taken by Java7 Files Copy = "+(System.nanoTime()-start)); 

结果:

 /* * File copy: * Time taken by Stream Copy = 44582575000 * Time taken by Channel Copy = 104138195000 * Time taken by Apache Commons IO Copy = 108396714000 * Time taken by Java7 Files Copy = 89061578000 */ 

链接:

http://www.journaldev.com/861/4-ways-to-copy-file-in-java

  public static void copyFile(File oldLocation, File newLocation) throws IOException { if ( oldLocation.exists( )) { BufferedInputStream reader = new BufferedInputStream( new FileInputStream(oldLocation) ); BufferedOutputStream writer = new BufferedOutputStream( new FileOutputStream(newLocation, false)); try { byte[] buff = new byte[8192]; int numChars; while ( (numChars = reader.read( buff, 0, buff.length ) ) != -1) { writer.write( buff, 0, numChars ); } } catch( IOException ex ) { throw new IOException("IOException when transferring " + oldLocation.getPath() + " to " + newLocation.getPath()); } finally { try { if ( reader != null ){ writer.close(); reader.close(); } } catch( IOException ex ){ Log.e(TAG, "Error closing files when transferring " + oldLocation.getPath() + " to " + newLocation.getPath() ); } } } else { throw new IOException("Old location does not exist when transferring " + oldLocation.getPath() + " to " + newLocation.getPath() ); } } 

在Java> = 7中使用新的Java文件类。

创build下面的方法并导入必要的库。

 public static void copyFile( File from, File to ) throws IOException { Files.copy( from.toPath(), to.toPath() ); } 

主要使用下面创build的方法:

 File dirFrom = new File(fileFrom); File dirTo = new File(fileTo); try { copyFile(dirFrom, dirTo); } catch (IOException ex) { Logger.getLogger(TestJava8.class.getName()).log(Level.SEVERE, null, ex); } 

注意:fileFrom是要复制到另一个文件夹中的新文件fileTo的文件。

积分 – @Scott: 用Java复制文件的标准简洁方法?