基本思路就是边搜索边复制,这里用的是广度搜索(BFS)

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayDeque;public class CopyFile {public static void main(String[] args) {File f1 = new File("kkk");File f2 = new File("D:\\");try {getPathBFS(f1,f2);} catch (IOException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}/*** 用于读和写* @param f1 输入流* @param f2 输出流*/private static void copyFile(File f1,String f2){InputStream in = null;OutputStream out = null;try {in = new BufferedInputStream(new FileInputStream(f1));out = new BufferedOutputStream(new FileOutputStream(f2));byte by[] = new byte[1024];int len = 0;while((len = in.read(by))!=-1){out.write(by, 0, len);}} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch block
            e.printStackTrace();}finally{if(in!=null){try {in.close();} catch (IOException e) {// TODO Auto-generated catch block
                    e.printStackTrace();}}if(out != null){try {out.close();} catch (IOException e) {// TODO Auto-generated catch block
                    e.printStackTrace();}}}}/*** 用于搜索* @param f1 目标文件* @param f2 复制到的目标* @throws IOException*/private static void getPathBFS(File f1,File f2) throws IOException {//运用队列进行广度搜索ArrayDeque<File> deque = new ArrayDeque<File>();//用于存储复制目标文件ArrayDeque<File> dequeCopy = new ArrayDeque<File>();//第一个File实例入队
        deque.offer(f1);//创建第一个文件夹f2 = new File(f2,f1.getName());dequeCopy.offer(f2);//队列为空时停止while(!deque.isEmpty()){//取队头File[] ff = deque.peek().listFiles();File copyFiledir = dequeCopy.peek();//创建文件夹
            copyFiledir.mkdir();//出队
            deque.poll();dequeCopy.poll();for(int i=0;i<ff.length;i++){//如果是目标文件夹入队if(ff[i].isDirectory()){//复制文件夹入队File temp = new File(copyFiledir,ff[i].getName());dequeCopy.push(temp);deque.push(ff[i]);}else{//复制到相应文件夹copyFile(ff[i],copyFiledir.getAbsolutePath()+"\\"+ff[i].getName());}}}}}

转载于:https://www.cnblogs.com/hnzyyTl/p/4970104.html

Java中FileInputStream和FileOutputStream类实现文件夹及文件的复制粘贴相关推荐

  1. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  2. Java中通过代理对类进行修改

    JAVA中的静态代理.动态代理及JDK proxy和CGLIB.Javassist.ASM实践 简介 Java中对已经有的类进行修改,改变或调整其执行,这可以通过代理来实现.Java的class文件是 ...

  3. java ftp ftpclient_详解JAVA中使用FTPClient工具类上传下载

    详解JAVA中使用FTPClient工具类上传下载 在Java程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件.本文简单介绍如何利用jakarta commons中的FTPClie ...

  4. Java中怎么把文本追加到已经存在的文件

    Java中怎么把文本追加到已经存在的文件 我需要重复把文本追加到现有文件中.我应该怎么办? 回答一 你是想实现日志的目的吗?如果是的话,这里有几个库可供选择,最热门的两个就是Log4j 和 Logba ...

  5. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

  6. 《Java并发编程的艺术》读后笔记-Java中的并发工具类(第八章)

    文章目录 <Java并发编程的艺术>读后笔记-Java中的并发工具类(第八章) 1.等待多线程完成的CountDownLatch 2.同步屏障CyclicBarrier 2.1 Cycli ...

  7. 【java】删除文件夹及文件夹中的所有文件

    需求 删除指定文件夹及文件夹中的所有文件. 环境 JDK 1.8 代码示例 在JDK 8中,可以使用java.nio.file.Files和java.nio.file.Path类来删除一个文件夹及其中 ...

  8. java中的jsp文件创建_在JSP中创建文件夹和文件

    在JSP中判断某文件是否存在,并创建文件夹和文件. 备忘. 在WinXP + Tomcat5.1 中,代码如下: //得到web根路径//绝对路径 //getServletContext().getR ...

  9. 【JAVA系列】Java中的包、类的继承、多态、抽象类与接口

    文章目录 前言 一.包及访问权限 1.什么是包? 2.如何导入包? 3.JDK中常见的包 4.包的访问控制权限 二.继承 1.继承的基本概念 2.继承时方法调用顺序 3.super和this关键字 4 ...

最新文章

  1. Golang学习之GOROOT、PATH、GOPATH及go get
  2. java c3p0 配置文件_关于最近一直纠缠我的c3p0-config.xml配置文件找不到的问题终于解决了,\(^o^)/...
  3. 亲和数 杭电2040
  4. [Cypress] Find and Test Focused Input with Chrome’s DevTools in Cypress
  5. java的多线程学习,第四记
  6. pytorch迁移学习后使用微调策略再次提高模型训练结果
  7. 入门到精通pl/sql编程(千里之行始于足下)之触发器
  8. 如何在Word中输入带圈数字1-10的黑底白字和白底黑字的数字字符?
  9. Eric6与pyqt5学习笔记14 【实战5 百度贴吧离线签到工具】
  10. 华为手机解锁码快速申请方式
  11. JAVA中关于if结构的相关的练习题
  12. 证书错误 SSLCertVerificationError
  13. 详解单片机中的关键字:sfr sbit
  14. Fixed Resistors
  15. adb 查看手机闪存类型
  16. 应对ME23数据抓取时ID发生变化 SAP
  17. 使用LM324实现信号放大及电压比较综合报警电路
  18. AP Autosar平台设计 4操作系统
  19. 算法竞赛进阶指南0x12:Team Queue
  20. Oracle Database 12c Security - 6. Real Application Security

热门文章

  1. express-partials与express4.x不兼容问题
  2. 开始学java咯!~~~
  3. Community Server配置对网址中的www信息处理功能分析 [转]
  4. PHP 与Memcache 分布式
  5. C++ 预编译头文件
  6. mysql的骚操作:自增长的字段同时插入到另一个字段
  7. 不用加减乘除完成两数相加
  8. Ibatis查询条件对于特殊字符的处理方法
  9. sqlserver数据库大型应用解决方案总结 数据库负载均衡
  10. 简单实用的js调试logger组件