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种方式及拷贝文件到另一个目录下的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
https://blog.csdn.net/dxyzhbb/article/details/110388594 标签:文件,java,String,复制,oldPath,File,new,拷贝 From: https://www.cnblogs.com/sunny3158/p/16656318.html