首页 > 编程语言 >java 递归复制文件夹和文件

java 递归复制文件夹和文件

时间:2023-01-11 21:06:39浏览次数:42  
标签:outputStream java 递归 bytes 文件夹 bufferedOutputStream srcPath new null


公司的电脑是有安全检查的,每次复制一个文件到U盘中都要扫描半天,特别的慢,为了避开电脑的扫描,
想到了java中的io流,写的一个使用递归的方式复制文件夹的demo。保存到博客中,跟大家分享一下,
同时也可以方便后面自己查看。

1.先看看复制文件

①使用基本字节流

public void copyFile(String srcPath, String desPath) {
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = new FileInputStream(srcPath);
outputStream = new FileOutputStream(desPath);
byte[] bytes = new byte[1024];
int len = 0;
while ((len = inputStream.read(bytes)) != -1) {
outputStream.write(bytes,0,len);
outputStream.flush();
}
}catch(Exception e){
e.printStackTrace();
System.out.println(">>>>>异常<<<<<");
}finally {
if(inputStream!=null){
try {
inputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
if(outputStream!=null){
try {
outputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}

②使用字节缓冲流复制文件

public void copyFile2(String srcPath, String desPath) {
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;

try {
bufferedInputStream = new BufferedInputStream(new FileInputStream(srcPath));
bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(desPath));
byte[] bytes = new byte[1024];
int len = 0;

while ((len = bufferedInputStream.read(bytes)) != -1) {
bufferedOutputStream.write(bytes,0,len);
bufferedOutputStream.flush();
}
}catch(Exception e){
e.printStackTrace();
System.out.println(">>>>>异常<<<<<");
}finally {
if(bufferedInputStream!=null){
try {
bufferedInputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
if(bufferedOutputStream!=null){
try {
bufferedOutputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}

2.下面是完整的代码

import java.io.*;

/**
* @author ooyhao
* //递归复制文件及文件夹
*/
public class Test {


@org.junit.Test
public void test(){
String srcPath = "G:\\面试资料";
String desPath = "G:\\copyFile";
list(srcPath,desPath);

}

public void list(String srcPath, String descPath){
File srcFile = new File(srcPath);
descPath = descPath + File.separator+srcFile.getName();
System.out.println("srcPath:"+srcPath);
System.out.println("descPath:"+descPath);
//首先判断源目录是否为一个文件夹
if(srcFile.isDirectory()){
//表示当前目录是一个文件夹
//获得当前目录下的所有file对象
File filePath = new File(descPath);
filePath.mkdirs();
File[] files = srcFile.listFiles();
for(File file : files){
list(file.getAbsolutePath(),filePath.getAbsolutePath());
}
}else{
//表示当前目录是一个文件
copyFile2(srcPath,descPath);
}

}

// 使用基本字节流进行复制
public void copyFile(String srcPath, String desPath) {
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = new FileInputStream(srcPath);
outputStream = new FileOutputStream(desPath);
byte[] bytes = new byte[1024];
int len = 0;
while ((len = inputStream.read(bytes)) != -1) {
outputStream.write(bytes,0,len);
outputStream.flush();
}
}catch(Exception e){
e.printStackTrace();
System.out.println(">>>>>异常<<<<<");
}finally {
if(inputStream!=null){
try {
inputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
if(outputStream!=null){
try {
outputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}

// 使用字节缓冲流复制文件
public void copyFile2(String srcPath, String desPath) {
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;

try {
bufferedInputStream = new BufferedInputStream(new FileInputStream(srcPath));
bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(desPath));
byte[] bytes = new byte[1024];
int len = 0;

while ((len = bufferedInputStream.read(bytes)) != -1) {
bufferedOutputStream.write(bytes,0,len);
bufferedOutputStream.flush();
}
}catch(Exception e){
e.printStackTrace();
System.out.println(">>>>>异常<<<<<");
}finally {
if(bufferedInputStream!=null){
try {
bufferedInputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
if(bufferedOutputStream!=null){
try {
bufferedOutputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
}

标签:outputStream,java,递归,bytes,文件夹,bufferedOutputStream,srcPath,new,null
From: https://blog.51cto.com/u_12131813/6002840

相关文章

  • java高级--反射(reflect)
    1.获取Class对象的几种方式/***获取Class对象的三种方式*1Object——>getClass();*2任何数据类型(包括基本数据类型)都有一个“静态”的class属性*3通过Class类......
  • An Introduction to JavaScript
    AnIntroductiontoJavaScriptAnIntroductiontoJavaScriptLet’sseewhat’ssospecialaboutJavaScript,whatwecanachievewithit,andwhatothertechn......
  • 【学懂Java】(二)流程控制语句
    流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。包含顺序结构、分支结构、循环结构。顺序结构不必多说。一.分支结构if语......
  • Java程序的加载与执行
    Java程序的运行包括两个非常重要的阶段编译阶段运行阶段编译阶段编译阶段主要的任务是检查Java源程序是否符合Java语法,符合就能够正常生成字节码文件字节码文件......
  • 7.JavaScript--正则表达式
    实验原理正则表达式是用于处理字符串的强大工具,其他编程语言中也有正则表达式式的概念,区别只在于不同的编程语言实现支持的语法数量不同。它拥有自己的独特的语法以及一个......
  • Java发送HttpPost请求
    依赖jar包<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.6</version></dependency>发......
  • 为什么list的size只有一个的时候,无法执行for循环,不然会报这个错误(Unable to evaluate
       “ConcurrentModificationException是基于java集合中的快速失败(fail-fast)机制产生的,在使用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了......
  • java.2
    初步接触java注释(comment)java中“//表示单行注释”“/*表示多行注释”“/*(此处应为星号)在java中表示文档注释”(不常用)简单的文字设置File->setting->font(改变整......
  • 在Windows上访问linux的共享文件夹
    1、https://blog.csdn.net/weixin_44147924/article/details/123692155   ......
  • [JAVA]RestHighLevelClient的超时设置
    背景设置RestHighLevelClient的超时间,防止请求时间过长,导致接口访问时间过长es官方设置TimeoutsConfiguringrequeststimeoutscanbedonebyprovidinganinstance......