当前位置: 首页 > wzjs >正文

什么网站专门做境外当地游软件公司

什么网站专门做境外当地游,软件公司,做高端网站建设公司,枣阳网站建设 枣阳山水数码Java 实现目录递归拷贝 目录递归拷贝是指将一个目录及其所有子目录和文件完整复制到另一个位置。下面我将详细介绍如何使用 Java 的 File 类实现这一功能,并提供优化版本(NIO.2)和常见问题解决方案。 1. 基于 File 类的递归拷贝实现 核心思…

Java 实现目录递归拷贝

目录递归拷贝是指将一个目录及其所有子目录和文件完整复制到另一个位置。下面我将详细介绍如何使用 Java 的 File 类实现这一功能,并提供优化版本(NIO.2)和常见问题解决方案。


1. 基于 File 类的递归拷贝实现

核心思路

  1. 如果是文件 → 直接拷贝

  2. 如果是目录 → 创建目标目录 → 递归拷贝其内容

完整代码实现

java

import java.io.*;public class DirectoryCopy {public static void main(String[] args) {File srcDir = new File("C:/source");File destDir = new File("C:/destination");copyDirectory(srcDir, destDir);}public static void copyDirectory(File source, File target) throws IOException {if (!target.exists()) {target.mkdirs(); // 创建目标目录}for (File file : source.listFiles()) {File destFile = new File(target, file.getName());if (file.isDirectory()) {copyDirectory(file, destFile); // 递归拷贝子目录} else {copyFile(file, destFile); // 拷贝文件}}}private static void copyFile(File source, File dest) throws IOException {try (InputStream in = new FileInputStream(source);OutputStream out = new FileOutputStream(dest)) {byte[] buffer = new byte[1024];int length;while ((length = in.read(buffer)) > 0) {out.write(buffer, 0, length);}}}
}

2. 使用 NIO.2(Java 7+ 推荐)

NIO.2 提供了更简洁高效的 API(Files.copy()):

java

import java.nio.file.*;public class NioDirectoryCopy {public static void main(String[] args) throws IOException {Path source = Paths.get("C:/source");Path target = Paths.get("C:/destination");copyDirectory(source, target);}public static void copyDirectory(Path source, Path target) throws IOException {Files.walkFileTree(source, new SimpleFileVisitor<Path>() {@Overridepublic FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {Path relativePath = source.relativize(dir);Path destPath = target.resolve(relativePath);Files.createDirectories(destPath); // 创建目标目录return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {Path relativePath = source.relativize(file);Path destPath = target.resolve(relativePath);Files.copy(file, destPath, StandardCopyOption.REPLACE_EXISTING);return FileVisitResult.CONTINUE;}});}
}

优势

  • 自动处理符号链接

  • 支持原子操作和文件属性保留

  • 更简洁的异常处理


3. 关键问题与解决方案

问题1:文件已存在

  • 解决:添加覆盖选项

    java

// File 类方式
if (destFile.exists()) destFile.delete();// NIO 方式
Files.copy(file, destPath, StandardCopyOption.REPLACE_EXISTING);

问题2:大文件拷贝性能优化

  • 解决:使用缓冲流(Buffer)或 NIO 的 FileChannel

    java

// 使用 FileChannel(零拷贝技术)
try (FileChannel inChannel = new FileInputStream(source).getChannel();FileChannel outChannel = new FileOutputStream(dest).getChannel()) {inChannel.transferTo(0, inChannel.size(), outChannel);
}

问题3:权限保留

  • NIO 解决方案

    java

Files.copy(file, destPath, StandardCopyOption.COPY_ATTRIBUTES);

4. 性能对比

方法适用场景优点缺点
File + 字节流Java 6 及以下版本兼容性好代码冗长,性能较低
Files.copy()Java 7+ 常规需求简洁高效不兼容旧 Java 版本
FileChannel大文件拷贝零拷贝,性能最佳代码稍复杂

5. 递归拷贝的注意事项

  1. 符号链接:NIO.2 的 Files.walkFileTree() 会自动处理,传统方式需要额外判断

  2. 异常处理:确保关闭流资源(用 try-with-resources)

  3. 内存管理:拷贝超大文件时避免一次性读取全部内容


6. 扩展练习

  1. 添加进度显示:在拷贝时打印已完成文件数/总文件数

  2. 实现断点续传:记录已拷贝文件,程序重启后跳过已处理部分

  3. 多线程拷贝:对子目录使用线程池加速(注意线程安全)

http://www.dtcms.com/wzjs/47129.html

相关文章:

  • 网站托管费用 优帮云南宁百度关键词推广
  • 那些公司做网站雷神代刷推广网站
  • 电子商务网站案例分析公司网站怎么建立
  • 电商平台数据库设计如何优化网站
  • 企业网站建设好的案例百度电商平台
  • 浙江 网站备案网站建设营销型
  • 英特尔nuc做网站服务器软文推广营销平台
  • 网站正在建设中 html源码seo优化网站推广全域营销获客公司
  • 找人做网站需要什么平台怎样推广
  • ppt做会动彩字网站搜索引擎优化排名技巧
  • 广告设计与制作是干什么的苏州搜索引擎排名优化商家
  • 网站开发方案报价网络推广靠谱吗
  • 朝阳市网站建设免费网站注册com
  • 网站建设步骤 教 程搜索引擎网站优化推广
  • 网站建设服类开票税点seo外链论坛
  • 网站建设三个友好推广策划方案范文
  • 深圳公众号制作上海优化公司选哪个
  • 建设网站的工作推广方案怎么做
  • wordpress 让导航悬浮湖北seo服务
  • nba网站建设长沙网站建设服务
  • 怎么看一个网站是由哪个网络公司做的外贸网站推广平台有哪些
  • 灯饰如何做网站推广深圳网络推广网络
  • 广州做网站哪个公司做得好专业网站优化推广
  • 网站上那些轮播图视频怎么做的seo搜索引擎优化书籍
  • wordpress手机版中文版seo网站推广的主要目的
  • 宁夏住宅建设发展公司网站搜索引擎推广方案案例
  • 建立网络专题网站架构seo专业技术培训
  • 自助建站系统步骤无线网络优化工程师
  • 自己做网站花多少钱世界足球排名
  • 需要登陆的网站如何做爬虫网店代运营正规公司