java io 文件夹_Java IO复制个文件夹和里面的全部文件

该博客介绍了一个Java文件复制工具类,包括复制单个文件和整个目录的功能。类中实现了从源文件到目标文件的字节级复制,同时处理了目标文件已存在的情况,可以选择覆盖或不覆盖。此外,还提供了创建目标目录的逻辑。
摘要由CSDN通过智能技术生成

package com.csdn.exam.eighth;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Reader;

import java.io.Writer;

/**

*

* @author tianzhw

*

*/

public class CopyFileUtil {

private static int FILE_SIZE = 1024 * 5;

/**

* 复制单个文件,如果目标文件存在,则不复制

*

* @param srcFileName

* @param dextFileName

* @return

*/

public static boolean copyFile(String srcFileName, String dextFileName) {

return CopyFileUtil.copyFile(srcFileName, dextFileName, false);

}

/**

* 复制单个文件

*

* @param srcFileName

* 待复制文件路径

* @param dextFileName

* 目标文件路径

* @param b

* 如果目标文件存在,是否覆盖

* @return 如果成功返回true,不成功返回false

*/

private static boolean copyFile(String srcFileName, String dextFileName,

boolean b) {

// TODO Auto-generated method stub

File srcFile = new File(srcFileName);

if (!srcFile.exists()) {

System.out.println("复制文件失败:源文件" + srcFile.getName() + "不存在");

return false;

}else if(!srcFile.isFile())

{

System.out.println("复制文件失败:源文件" + srcFile.getName() + "不是一个文件");

return false;

}

File destFile=new File(dextFileName);

//判断目标文件是否存在

if(destFile.exists())

{

//如果目标文件存在,并且允许覆盖

if(b)

{

System.out.println("目标文件存在,准备删除它!");

if(!destFile.delete())

{

System.out.println("已存在文件删除不成功!");

return false;

}

}

else

{

System.out.println("复制文件失败:目标文件"+ dextFileName +"已经存在");

return false;

}

}else{

if(!destFile.getParentFile().exists())

{

System.out.println("目标文件所在目录不存在,准备创建它!");

if(!destFile.getParentFile().mkdirs())

{

System.out.println("复制文件失败,创建目标文件目录失败!");

return false;

}

}

}

int res=0;

try {

res=copyFile(new FileReader(srcFile),new FileWriter(destFile));

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if(res!=0)

{

return true;

}

return false;

}

private static int copyFile(Reader in,Writer out) {

// TODO Auto-generated method stub

int byteCount = 0;

try {

int bytesReader = -1;

char[] buffer = new char[FILE_SIZE];

try {

while ((bytesReader = in.read(buffer)) != -1) {

out.write(buffer, 0, bytesReader);

byteCount += bytesReader;

}

out.flush();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} finally {

try {

in.close();

out.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return byteCount;

}

/**

* 复制整个目录的内容,如果目标目录存在则不复制

* @param scrDirName

* @param destDirName

* @return 如果成功返回true 如果失败返回false

*/

public static boolean copyDirectory(String srcDirName,String destDirName)

{

return CopyFileUtil.copyDirectory(srcDirName, destDirName, false);

}

private static boolean copyDirectory(String srcDirName, String destDirName,

boolean b) {

// TODO Auto-generated method stub

File srcDir = new File(srcDirName);

if(!srcDir.exists())

{

System.out.println("复制目录失败:原因"+srcDir+"不存在");

return false;

}else if(!srcDir.isDirectory())

{

System.out.println("复制目录失败:原因"+srcDir+"不是一个目录");

return false;

}

//如果文件名不是以文件分隔符结尾,自动添加文件分隔符

if(!destDirName.endsWith(File.separator)){

destDirName = destDirName + File.separator;

}

File destDir = new File(destDirName,srcDir.getName());

if(destDir.exists())

{

if(b){

System.out.println("目标目录已经存在,准备它 ");

if(!destDir.delete())

{

System.out.println("复制目录失败:原因删除目录" + destDirName+"失败");

return false;

}

}

else

{

System.out.println("复制目录失败:原因"+destDirName+"以存在");

return false;

}

}

boolean flag=true;

File[] files=srcDir.listFiles();

for(File file:files)

{

if(file.isFile())

{

flag=CopyFileUtil.copyFile(file.getAbsolutePath(),destDirName+file.getName());

if(!flag)

{

break;

}

}

if(file.isDirectory())

{

flag=CopyFileUtil.copyDirectory(file.getAbsolutePath(),destDirName+file.getName());

if(!flag)

{

break;

}

}

}

return true;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值