Copy文件工具类

来源:互联网 发布:知乎日报api分析 编辑:程序博客网 时间:2024/06/02 12:18
/** * Copy文件工具类 * @author WuYingbin * */public class FileUtil {/** * 路径替换如:\换成/ *  * @param dir * @return */public static String replaceDir(String dir) {String newDir = dir.replace("\\", "/");return newDir;}/** * 根据路径创建文件或文件夹 *  * @param path * @return{ */public static boolean createFileOrDirByPath(String path) {boolean flag = false;return flag;}/** * 复制文件到指定目录,不存在的话创建该目录 *  * @param sourceFile * @param targetFile * @throws IOException */public static void copyFile(File sourceFile, File targetFile)throws IOException {// 新建文件输入流并对它进行缓冲FileInputStream input = new FileInputStream(sourceFile);BufferedInputStream inBuff = new BufferedInputStream(input);// 判断目标目录是否存在,不存在建立目录if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}// 新建文件输出流并对它进行缓冲FileOutputStream output = new FileOutputStream(targetFile);BufferedOutputStream outBuff = new BufferedOutputStream(output);// 缓冲数组byte[] b = new byte[1024 * 5];int len;while ((len = inBuff.read(b)) != -1) {outBuff.write(b, 0, len);}// 刷新此缓冲的输出流outBuff.flush();// 关闭流inBuff.close();outBuff.close();output.close();input.close();//不改变最后修改时间targetFile.setLastModified(sourceFile.lastModified());}/** * 复制文件夹到指定目录 * @param sourceDir * @param targetDir * @throws IOException */public static void copyDirectiory(String sourceDir, String targetDir)throws IOException {// 新建目标目录(new File(targetDir)).mkdirs();// 获取源文件夹当前下的文件或目录File[] file = (new File(sourceDir)).listFiles();System.out.println(file==null);for (int i = 0; i < file.length; i++) {if (file[i].isFile()) {// 源文件File sourceFile = file[i];// 目标文件File targetFile = new File(new File(targetDir).getAbsolutePath()+ File.separator + file[i].getName());copyFile(sourceFile, targetFile);}if (file[i].isDirectory()) {// 准备复制的源文件夹String dir1 = sourceDir + "/" + file[i].getName();// 准备复制的目标文件夹String dir2 = targetDir + "/" + file[i].getName();copyDirectiory(dir1, dir2);}}}/** * 复制文件夹到指定目录,指定日期date的days天之内的 * @param sourceDir * @param targetDir * @throws IOException */public static void copyDirectioryByDate(String sourceDir, String targetDir,Date date,int days)throws IOException {// 新建目标目录(new File(targetDir)).mkdirs();// 获取源文件夹当前下的文件或目录File[] file = (new File(sourceDir)).listFiles();//System.out.println(file==null);if(file!=null&&file.length>0){for (int i = 0; i < file.length; i++) {if (file[i].isFile()&&isRightDate(file[i], date, days)) {// 源文件File sourceFile = file[i];// 目标文件File targetFile = new File(new File(targetDir).getAbsolutePath()+ File.separator + file[i].getName());copyFile(sourceFile, targetFile);}if (file[i].isDirectory()) {// 准备复制的源文件夹String dir1 = sourceDir + "/" + file[i].getName();// 准备复制的目标文件夹String dir2 = targetDir + "/" + file[i].getName();copyDirectioryByDate(dir1, dir2,date,days);}}}}/** * 判断一个文件是否在指定时间(date)之内(days天) * @param f * @param date * @param days * @return */public static boolean isRightDate(File f,Date date,int days){boolean flag = false;long fileTime = f.lastModified();Date lastModifyTime = new Date(fileTime);double length = DateTool.dateSubtract(date, lastModifyTime);System.out.println(f.getPath()+"最后修改时间"+DateTool.getDateTime(lastModifyTime));if(length<days){flag = true;}return flag;}/** * 获取目录路径中最深一层的目录名 * @param dir * @return */public static String getLastDir(String dir){dir = dir.replace("/", "\\");String s = dir.substring(dir.lastIndexOf("\\")+1);if(s.length()==0){s = dir.substring(0,1);}return s;}/** * 获取文件的创建日期 * @param _file * @return */public static String getFileCreateDate(File _file){        File file=_file;                try{         Process ls_proc = Runtime.getRuntime().exec("cmd.exe /c dir " + file.getAbsolutePath() + " /tc");         DataInputStream in = new DataInputStream(ls_proc.getInputStream());         BufferedReader br = new BufferedReader(new InputStreamReader(in));         for (int i = 0; i < 5; i++ )         {          br.readLine();         }         String stuff = br.readLine();         //System.out.println(stuff);         StringTokenizer st = new StringTokenizer(stuff);         String dateC = st.nextToken();         String  time=st.nextToken();         in.close();         return dateC+" "+time+":00";         }catch (Exception e){          return null;         } }/**      *递归删除目录下的所有文件及子目录下所有文件     *@param dir 将要删除的文件目录      *@return boolean Returns "true" if all deletions were successful.    *If a deletion fails, the method stops attempting to     * delete and returns "false".        */     public static boolean deleteDir(File dir) {        if (dir.isDirectory()) {             String[] children = dir.list(); //递归删除目录中的子目录下             for (int i=0; i<children.length; i++) {  boolean success = deleteDir(new File(dir, children[i]));                if (!success) {                     return false;                 }             }        }          // 目录此时为空,可以删除         return dir.delete();     }     /**  * 遍历文件夹下所有文件并返回文件列表  * @param dir  * @param files  * @return  */ public static List<File> traversalFolder(String dir,List<File> files){File f = new File(dir);File[]fs = f.listFiles();for(File ff:fs){if(ff.isDirectory()){traversalFolder(ff.getPath(), files);}else{files.add(ff);}}return files; }}