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

使用 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());
}
}
}
注意事项
- 如果目标文件已存在,
Files.copy()会抛出FileAlreadyExistsException - 对于大文件,建议使用缓冲区或 NIO 的
FileChannel以提高性能 - 确保程序有足够的权限读取源文件和写入目标文件
- 处理异常时,根据实际需求决定是否重试或记录日志
选择哪种方法取决于你的具体需求、Java 版本和项目依赖,对于现代 Java 项目,推荐使用 Files.copy() 方法。

