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; } }