java复制文件的4种方式及拷贝文件到另一个目录下的实例代码

这篇文章主要介绍了java复制文件的4种方式,通过实例带给大家介绍了java 拷贝文件到另一个目录下的方法,需要的朋友可以参考下

尽管Java提供了一个可以处理文件的IO操作类。 但是没有一个复制文件的方法。 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候。 然而有几种方法可以进行Java文件复制操作,下面列举出4中最受欢迎的方式。

1. 使用FileStreams复制

这是最经典的方式将一个文件的内容复制到另一个文件中。 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B。 这是第一个方法的代码:

private static void copyFileUsingFileStreams(File source, File dest) 

 


    throws IOException {   

 


  InputStream input = null;   

 


  OutputStream output = null;   

 


  try { 

 


      input = new FileInputStream(source); 

 


      output = new FileOutputStream(dest);     

 


      byte[] buf = new byte[1024];     

 


      int bytesRead;     

 


      while ((bytesRead = input.read(buf)) > 0) { 

 


        output.write(buf, 0, bytesRead); 

 


      } 

 


  } finally { 

 


    input.close(); 

 


    output.close(); 

 


  } 

 


}

正如你所看到的我们执行几个读和写操作try的数据,所以这应该是一个低效率的,下一个方法我们将看到新的方式。

2. 使用FileChannel复制

Java NIO包括transferFrom方法,根据文档应该比文件流复制的速度更快。 这是第二种方法的代码:

private static void copyFileUsingFileChannels(File source, File dest) throws IOException {   

 


    FileChannel inputChannel = null;   

 


    FileChannel outputChannel = null;   

 


  try { 

 


    inputChannel = new FileInputStream(source).getChannel(); 

 


    outputChannel = new FileOutputStream(dest).getChannel(); 

 


    outputChannel.transferFrom(inputChannel, 0, inputChannel.size()); 

 


  } finally { 

 


    inputChannel.close(); 

 


    outputChannel.close(); 

 


  } 

 


}

3. 使用Commons IO复制

Apache Commons IO提供拷贝文件方法在其FileUtils类,可用于复制一个文件到另一个地方。它非常方便使用Apache Commons FileUtils类时,您已经使用您的项目。基本上,这个类使用Java NIO FileChannel内部。 这是第三种方法的代码:

private static void copyFileUsingApacheCommonsIO(File source, File dest) 

 


    throws IOException { 

 


  FileUtils.copyFile(source, dest); 

 


}

4. 使用Java7的Files类复制

如果你有一些经验在Java 7中你可能会知道,可以使用复制方法的Files类文件,从一个文件复制到另一个文件。 这是第四个方法的代码:

private static void copyFileUsingJava7Files(File source, File dest) 

 


    throws IOException {   

 


    Files.copy(source.toPath(), dest.toPath()); 

 


}

下面看下java拷贝文件到另一个目录下的实现代码,具体代码如下所示:

package com.util;

 



import java.io.File;

 



import java.io.FileInputStream;

 



import java.io.FileOutputStream;

 



import java.io.InputStream;

 



public class TestHtml {

 


/** 

 


* 复制单个文件 

 


* @param oldPath String 原文件路径 如:c:/fqf.txt 

 


* @param newPath String 复制后路径 如:f:/fqf.txt 

 


* @return boolean 

 



*/ 

 



public void copyFile(String oldPath, String newPath) { 

 



try { 

 



int bytesum = 0; 

 



int byteread = 0; 

 



File oldfile = new File(oldPath); 

 



if (oldfile.exists()) { //文件存在时 


 



InputStream inStream = new FileInputStream(oldPath); //读入原文件 


 



FileOutputStream fs = new FileOutputStream(newPath); 

 



byte[] buffer = new byte[1444]; 

 



int length; 

 



while ( (byteread = inStream.read(buffer)) != -1) { 

 


bytesum += byteread; //字节数 文件大小 


 


System.out.println(bytesum); 

 


fs.write(buffer, 0, byteread); 

 


} 

 


inStream.close(); 

 


} 

 


} 

 



catch (Exception e) { 

 


System.out.println("复制单个文件操作出错"); 

 


e.printStackTrace();

 


}

 


}

 


/** 

 


* 复制整个文件夹内容 

 


* @param oldPath String 原文件路径 如:c:/fqf 

 


* @param newPath String 复制后路径 如:f:/fqf/ff 

 


* @return boolean 

 



*/ 

 



public void copyFolder(String oldPath, String newPath) {

 



try { 

 


(new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹 


 


File a=new File(oldPath); 

 


String[] file=a.list(); 

 


File temp=null; 

 



for (int i = 0; i < file.length; i++) { 

 



if(oldPath.endsWith(File.separator)){ 

 


temp=new File(oldPath+file[i]); 

 


} 

 



else{ 

 


temp=new File(oldPath+File.separator+file[i]); 

 


}

 



if(temp.isFile()){ 

 



FileInputStream input = new FileInputStream(temp); 

 



FileOutputStream output = new FileOutputStream(newPath + "/" + 

 


(temp.getName()).toString()); 

 



byte[] b = new byte[1024 * 5]; 

 



int len; 

 



while ( (len = input.read(b)) != -1) { 

 


output.write(b, 0, len); 

 


} 

 


output.flush(); 

 


output.close(); 

 


input.close(); 

 


} 

 



if(temp.isDirectory()){//如果是子文件夹 


 


copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]); 

 


} 

 


} 

 


} 

 



catch (Exception e) { 

 


System.out.println("复制整个文件夹内容操作出错"); 

 


e.printStackTrace();

 


}

 


}

 



public static void main(String[] args)throws Exception {

 


// //这是你的源文件,本身是存在的

 


// File beforefile = new File("C:/Users/Administrator/Desktop/Untitled-2.html");

 


//

 


// //这是你要保存之后的文件,是自定义的,本身不存在

 


// File afterfile = new File("C:/Users/Administrator/Desktop/jiekou0/Untitled-2.html");

 


//

 


// //定义文件输入流,用来读取beforefile文件

 


// FileInputStream fis = new FileInputStream(beforefile);

 


//

 


// //定义文件输出流,用来把信息写入afterfile文件中

 


// FileOutputStream fos = new FileOutputStream(afterfile);

 


//

 


// //文件缓存区

 


// byte[] b = new byte[1024];

 


// //将文件流信息读取文件缓存区,如果读取结果不为-1就代表文件没有读取完毕,反之已经读取完毕

 


// while(fis.read(b)!=-1){

 


// //将缓存区中的内容写到afterfile文件中

 


// fos.write(b);

 


// fos.flush();

 


// }

 


String oldPath="C:/Users/Administrator/Desktop/Untitled-2.html";

 


String newPath="C:/Users/Administrator/Desktop/jiekou0/Untitled-2.html";

 


TestHtml t=new TestHtml();

 


t.copyFile(oldPath, newPath);

 


}

 


}

总结

以上所述是小编给大家介绍的java复制文件的4种方式及拷贝文件到另一个目录下的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。