文件夹的复制用到了俩个流:缓冲流和文件字节流

缓冲流用来加快写入和读取速度。

在这里我简述一下复制文件夹的过程,当然复制文件夹都可以,复制文件更是不在话下

1.首先要明确俩点。要复制的文件夹的位置(源文件目录),还有一个就是你需 要复制到哪的文件夹位置(目的文件目录)。

2.就是判断目标文件是否文在,要是没有那就创建。

3.第三个就是获取传进来的源文件目录,遍历他。

4.然后就是分为俩步去复制,第一步就是判断是不是文件,是文件就直接复制,第二步,如果不是文件那就是目录,目录我们可以用递归的算法去将目录文件再去遍历,执行第一步。

5.最后就是打印文件,这里需要仔细看,我们需要的是文件目录,而不是文件夹 目录,因此我们需要在打印的目录后面拼接文件的名字。

请看代码

(所需要注意的就是在打印输出的时候,需要将文件夹名称后面拼接上文件的名字,这样就可以直接得到文件的目录了):

package com.bjsxt.ioproject;

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.OutputStream; public class TestCopyFiles {
public static void main(String[] args) {
File srcDir=new File("F:\\****\\资料");
File targetDir=new File("F:\\*****\\项目\\测试复制目录");
CopyDir(srcDir, targetDir);
// File srcFile=new File("F:\\*****\\项目\\day1\\note.txt");
// File targetFile=new File("F:\\*****\\项目\\note.txt");
// CopyFile(srcFile, targetFile);
}
public static void CopyDir(File srcDir,File targetDir) {
if (!targetDir.exists()) {
targetDir.mkdir();
}
File[] listFiles = srcDir.listFiles();//获取目录下的全部文件
//遍历所有集合文件
for (File file : listFiles) {
if (file.isFile()) {
//如果是文件,那就调用赋值文件的方法,并且需要拼接地址
CopyFile(new File(srcDir+"//"+file.getName()), new File(targetDir+"\\"+file.getName()));
System.out.println(file.getName()+"文件复制完成!");
} else {
//如果是目录,那就调用递归,自己调用自己
CopyDir(new File(srcDir+"//"+file.getName()), new File(targetDir+"\\"+file.getName()));
System.out.println(file.getName()+"文件夹复制完成!");
}
}
} public static void CopyFile(File srcFile,File targetFile) {
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try {
bis = new BufferedInputStream(new FileInputStream(srcFile));
bos = new BufferedOutputStream(new FileOutputStream(targetFile));
byte [] b=new byte[1024];
int len=0;
while ((len=bis.read(b))!=-1) {
bos.write(b, 0, len);
} } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (bos!=null) {
bos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (bis!=null) {
bis.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

运行结果:

Java修炼——文件夹的复制的更多相关文章

  1. java实现文件夹(包括其中的子文件夹、子文件)的复制——递归

    这是学校java课的一道实验题,题目如下:编程,根据指定的源和目标位置,完成指定文件或文件夹(包括其中的子文件夹.子文件)的复制. 以下是我的实现,使用了递归: package com.simon.m ...

  2. 工具:从一个文件夹中复制jar到另一个文件夹中

    工具类:从一个文件夹中复制jar到另一个文件夹中 需要的小伙伴可以试一试,很爽哦,有时候真的很需要! 需求:当我们拿到一个maven项目时,而maven项目的jar包都是通过pom.xml文件管理的, ...

  3. 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法

      建立好一个Maven项目后,如果Java Resources资源文件下没有src/main/java文件夹,并且在手动创建这个文件时提示“已存在文件”. 这说明,在这个项目配置中已经有了src/m ...

  4. java 遍历文件夹里的文件

    Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { ...

  5. JAVA 遍历文件夹下的所有文件

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  6. Java操作文件夹的工具类

    Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...

  7. linux下跨服务器文件文件夹的复制

    文件的复制:scp –P (端口号) ./authorized_keys berchina@hadoop002:/home/berchina 文件夹的复制:scp -r -P (端口号) /home/ ...

  8. JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  9. Java生成文件夹

    Java生成文件夹 1.说明 判断文件夹是否存在,如果不存在就创建该文件夹,并打印其路径:如果存在,打印其路径 2.实现源码 /** * @Title:BuildFolder.java * @Pack ...

随机推荐

  1. egret常用功能

    egret常用功能<pre>//////////////////////////////////////////////////////////////////////////////// ...

  2. SpringBoot 源码解析 (二)----- Spring Boot精髓:启动流程源码分析

    本文从源代码的角度来看看Spring Boot的启动过程到底是怎么样的,为何以往纷繁复杂的配置到如今可以这么简便. 入口类 @SpringBootApplication public class He ...

  3. 删除Linux的依赖库并进入救援模式恢复

    删除Linux的依赖库并进入救援模式恢复 模拟一下依赖库文件被删,并进入救援模式恢复 系统:CentOS7 一.删除mv的依赖库文件 删除/lib64/libc.so.6 [root@centos7 ...

  4. 创建基于OData的Web API - Knowledge Builder API, Part II:Project Setup

    本篇为Part II:Project Setup 查看第一篇<Part I:  Business Scenario> 第一步,准备步骤. 准备步骤一,下载.NET Core 2.2 SDK ...

  5. Ubuntu 18 安装搜狗输入法

    Ubuntu 18 安装搜狗输入法: 1. 搜狗输入法官网下载对应的Linux输入法 2. 双击 刚刚下载好的 deb 文件 3. 点击 install(安装) 4. 在 settings(系统设置) ...

  6. H5之外部浏览器唤起微信分享

    最近在做一个手机站,要求点击分享可以直接打开微信分享出去.而不是jiathis,share分享这种的点击出来二维码.在网上看了很多,都说APP能唤起微信,手机网页实现不了.也找了很多都不能直接唤起微信 ...

  7. zip的压缩和解压命令

    以下命令均在/home目录下操作cd /home #进入/home目录 1.把/home目录下面的data目录压缩为data.zip zip -r data.zip data #压缩data目录   ...

  8. 性能测试——记XX银行保全项目性能问题分析优化

    记XX银行保全项目性能问题分析优化 数据库问题也许是大部分性能问题的关注点,但是JAVA应用与数据库交互的关节,JDBC 就像是我们人体的上半身跟下半身的腰椎,支持上半身,协调下半身运动的重要支撑点. ...

  9. 父组件向子组件传值时,值已经传过来却没有触发子组件的watch监听,解决~

    需求: 父组件像封装的子组件传值  (父组件属性传值,子组件props接受)   子组件接受后经过处理回显页面; 预想:子组件接受值 , 经过watch监听,在监听中处理数据,回显数据; 问题:子组件 ...

  10. 用CodePush在React Native App中做热更新

    最近在学React Native,学到了CodePush热更新. 老师讲了两种实现的方法,现将其记录一下. 相比较原生开发,使用React Native开发App不仅能节约开发成本,还能做原生开发不能 ...