【JAVA】编程(6)--- 应用IO流拷贝文件夹(内含多个文件)到指定位置
此程序应用了:
File 类,及其常用方法;
FileInputStream,FileOutputStream类及其常用方法;
递归思维;
package com.bjpowernode.javase.io;
import java.io.*;
public class IOTest {
public static void main(String[] args) {
//拷贝源路径:...\\pra\\...
File srcFile=new File("C:\\java-prictice\\javaseplus\\pra");
//拷贝目标:...\\c\\...
File destFile=new File("C:\\a\\b\\c");
//若拷贝目标路径不存在,创建多级文件夹
if (!destFile.exists()){
destFile.mkdirs();
}
//调用拷贝方法
copyDir(srcFile,destFile);
}
private static void copyDir(File srcFile,File destFile){
//声明空指针引用
FileInputStream fis=null;
FileOutputStream fos=null;
//递归的结束条件(拷贝源是文件,没有子文件了)
if (srcFile.isFile()){
try {
//字节输入流绑定拷贝源,字节输出流绑定拷贝目标
fis=new FileInputStream(srcFile);
//获取不包含上级路径的文件名
String scrDir=srcFile.getName();
//在拷贝目标的路径后 + “\\拷贝源的文件名”(不包含上级路径)
fos=new FileOutputStream(destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath():(destFile.getAbsolutePath()+"\\"+scrDir));
//一次最多读取1MB
byte [] bytes=new byte[1024*1024];
int readCound;
//文件拷贝完成
while ((readCound=fis.read(bytes))!=-1){
fos.write(bytes);
}
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if (fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return;
}
//能到这说明是文件夹,获取文件夹下的所有子文件
File [] files=srcFile.listFiles();
for (File file:files) {
//子文件若是文件夹,则新建此文件夹
if (file.isDirectory()){
String srcDir=file.getAbsolutePath();
String destDir=(destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\"+srcDir.substring(3));
File newFile=new File(destDir);
}
//递归
copyDir(file,destFile);
}
}
}
效果展示:
运行前:

运行后:

心得:
递归方法中的 copyDir ( file , destFile ) ; // 内部执行的拷贝顺序:
/*拷贝顺序:
1.pra的第一个子文件夹(若是文件则进行pra下一个子文件的拷贝)
2.上一个子文件夹的第一个子文件夹(若是文件则返回步骤1)
3.上一个子文件夹的第一个子文件夹(若是文件则返回步骤2)
......
n.上一个子文件夹的第一个子文件夹(若是文件则返回步骤“n-1”)
最后,pra的最后一个子文件拷贝完成/
pra的最后一个子文件夹中的最后一个文件拷贝完成/
pra的最后一个子文件夹的最后一个文件夹的最后一个文件拷贝完成!
所有递归方法结束,copyDir方法结束
*/
【JAVA】编程(6)--- 应用IO流拷贝文件夹(内含多个文件)到指定位置的更多相关文章
- Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)
声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutpu ...
- Java的递归、IO流
.t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.递归 [递归] 1. 在函数自身内部,调用函数本身的方式,称为递归. ...
- Java基础之(IO流)
简介: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. 一.File ...
- Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的.java文件复制到另一个文件夹下的.txt文件
package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
- Java以流的方式将指定文件夹里的.txt文件全部复制到另一文件夹,并删除原文件夹中所有.txt文件
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- IO流的练习2 —— 复制单级文件夹中的文件
需求:把C:\Users\Administrator\Desktop\记录\测试里面的所有文件复制到 C:\Users\Administrator\Desktop\新建文件夹\copy文件夹中 分析: ...
- 用Java实现将多级文件夹下的所有文件统一放到一个文件夹中
每次下了电影(男生懂得呦),每部电影都放在一个单独的文件夹里,看的时候很是不方便啊,一直重复着进入文件夹.后退,再进.再退的操作,而手动把这些电影全部复制出来又太繁琐.因此为了解决这个问题,用IO写了 ...
- java 删除文件夹中的所有文件及文件夹
删除文件夹(前提:文件夹为空以及InputStream和OutputStream等一些数据文件流关掉[close()],否则文件无法删除) //删除文件夹 public static void del ...
- Java遍历一个文件夹下的全部文件
Java工具中为我们提供了一个用于管理文件系统的类,这个类就是File类,File类与其它流类不同的是,流类关心的是文件的内容.而File类关心的是磁盘上文件的存储. 一,File类有多个构造器,经常 ...
随机推荐
- SyntaxError: Non-UTF-8 code starting with '\xbb' in file D:\流畅学python\ex32.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
1. 报错如下: SyntaxError: Non-UTF-8 code starting with '\xd3' in file D:\流畅学python\ex34.py on line 4, bu ...
- SharkCTF2021 The_nature_of_the_human
(信安数基的quiz1写不出来 来这放题解泄愤) crypto类题. 题面 其加密的大致过程是,对明文flag中的逐个字符,随机使用三种加密方式: 第一种,对该字符进行sha256加密后以16进制形式 ...
- 【Java虚拟机9】类加载器之命名空间详解
前言 前面介绍类加载器的时候,介绍了一下命名空间这个概念.今天就通过一个例子,来详细了解一下[类加载器的命名空间].然后通过这个例子,我们可以总结一下双亲委托模型的好处与优点. 例1(不删除class ...
- Noip模拟74 2021.10.11
T1 自然数 考场上当我发现我的做法可能要打线段树的时候,以为自己百分之百是考虑麻烦了 但还是打了,还过掉了所有的样例,于是十分自信的就交了 正解还真是线段树,真就第一题数据结构 但是包括自己造的小样 ...
- 设计的MOS管三极管简单开关电路驱动能力不够3
16楼说得非常明白,补充一点,R3如果不要,会有下冲产生.4 Q: Z/ G G1 s8 Z- } 能解释下为什么会产生过冲吗?9 i, P* D* X) u. t/ b ^ 让我们这些菜鸟学习学 ...
- SpringCloud微服务实战——搭建企业级开发框架(十二):OpenFeign+Ribbon实现负载均衡
Ribbon是Netflix下的负载均衡项目,它主要实现中间层应用程序的负载均衡.为Ribbon配置服务提供者地址列表后,Ribbon就会基于某种负载均衡算法,自动帮助服务调用者去请求.Ribbo ...
- 启用MFA的office 365 账号如何连接Exchange online
第一篇随手笔记,从简单开始... 如何使用Exchange Online PowerShell呢? 以Windows操作系统为例,如Windows10:首先需要安装Exchange Online Po ...
- 【java+selenium3】特殊元素iframe的定位及详解(三)
一.iframe 内联框架 1.自己写个网页,仅供理解iframe演示使用,如下 <!DOCTYPE html> <html> <head> <meta ch ...
- Cannot find ./catalina.sh The file is absent or does not have execute permission This file is needed to run this program(问题解决)
web项目没有打成包,直接放在了linux服务器上. 进入tomcat/bin目录,执行启动的时候出现如下错误: 解决方法: 在tomcat 的bin目录下 执行这条命令chmod +x *.sh ...
- VIM处理工具与正则表达式
*本文中/data目录为训练目录 1.在vim中设置TAB缩进为四个字符 打开vim 输入:set tabstop=4 2.复制/etc/rc.d/init.d/functions文件至/tmp/,替 ...