Java修炼——文件夹的复制
文件夹的复制用到了俩个流:缓冲流和文件字节流
缓冲流用来加快写入和读取速度。
在这里我简述一下复制文件夹的过程,当然复制文件夹都可以,复制文件更是不在话下
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修炼——文件夹的复制的更多相关文章
- java实现文件夹(包括其中的子文件夹、子文件)的复制——递归
这是学校java课的一道实验题,题目如下:编程,根据指定的源和目标位置,完成指定文件或文件夹(包括其中的子文件夹.子文件)的复制. 以下是我的实现,使用了递归: package com.simon.m ...
- 工具:从一个文件夹中复制jar到另一个文件夹中
工具类:从一个文件夹中复制jar到另一个文件夹中 需要的小伙伴可以试一试,很爽哦,有时候真的很需要! 需求:当我们拿到一个maven项目时,而maven项目的jar包都是通过pom.xml文件管理的, ...
- 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
建立好一个Maven项目后,如果Java Resources资源文件下没有src/main/java文件夹,并且在手动创建这个文件时提示“已存在文件”. 这说明,在这个项目配置中已经有了src/m ...
- java 遍历文件夹里的文件
Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { ...
- JAVA 遍历文件夹下的所有文件
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- Java操作文件夹的工具类
Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...
- linux下跨服务器文件文件夹的复制
文件的复制:scp –P (端口号) ./authorized_keys berchina@hadoop002:/home/berchina 文件夹的复制:scp -r -P (端口号) /home/ ...
- JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- Java生成文件夹
Java生成文件夹 1.说明 判断文件夹是否存在,如果不存在就创建该文件夹,并打印其路径:如果存在,打印其路径 2.实现源码 /** * @Title:BuildFolder.java * @Pack ...
随机推荐
- MySQL系列:一句SQL,MySQL是怎么工作的?
对于MySQL而言,其实分为客户端与服务端. 服务端,就是MySQL应用,当我们使用net start mysql命令启动的服务,其实就是启动了MySQL的服务端. 客户端,负责发送请求到服务端并从服 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(七)---仓储模式
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- C++中对封装的语法支持——重载运算符
重载运算符 1.对于自定义类型,编译器不知道运算规则,而重载运算符会将两个对象相加转换为函数调用. 2.运算符重载转换的函数调用,函数名字是固定的规则. (1) 如果重载+号运算符,函数名字就是:op ...
- # & 等特殊字符会导致传参失败
# & 等特殊字符会导致 post 传参失败 处理方法使用 encodeURIComponent 将字符串转化一下 实例 // toUpperCase() 转化为大写字母 var cateco ...
- list,tuple,dict,set 思维导图整理
- windows版的mysql主从复制环境搭建
背景 最近在学习用Spring Aop来实现数据库读写分离的功能. 在编写代码之前,首先是要部署好mysql的环境,因为要实现读写分离,所以至少需要部署两个mysql实例,一主一从,并且主从实例之间能 ...
- 【故障公告】docker swarm 集群问题造成新版博客后台故障
非常抱歉,今天下午 16:55~17:05 左右,由于 docker swarm 集群的突发不稳定问题造成新版博客后台(目前处于灰度发布阶段)无法正常使用,由此给您带来麻烦,请您谅解. 出故障期时,新 ...
- drf组件之jwt认证
drf组件之jwt认证模块 一.认证规则 全称:json web token 解释:加密字符串的原始数据是json,后台产生,通过web传输给前台存储 格式:三段式 - 头.载荷.签名 - 头和载荷才 ...
- startup启动不起来关于监听的问题
问题描述:要在sqlplus中启动到startup状态,但是提示我没有监听,本来以为启动一下就可以,但是connecting to一直卡半天,stop都停止不了 1.发现监听有问题,前去更改 SQL& ...
- 20191010-6 alpha week 1/2 Scrum立会报告+燃尽图 04
此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/8749] 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 ...