java copy file

本文介绍如何利用Java中的FileChannels类实现源文件到目标文件的高效复制操作,包括初始化通道、复制文件内容和关闭通道等关键步骤。
try {
    // 旧地址
    FileChannel srcChannel = new FileInputStream("srcFilename").getChannel();

    // 新地址
    FileChannel dstChannel = new FileOutputStream("dstFilename").getChannel();

    // Copy file contents from source to destination
    dstChannel.transferFrom(srcChannel, 0, srcChannel.size());

    // Close the channels
    srcChannel.close();
    dstChannel.close();
} catch (IOException e) {
}

 

Java里,`java.io.File` 类本身没有 `copy` 方法。不过,从Java 7开始,`java.nio.file.Files` 类提供了 `copy` 方法用于复制文件或目录。 ### `Files.copy` 方法介绍 `Files.copy` 方法有多个重载形式,常用的形式为: ```java import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; public class FileCopyExample { public static void main(String[] args) { Path source = Paths.get("source.txt"); Path target = Paths.get("target.txt"); try { // 复制文件 Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); System.out.println("文件复制成功"); } catch (IOException e) { System.err.println("文件复制失败: " + e.getMessage()); } } } ``` ### 使用指南 - **参数说明**: - 第一个参数是源文件或目录的 `Path` 对象。 - 第二个参数是目标文件或目录的 `Path` 对象。 - 第三个参数是可选的 `CopyOption` 数组,用于指定复制操作的行为,例如 `StandardCopyOption.REPLACE_EXISTING` 表示如果目标文件已存在则替换它。 - **异常处理**:`Files.copy` 方法可能会抛出 `IOException`,因此在使用时需要进行异常处理。可能的异常包括文件不存在、权限不足等。 - **复制目录**:如果要复制目录,`Files.copy` 方法只会复制目录本身,而不会递归复制目录下的所有文件和子目录。若要递归复制目录,需要编写额外的代码来实现,示例如下: ```java import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; public class DirectoryCopyExample { public static void main(String[] args) { Path sourceDir = Paths.get("sourceDir"); Path targetDir = Paths.get("targetDir"); try { Files.walkFileTree(sourceDir, new SimpleFileVisitor<Path>() { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { Path targetPath = targetDir.resolve(sourceDir.relativize(dir)); if (!Files.exists(targetPath)) { Files.createDirectory(targetPath); } return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Path targetPath = targetDir.resolve(sourceDir.relativize(file)); Files.copy(file, targetPath, StandardCopyOption.REPLACE_EXISTING); return FileVisitResult.CONTINUE; } }); System.out.println("目录复制成功"); } catch (IOException e) { System.err.println("目录复制失败: " + e.getMessage()); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值