zoukankan      html  css  js  c++  java
  • 文件File操作工具类

    package com.csf.etlinger.common.utils;
    
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.channels.FileChannel;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.commons.lang.StringUtils;
    import org.apache.log4j.Logger;
    
    
    /**
     * 文件操作类
     * @author mafenglei  2016-04-06
     */
    public class FileUtils {
        private static Logger logger = Logger.getLogger(FileUtils.class);
        
        private static final String pathError = "系统该路径不存在!";
    
        /**
         * 创建文件
         * @param fielPath
         * @return
         * @throws TblPccsException
         */
        public static File createFile(String filePath) throws Exception{
            File file = null;
            file = new File(filePath);
            return file;
        }
        
        /**
         * 单个文件复制
         * @param sourceFile 源文件夹路径
         * @param targetFile 目标文件夹路径
         * @throws TblPccsException
         */
        public static void moveFile(File sourceFile,File targetFile) throws Exception{
            FileInputStream fi = null;
            FileOutputStream fo = null;
            FileChannel in = null;
            FileChannel out = null;
            try{
                fi = new FileInputStream(sourceFile);
                fo = new FileOutputStream(targetFile);
                in = fi.getChannel();
                out = fo.getChannel();
                /**连接2个文件通道,从in通道读取,写入到out通道*/
                in.transferTo(0, in.size(), out);
            }catch (IOException e) {
                e.printStackTrace();
                logger.error(e.getMessage());
            }finally{
                try {
                    fi.close();
                    fo.close();
                    in.close();
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    logger.error(e.getMessage());
                }
            }
        }
        
        /**
         * 把一个目录下的所有文件复制到另一个目录下
         * @param sourceFile
         * @param targetFile
         * @throws TblPccsException
         */
        public static void moveFolder(String  sourcePath,String targetPath) throws Exception{
            try{
                /**拷贝文件是否存在*/
                if(StringUtils.isBlank(sourcePath)){
                    logger.info(sourcePath+pathError);
                    return;
                }
                /**备份路径*/
                File targetFile = createFile(targetPath);
                if(!targetFile.exists()){
                    targetFile.mkdirs();//创建文件夹
                    logger.info("目录[" + targetPath + "]不存在,已创建");
                }
                /**拷贝文件*/
                File sourceFile = createFile(sourcePath);
                File[] fileList = sourceFile.listFiles();//目录下所有文件
                if(fileList !=null && fileList.length >0){
                    for(File file : fileList){
                        if(!file.isFile()){
                            continue;
                        }
                        String name = file.getName();
                        if(name.endsWith("zip")){
                            continue;
                        }
                        String backFilePath = targetFile.getAbsolutePath()+File.separator+name;
                        File backFile = createFile(backFilePath);
                        moveFile(file,backFile);
                    }
                }else{
                    logger.info(sourcePath+"该路径下没有文件 备份终止");
                    return;
                }
            }catch(Exception e){
                e.printStackTrace();
                logger.error(e.getMessage());
            }
        }
        
        /**
         * 把一个目录下的部分文件移动到另一目录下
         * @param original 源文件路径
         * @param copy     目标文件路径
         * @param number   复制的文件个数
         */
        public static void startMove(String original,String copy,int number){
            try{
                File targetFile = FileUtils.createFile(copy);
                if(!targetFile.exists()){
                    targetFile.mkdirs();
                    logger.info("目录[" + targetFile + "]不存在,已创建");
                }
                
                //待删除的文件
                List<String> prepDelFile = new ArrayList<>();
                File file = new File(original);
                int  count = 0;
                
                if(file.exists()){
                    File [] files = file.listFiles();
                    
                    if(files.length > 0){
                        
                        for(int i=0 ; i < files.length ; i ++){
                            count ++;
                            String prefectFileName = original + File.separator + files[i].getName();
                            String copyPath = copy + File.separator + files[i].getName();
                            
                            /* 文件复制 **/
                            FileUtils.singleFileReplication(prefectFileName,copyPath);
                            
                            //放入待删除内存
                            prepDelFile.add(prefectFileName);
                            
                            //平分文件
                            if(count == number){
                                break;
                            }
                        }
                    }else{
                        logger.info("目录 [" +original+ "] 下 没有文件");
                    }
                }else{
                    logger.info("源文件目录[" +original +"] 不存在!");
                }
                logger.info("目录 【" +original +"】下 "+number+"个文件已成功复制到 【" + copy  + " 】目录下" );
                
                /* 文件删除 **/
                for(int i=0 ; i < prepDelFile.size() ; i ++){
                    FileUtils.deleteOneFile(prepDelFile.get(i));//文件删除
                }
                
                logger.info("【" +original+ "】目录下"+number+" 原文件  已成功删除!");
            
            }catch(Exception e){
                logger.error(e);
                e.printStackTrace();
            }
        }
        
        /**
         * 单个文件复制
         * @param fatherPath 源文件路径
         * @param copyPath   复制文件路径
         * @throws IOException
         */
        public static void singleFileReplication(String fatherPath,String copyPath) {
            try{
                //
                FileInputStream fis = new FileInputStream(fatherPath);
                BufferedInputStream bufis = new BufferedInputStream(fis);
                
                //
                FileOutputStream fos = new FileOutputStream(copyPath);
                BufferedOutputStream bufos = new BufferedOutputStream(fos);
         
                int len = 0;
                while ((len = bufis.read()) != -1) {
                    bufos.write(len);
                }
                bufis.close();
                bufos.close();
            }catch(Exception e){
                logger.error(e.getMessage());
                e.printStackTrace();
            }
        }
        
        /**
         * 文件夹下指定文件复制
         * @param sourcePath
         * @param targetPath
         * @param startStr 文件名以开头的字符串
         * @throws TblPccsException
         */
        public void moveAppointFile(String sourcePath,String targetPath,String startStr) throws Exception{
            try{
                /**拷贝文件是否存在*/
                if(StringUtils.isBlank(sourcePath)){
                    logger.info(sourcePath+pathError);
                    return;
                }
                /**备份文件夹*/
                File targetFile = createFile(targetPath);
                if(!targetFile.exists()){
                    targetFile.mkdirs();
                    logger.info("目录[" + targetPath + "]不存在,已创建");
                }
                /**拷贝文件*/
                File sourceFile = createFile(sourcePath);
                File[] fileList = sourceFile.listFiles();
                if(fileList!=null && fileList.length > 0){
                    for(File file : fileList){
                        if(!file.isFile()){
                            continue;
                        }
                        /**指定文件*/
                        String fileName = file.getName();
                        if(fileName.startsWith(startStr)){
                            String backFilePath  = targetFile.getAbsolutePath()+File.separator+file.getName();
                            File backFile = createFile(backFilePath);
                            moveFile(file, backFile);
                        }
                    }
                }else{
                    logger.info(sourcePath+"该路径下没有文件");
                    return;
                }
                
            }catch(Exception e){
                e.printStackTrace();
                logger.error(e.getMessage());
            }
        }
        
        
        /**
         * 删除指定一个文件
         * @param file
         * @throws TblPccsException
         */
        public static void delFile(File file) throws Exception{
            if(file.exists()){
                file.delete();
            }else{
                logger.info(file.getName()+"不存在!");
            }
    
        }
        
        /**
         * 删除动作
         * @param path
         */
        public static void deleteAll(String path){
            try{
                FileUtils.deleteFiles(path);//文件删除
                Thread.sleep(1000*2);
                FileUtils.delete(path); //文件夹删除
            }catch(Exception e){
                logger.error(e);
                e.printStackTrace();
            }
        }
        
        /**
         * 删除指定目录
         * @param path
         */
        public static void delete(String path){
            File file = new File(path);
            if(file.exists()){
                file.delete();
                logger.info("指定目录 " + path + "已成功删除");
            }
        }
        
        /**
         * 删除指定的一个文件
         * @param fileName
         */
        public static void deleteOneFile(String fileName){
            File file = new File(fileName);
            
            if(file.exists()){
                file.delete();
            }else{
                logger.info("指定文件 【" +file  +"】不存在,无法删除");
            }
            
        }
        
        /**
         * 删除指定目录下的所有文件
         * @param delPath
         */
        public static void deleteFiles(String delPath){
            File file = new File(delPath);
            if(file.exists()){
                File [] files = file.listFiles();
                if(files != null || files.length > 0){
                    for(int i =0; i<files.length; i ++){
                        if(files[i].isDirectory()){
                            deleteFiles(delPath+File.separator+files[i].getName());
                        }
                        files[i].delete();
                        logger.info( delPath + File.separator + files[i] + "文件成功删除");
                        
                    }
                }else{
                    logger.info(delPath + "该目录下没有文件 ,终止删除操作");
                }
            }else{
                logger.info(delPath + "目录不存在, 终止删除操作");
            }
        }
        
    //    @Test
        public static void main(String[] agrs){
    //        deleteFiles("C:\Users\fenglei.ma\Desktop\数据读取\test1");
            delete("C:\Users\fenglei.ma\Desktop\数据读取\test1");
            
    //        String sourcePath = "C:\Users\fenglei.ma\Desktop\数据读取\test";
    //        String targetPath = "C:\Users\fenglei.ma\Desktop\数据读取\test1";
    //        try {
    //            moveFolder(sourcePath,targetPath);
    //            System.out.println("运行结束");
    //        } catch (Exception e) {
    //            // TODO Auto-generated catch block
    //            e.printStackTrace();
    //        }
        }
    
    }
  • 相关阅读:
    ASP.NET MVC 实现二级域名(泛域名)
    linq to sql 语句基本查询(3):Select和Count/Sum/Min/Max/Avg
    DataSet用法详细
    MVC中返回Json的几种声明方式
    利用索引提高SQL Server数据处理的效率
    嫁给以下十种男人的女人离“地狱”就不远了
    Thinkpad x200 X201拆机换风扇教程 实图
    笔记一则
    冬季谨防胃病复发 放松精神吃温热食物
    就是这样给X200加内存的(申精)
  • 原文地址:https://www.cnblogs.com/xiaolei2017/p/8944718.html
Copyright © 2011-2022 走看看