行业资讯 2025年08月6日
0 收藏 0 点赞 453 浏览 2552 个字
摘要 :

文章目录 1.使用Apache Commons IO的FileUtils 1.1FileUtils.copyDirectory() 1.2 FileFilter和IOFileFilter 1.3. Java程序只复制目录结构 1.4 Java程序复制子目录和仅……




  • 1.使用Apache Commons IO的FileUtils
    • 1.1FileUtils.copyDirectory()
    • 1.2 FileFilter和IOFileFilter
    • 1.3. Java程序只复制目录结构
    • 1.4 Java程序复制子目录和仅文本文件
    • 1.5Java程序复制所有子目录和文件
  • 2.使用NIO递归复制文件

学习将目录复制到Java中的新位置。我们将看到仅复制目录的示例,以及深度复制目录(所有子文件夹和所有文件)的示例。

1.使用Apache Commons IO的FileUtils

1.1FileUtils.copyDirectory()

FileUtils类提供了一种干净的方法来复制文件和目录。它提供copyDirectory()方法。

  • copyDirectory()将指定源目录的内容复制到指定目标目录。
  • 如果目标目录不存在,则创建该目录。
  • 如果目标目录已存在,则此方法将源与目标合并。

copyDirectory()是一个带有以下参数的重载方法:

  • srcDir:要复制的现有目录,不能为空。
  • destDir:新目录,不能为空。
  • filter:要应用的过滤器,空表示复制所有目录和文件。
  • preserveFileDate:如果复制的文件的最后修改日期应与原始文件相同,则为true。
copyDirectory(File srcDir, File destDir, boolean preserveFileDate)
copyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate)

1.2 FileFilter和IOFileFilter

第二个版本的方法有助于仅复制经过过滤的文件列表。例如,如果我们只想将日志文件从一个目录复制到另一个目录,我们可以使用FileFilter类。

我们还可以根据要求使用以下内置过滤器:

  • DirectoryFileFilter.DIRECTORY:它接受文件作为目录。
  • FileFileFilter.FILE:它接受文件作为文件(非目录)。

此外,我们可以定义自己的自定义过滤器,如本文中所述。

IOFileFilter有助于通过将它们链接为and()和or()方法来构建复杂的过滤器。例如,给定的complexFilter将有助于复制所有文件,这些文件或者是目录,或者是文本文件。

IOFileFilter txtFileFilter = FileFilterUtils.suffixFileFilter(\".txt\");
IOFileFilter complexFilter =
        DirectoryFileFilter.DIRECTORY.or(txtFileFilter);

1.3. Java程序只复制目录结构

给定一个Java程序,它将把源位置的所有目录(及其子目录)复制到目标位置。在任何级别都不会复制文件。

File srcDir = new File(\"c:\\\\temp\");
File destDir = new File(\"c:\\\\tempNew\");
FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY, false);

1.4 Java程序复制子目录和仅文本文件

给定一个Java程序,它将把源位置的所有目录(及其内部目录)复制到目标位置。它还会搜索并复制其中任何一个目录中的所有文本文件。

IOFileFilter txtFileFilter = FileFilterUtils.suffixFileFilter(\".txt\");
IOFileFilter complexFilter =
    DirectoryFileFilter.DIRECTORY.or(txtFileFilter);
FileUtils.copyDirectory(srcDir, destDir, complexFilter, true);

1.5Java程序复制所有子目录和文件

如果我们想要深度复制所有子目录和文件,则不包括任何过滤器。

FileUtils.copyDirectory(srcDir, destDir, true);

2.使用NIO递归复制文件

要从一个位置到另一个位置深度复制一个目录及其所有子文件夹和其中的多个文件,Java没有提供直接的API。

我们需要使用java.nio.file.Files类。它的方法是walkFileTree()和copy(),必须一起使用以在Java中使用本地API构建深度复制目录的解决方案。

Java程序用于将所有子目录和文件 c:\\temp 复制到新位置 c:\\tempNew。

File srcDir = new File(\"c:\\\\temp\");
File destDir = new File(\"c:\\\\tempNew\");
copyFolder(srcDir.toPath(), destDir.toPath());
// methods
public static void copyFolder(Path src, Path dest) throws IOException {
    try (Stream<Path> stream = Files.walk(src)) {
      stream.forEach(source -> copy(source, dest.resolve(src.relativize(source))));
    }
}
private static void copy(Path source, Path dest) {
    try {
      Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING);
    } catch (Exception e) {
      throw new RuntimeException(e.getMessage(), e);
    }
}

在上面的Java程序中:

  • 如果目标目录存在,系统将抛出FileAlreadyExistsException。
  • StandardCopyOption.REPLACE_EXISTING将替换目标文件夹中已存在的文件。如果我们不使用此选项,如果目标文件已存在,复制将失败。

验证文件是否正确复制。请根据需要修改代码并自由使用。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9475.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

986
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

463
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

347
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

455
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

516
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

831
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号