通过File、字节流、字节流缓冲区实现文件复制

需求:

1、用File类读取指定文件File下的所有文件(包括Copy文件夹内的所有文件)

2、将所有文件复制到指定文件FileCopy夹下

需求分析:

1、需要先读取到指定的文件夹File

2、判断File文件夹下的文件类型( 文件 or 文件夹 )

3、把文件读取到内存中(递归查询文件)

4、考虑指定文件夹FileCopy下不存在Copy文件夹怎么办?(分析File类的方法)

5、把文件从内存中写到指定文件夹下

代码实例:

 package InputOutput;

 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; public class CopyFileDemo {
public static void main(String[] args) throws IOException {
// 指定源文件路径
String srcPath = "E:/JavaCodeDemo/InputOutput/File";
// 指定目标文件路径
String desPath = "E:/JavaCodeDemo/InputOutput/FileCopy";
// 创建源File
File srcFile = new File(srcPath);
// 创建目标File
File desFile = new File(desPath);
// 复制文件
copFile(srcFile, desFile);
// 复制完成
System.out.println("Success!");
} public static void copFile(File srcFile, File desFile) throws IOException {
// 获取所有文件和文件夹的集合
File[] fileList = srcFile.listFiles();
// 遍历集合
for (File file : fileList) {
// 判断是否为文件夹
if (file.isDirectory()) {
// 获取文件夹名称
String folderName = file.getName();
// 创建目标路径File
File newFile = new File(desFile, folderName);
// 判断目标路径File对应的文件夹是否存在
if (!newFile.exists()) {
// 如果不存在创建新的文件夹
newFile.mkdirs();
}
// 循环调用方法获取创建所有文件夹
copFile(file, newFile);
} else {
// 获取文件的名称
String name = file.getName();
// 根据文件名称创建新的File
File finalPathFile = new File(desFile, name);
// 调用IO流复制文件
IOStream(file, finalPathFile);
}
}
} public static void IOStream(File file2, File finalFile) throws IOException {
// 创建字节输入和输出流
FileInputStream in = new FileInputStream(file2);
FileOutputStream out = new FileOutputStream(finalFile);
// 创建字节输入输出流缓冲区
BufferedInputStream Bin = new BufferedInputStream(in);
BufferedOutputStream Bout = new BufferedOutputStream(out);
// 调用方法读取数据
int flag = -;
byte[] b = new byte[];
while ((flag = Bin.read(b)) != -) {
// 调用方法写数据
Bout.write(b, , flag);
Bout.flush();
}
// 关闭资源,先关写再关读
Bout.close();
Bin.close();
}
}

结果:



才疏学浅,如果有更好的方法欢迎留言指点,谢谢!

IO流学习之综合运用(文件复制)的更多相关文章

  1. Java IO流学习总结一:输入输出流

    Java IO流学习总结一:输入输出流 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自[赵彦军的博客] J ...

  2. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  3. Java IO流学习总结(1)

    Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...

  4. Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter

    在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流Buffered ...

  5. Java IO流学习

    Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...

  6. Java IO流学习总结八:Commons IO 2.5-IOUtils

    Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...

  7. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  8. IO流 - 字节输入输出流,文件的复制

    IO流 I:input - 输入(读取),eg:把硬盘的内容读取到内存 O: output - 输出(写入) eg:把内存中的东西写入硬盘保存 流:数字(字符/字节) 一般1个字符=2Byte,1By ...

  9. 关于java读取文件IO流学习总结(一)

    IO流的分类: 1.根据流的数据对象来分: 高端流:所有的内存中的流都是高端流,比如:InputStreamReader 低端流:所有的外界设备中的流都是低端流,比如InputStream,Outpu ...

随机推荐

  1. 树莓派4b点亮led灯基本步骤

    方法/步骤1: 首先要了解树莓派上的针脚,下面以树莓派4b为例子 把LED的正极插在GPIO脚上,把负极插在GND上 这里的例子是:正极插在GPIO21 方法/步骤2: 创建脚本 在配置好的树莓派系统 ...

  2. 火狐的一个bug

    发现这个bug是因为最近眼睛不太好,所以网页大小都是正常大小的140% 就发现火狐游览器好多网页上的输入框与按钮对不齐 测试代码 <!DOCTYPE html> <html lang ...

  3. qt creator源码全方面分析(2-6)

    目录 User Interface Text Guidelines 语法和风格 标点 编写工具提示tooltips 编写消息 UI文本大写 使用书本样式大写 使用句子样式大写 准备本地化 标记UI文本 ...

  4. Comb使用2

    只需添加如下内容 AndroidManifest中添加如下 不要忘记修改application ID与Comb对应 最好不要采用将combSDK lib文件添加到工程中否则可能连接不了Comb 如果添 ...

  5. sqlserver datatime value plus random number

    If we want to make some identiity value in sqlserver , we can use identity data type in a table.Howe ...

  6. Mysql事务结合spring管理

    spring事务相关问题记录 遇到情况: 在本地单体应用调试代码时,发现在一个加了@transaction注解的方法里进行先更新后查询的操作,查询的结果是可以看到更新的内容的.而在微服务环境中同样的代 ...

  7. vue文件引入全局样式导致样式重复

    通常项目中src下的子目录都会有一个style文件夹,专门用来存放全局的样式文件. 这个style文件夹下,一般有reset.css.var.scss.mixin.scss.class.scss.in ...

  8. 关于线段树的感悟(Segment Tree)

    线段树的感悟 : 学过的东西一定要多回头看看,不然真的会忘个干干净净. 线段树的 Introduction : English Name : Segment Tree 顾名思义 : 该数据结构由两个重 ...

  9. Burpsuite--安装和环境配置

    1.引子 Burpsuite是一款安全人员常用的工具.在渗透测试中,我们使用Burp Suite将使得测试工作变得更加容易和方便,即使在不需要娴熟的技巧的情况下,只有我们熟悉Burp Suite的使用 ...

  10. vue 过渡 & 动画

    过渡 & 动画 过渡动画 用css先定义好动画效果 .a-enter-active, .a-leave-active { transition: all 1.5s; } .a-enter, . ...