`
dannyhz
  • 浏览: 392914 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

java 复制文件

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


目录[-]

•1. 使用FileStreams复制
•2. 使用FileChannel复制
•3. 使用Commons IO复制
•4. 使用Java7的Files类复制
•5. 测试


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

5. 测试

现在看到这些方法中的哪一个是更高效的,我们会复制一个大文件使用每一个在一个简单的程序。 从缓存来避免任何性能明显我们将使用四个不同的源文件和四种不同的目标文件。 让我们看一下代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
import java.nio.file.Files;
import org.apache.commons.io.FileUtils;

public class CopyFilesExample {

public static void main(String[] args) throws InterruptedException,
IOException {

File source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile1.txt");
File dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile1.txt");

// copy file using FileStreams
long start = System.nanoTime();
long end;
copyFileUsingFileStreams(source, dest);
System.out.println("Time taken by FileStreams Copy = "
+ (System.nanoTime() - start));

// copy files using java.nio.FileChannel
source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile2.txt");
dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile2.txt");
start = System.nanoTime();
copyFileUsingFileChannels(source, dest);
end = System.nanoTime();
System.out.println("Time taken by FileChannels Copy = " + (end - start));

// copy file using Java 7 Files class
source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile3.txt");
dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile3.txt");
start = System.nanoTime();
copyFileUsingJava7Files(source, dest);
end = System.nanoTime();
System.out.println("Time taken by Java7 Files Copy = " + (end - start));

// copy files using apache commons io
source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile4.txt");
dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile4.txt");
start = System.nanoTime();
copyFileUsingApacheCommonsIO(source, dest);
end = System.nanoTime();
System.out.println("Time taken by Apache Commons IO Copy = "
+ (end - start));

}

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

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

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

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

}

输出:
Time taken by FileStreams Copy = 127572360
Time taken by FileChannels Copy = 10449963
Time taken by Java7 Files Copy = 10808333
Time taken by Apache Commons IO Copy = 17971677

正如您可以看到的FileChannels拷贝大文件是最好的方法。如果你处理更大的文件,你会注意到一个更大的速度差。 这是一个示例,该示例演示了Java中四种不同的方法可以复制一个文件。
分享到:
评论

相关推荐

    java复制文件的4种方式

    ### Java复制文件的四种方式详解 #### 概述 在Java开发过程中,文件操作是一项基本且重要的任务。其中,文件复制是经常需要用到的功能之一。尽管Java标准库并未直接提供一个简单的方法来复制文件,但开发者可以...

    java复制文件代码

    根据提供的文件标题、描述、标签以及部分内容,我们可以总结出与“Java复制文件代码”相关的重要知识点。虽然提供的代码片段存在一些未完成的部分和注释掉的代码,但是我们仍然可以从中提取有价值的信息,并且深入...

    java复制文件方法

    java复制文件方法,关于文件的操作,很全。

    java文件复制,实现文件的复制

    当需要复制一个完整的文件夹时,除了复制文件之外,还需要考虑文件夹的创建和递归复制。下面是一段示例代码: ```java private static void copyFolder(String oldPath, String newPath) { try { (new File...

    java复制文件及复制文件夹

    在Java编程中,复制文件和复制文件夹是常见的操作,特别是在处理数据迁移、备份或程序部署时。下面我们将深入探讨如何使用Java实现这些功能,并提供相关的代码示例。 首先,让我们看看如何复制单个文件。Java标准库...

    java复制文件

    ### Java复制文件知识点详解 #### 一、概述 在日常的软件开发过程中,经常会遇到需要复制文件的需求。本文将详细介绍如何使用Java语言实现文件的复制功能,并深入解析代码中的关键部分,帮助读者更好地理解文件...

    java 复制文件 io流操作

    在Java编程语言中,文件复制是一项常见的任务,主要通过IO(Input/Output)流来实现。IO流提供了从一个源读取数据并将其写入另一个目的地的机制。在这个主题中,我们将深入探讨如何使用Java的IO流进行文件复制,重点...

    java复制文件的程序

    java复制文件的程序MySQL 吉林大学,Oracle,课堂记录完整版 java,spring,struts,ssh框架有关数据源的配置 Java,jsp,项目,吉林大学

    Java文件夹复制(远程复制(网络传输),用于远程备份文件)

    Java文件夹复制功能是通过编程实现的,主要涉及到文件操作和网络通信两个核心知识点。这里有两个关键类:`FileSelection` 和 `BackupClient`。`FileSelection` 类用于选择和组织待复制的文件,而 `BackupClient` 类...

    Java 单线程复制文件和多线程复制文件的比较

    Java 单线程复制文件和使用RandomAccessFile多线程复制文件的比较,对应博客地址为http://blog.csdn.net/zmichealchow/article/details/38687431

    java复制文件和文件夹

    在Java编程语言中,复制文件和文件夹是一项常见的任务,特别是在处理数据迁移、备份或创建应用程序副本时。本文将深入探讨如何使用Java实现文件及文件夹的复制功能,包括其内部的嵌套文件和各种格式的文件,如文本、...

    Java IO文件操作类与复制文件实例.rar

    Java IO文件操作类与复制文件实例,有关文本编辑、FileWriter文件写入、FileReade文件读娶DataStream文件数据流、BufferedReader文件暂存器、FileViewer文件浏览器、复制文件Copy等方面的操作要领,仅供学习参考。

    java文件复制小程序

    用户输入原始文件地址。。。然后输入要复制到的目录。

    Java复制文件

    摘要:Java源码,文件操作,复制文件 Java复制文件,使用Java语言编写拷贝文件的演示小程序,附源代码,注释挺全的,通过本源码你可以学习一下Java对文件的事件处理、取得目录内容的事件处理、如何弹出文件选择器,并...

    java 复制指定目录下的文件

    以上就是使用Java复制指定目录下文件的基本方法,无论是使用传统的`java.io`还是现代化的`java.nio.file`,都可以有效地完成这项任务。在实际应用中,还需要注意错误处理和异常捕获,确保程序的健壮性。例如,确保...

    文件复制(java代码实现)

    在Java编程语言中,文件复制是一项常见的任务,用于在不同位置之间移动或备份数据。本文将详细介绍如何在Java中实现文件复制,同时考虑到输入输出异常处理,并在DOS控制台环境中运行程序。 首先,我们需要创建一个...

    java对文件的复制和删除(文件夹、文件)

    在Java编程中,文件操作是常见的任务之一,包括文件的复制和删除。在这个场景中,我们看到一个名为"OperateFile"的压缩包文件,它很可能包含了一个Java类或者一个项目,用于演示如何使用Java来执行这些操作。下面将...

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

    Java 复制文件的 4 种方式及拷贝文件到另一个目录下的实例代码 Java 复制文件的 4 种方式是 Java 中一个非常重要的操作,因为在实际开发中,我们经常需要复制文件到另一个目录下。在 Java 中没有一个内置的复制文件...

    Java写入文件、读取文件,复制、追加、修改文件最后修改时间、时间格式转换、查看端口使用情况

    Java写入文件、读取文件,复制、追加、修改文件最后修改时间、时间格式转换、查看端口使用情况

    Java复制文件常用的三种方法

    "Java复制文件常用的三种方法" 以下是关于Java复制文件常用的三种方法的知识点总结: Files.copy()方法 Files.copy()方法是Java中复制文件的一种常用方法。该方法使用java.nio.file.Files类的copy()方法来实现...

Global site tag (gtag.js) - Google Analytics