杰瑞科技汇

Java如何高效复制文件到另一个文件?

Java 复制文件到另一个文件的方法

在 Java 中,有多种方法可以实现文件复制,以下是几种常用的方法:

Java如何高效复制文件到另一个文件?-图1
(图片来源网络,侵删)

使用 Files 类(Java 7+ 推荐)

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileCopyExample {
    public static void main(String[] args) {
        Path source = Paths.get("source.txt");
        Path destination = Paths.get("destination.txt");
        try {
            Files.copy(source, destination);
            System.out.println("文件复制成功");
        } catch (IOException e) {
            System.err.println("文件复制失败: " + e.getMessage());
        }
    }
}

使用 FileInputStream 和 FileOutputStream

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopyExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("source.txt");
             FileOutputStream fos = new FileOutputStream("destination.txt")) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                fos.write(buffer, 0, length);
            }
            System.out.println("文件复制成功");
        } catch (IOException e) {
            System.err.println("文件复制失败: " + e.getMessage());
        }
    }
}

使用 Apache Commons IO(第三方库)

首先需要添加依赖:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

然后使用:

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class FileCopyExample {
    public static void main(String[] args) {
        File source = new File("source.txt");
        File destination = new File("destination.txt");
        try {
            FileUtils.copyFile(source, destination);
            System.out.println("文件复制成功");
        } catch (IOException e) {
            System.err.println("文件复制失败: " + e.getMessage());
        }
    }
}

使用 Java NIO 的 FileChannel(适用于大文件)

import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
public class FileCopyExample {
    public static void main(String[] args) {
        Path source = Paths.get("source.txt");
        Path destination = Paths.get("destination.txt");
        try (FileChannel sourceChannel = FileChannel.open(source, StandardOpenOption.READ);
             FileChannel destinationChannel = FileChannel.open(destination, 
                 StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
            destinationChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
            System.out.println("文件复制成功");
        } catch (IOException e) {
            System.err.println("文件复制失败: " + e.getMessage());
        }
    }
}

注意事项

  1. 如果目标文件已存在,Files.copy() 会抛出 FileAlreadyExistsException
  2. 对于大文件,建议使用缓冲区或 NIO 的 FileChannel 以提高性能
  3. 确保程序有足够的权限读取源文件和写入目标文件
  4. 处理异常时,根据实际需求决定是否重试或记录日志

选择哪种方法取决于你的具体需求、Java 版本和项目依赖,对于现代 Java 项目,推荐使用 Files.copy() 方法。

Java如何高效复制文件到另一个文件?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇