文件工具类(工作案例)

文件工具类(工作案例)

代码如下:

public class FileUtils {
    //日志
    private static final Logger LOGGER = LoggerFactory.getLogger(FileUtils.class);
    //文件缓冲区的长度
    public static final int BUFFERSIZE = 8192;


    /**
     * 说明:将字符串写入一个文件中
     *
     * @param filename 文件名:绝对路径
     * @param is       输入流
     * @return
     */
    public static boolean writeFile(String filename, InputStream is) {
        //文件输出流
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(filename);
            int len;
            byte[] buffer = new byte[BUFFERSIZE];
            while ((len = is.read(buffer, 0, BUFFERSIZE)) != -1) {
                fos.write(buffer, 0, len);
            }
            return true;
        } catch (Exception e) {
            LOGGER.error("Exception:", e);
            return false;
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                LOGGER.error("IOException:", e);
                return false;
            }
        }
    }


    /**
     * 说明:读取文件内容(static)
     *
     * @param filename 读取的文件名
     * @return String    文件的字符串代码
     */
    public static String readFile(String filename) {
        String return_str = "";
        try {
            FileReader fr = new FileReader(filename);
            LineNumberReader lr = new LineNumberReader(fr, 512);
            while (true) {
                String str = lr.readLine();
                if (str == null) break;
                return_str += str + "\n";
            }
            lr.close();
        } catch (FileNotFoundException e) {
            LOGGER.error("File not found:{}", e);
        } catch (IOException e) {
            LOGGER.error("IO error:{}", e);
        }
        return return_str;
    }

    /**
     * 文件复制
     *
     * @param sourceFile 源文件绝对路径
     * @param targetFile 目标文件绝对路径
     * @return 是否复制成功:true成功 false失败
     */
    public static boolean copyFile(File sourceFile, File targetFile) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(sourceFile);
            fos = new FileOutputStream(targetFile);
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fis.read(buffer, 0, 1024)) != -1) {
                fos.write(buffer, 0, len);
            }
        } catch (FileNotFoundException e) {
            LOGGER.error("FileNotFoundException:{}", e);
            return false;
        } catch (IOException e) {
            LOGGER.error("IOException:{}", e);
            return false;
        } finally {
            IOUtils.closeQuietly(fos);
            IOUtils.closeQuietly(fis);
        }
        return true;
    }

    /**
     * 递归删除文件夹及文件夹下所有文件
     * 备注:当前目录也会删除
     *
     * @param filePathName 文件绝对路径
     */
    public static void deleteDir(String filePathName) {
        File file = new File(filePathName);
        if (file.exists()) {
            deleteFile(file);
            LOGGER.info("删除文件成功");
        } else {
            LOGGER.warn("删除失败,文件目录不存在");
        }
    }

    /**
     * 递归删除文件
     * @param file
     */
    private static void deleteFile(File file) {
        //判断当前文件是目录还是文件
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                deleteFile(files[i]);
            }
            file.delete();//删除文件
        } else {
            //删除文件
            file.delete();//删除文件
        }
    }

    /**
     * 取得某个文件路径下的所有文件列表
     *
     * @param path   文件路径
     * @param filter 文件过滤器
     * @return List
     */
    public static List getListFiles(String path, FileFilter filter) {
        List list = new ArrayList();
        File file = new File(path);
        if (!file.exists()) {
            return null;
        }
        if (!file.isDirectory()) {
            list.add(file);
            return list;
        }
        File files[] = file.listFiles(filter);
        for (int i = 0; i < files.length; i++) {
            File temp = files[i];
            if (temp.isFile()) {//文件,直接添加该文件
                list.add(temp);
                continue;
            }
            List fileList = getListFiles(temp, filter);//目录,进行查找目录中的文件
            if (fileList != null) {
                list.addAll(fileList);
            }
        }
        return list;
    }

    /**
     * 递归:取得某个文件下的所有文件列表
     *
     * @param file   文件
     * @param filter 文件过滤器
     * @return List
     * @throws Exception
     */
    private static List getListFiles(File file, FileFilter filter) {
        if (file == null) {
            return null;
        }
        List list = new ArrayList();
        if (!file.isDirectory()) {
            list.add(file);
            return list;
        }
        File files[] = file.listFiles(filter);
        for (int i = 0; i < files.length; i++) {
            File temp = files[i];
            if (temp.isFile()) {//文件,直接添加该文件
                list.add(temp);
                continue;
            }
            List fileList = getListFiles(temp, filter);//目录,进行查找目录中的文件
            if (fileList != null) {
                list.addAll(fileList);
            }
        }
        return list;
    }

    /**
     * 判断文件大小
     *
     * @param len  文件长度
     * @param size 限制大小
     * @param unit 限制单位(B,KB,MB,GB)
     * @return true超过限制大小 false不超过限制大小
     */
    public static boolean checkFileSize(long len, int size, String unit) {
        double fileSize = 0;
        if ("B".equals(unit.toUpperCase())) {
            fileSize = (double) len;
        } else if ("KB".equals(unit.toUpperCase())) {
            fileSize = (double) len / 1024;
        } else if ("MB".equals(unit.toUpperCase())) {
            fileSize = (double) len / 1024 / 1024;
        } else if ("GB".equals(unit.toUpperCase())) {
            fileSize = (double) len / 1024 / 1024 / 1024;
        }
        LOGGER.info("文件大小fileSize:" + fileSize);
        if (fileSize > size) {
            return true;
        }
        return false;
    }

    public static void main(String[] args) {
        //测试文件复制
        //String sourceFilePathName = "E:\\app_data\\upload\\temp\\2022\\05\\18\\testfilecopy.xlsx";
        //String targetFilePathName = "E:\\app_data\\upload\\testfilecopy_20220518.xlsx";
        //File soruceFile = new File(sourceFilePathName);
        //File targetFile = new File(targetFilePathName);
        //boolean b = copyFile(soruceFile, targetFile);
        //if (b) {
        //    System.out.println("copy success:" + b);
        //} else {
        //    System.out.println("copy fail:" + b);
        //}

        //测试文件删除
        //String filePathName="E:\\app_data\\upload\\testdeletefile";
        //deleteDir(filePathName);

        //校验文件大小
        //File file = new File("C:\\awp_data\\upload\\temp\\lineFeedback\\F102334500.zip");
        //File file = new File("C:\\awp_data\\upload\\temp\\lineFeedback\\F102334500_1.zip");
        //long len = file.length();
        //int size = 20;
        //String unit = "MB";
        //boolean flag = checkFileSize(len, size, unit);
        //if (flag) {
        //    System.out.println("当前文件超过限制大小,限制大小为"+size+unit+" ");
        //}else{
        //    System.out.println("当前文件没有超过限制大小,限制大小为"+size+unit+" ");
        //}
    }

}

你可能感兴趣的:(工作案例总结(勿删),java)