File 工具类

根据自我需求自定义文本类,自定义如下:

public class FileUtil {
    private static final Logger logger = LoggerFactory.getLogger(FileUtil.class);
    // 文件允许格式
    private static String[] ALLOW_FILES = {".rar", ".doc", ".docx", ".zip", ".pdf", ".txt", ".xlsx", ".gif",
            ".png", ".jpg", ".jpeg", ".xls"};

    /**
     * 返回新生文件名+扩展名(即要存入服务器本地的文件名)
     *
     * @param fileExt 文件扩展名
     * @return
     */
    public static String makeFileName(String fileExt) {
        // 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名
        return UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
    }

    /**
     * 将文件存入本地路径
     *
     * @param rootPath      根路径
     * @param folder        根路径下的目录
     * @param multipartFile 文件
     */
    public static InfoAttachment saveFile(String rootPath, String folder, MultipartFile multipartFile)  {
        try {
            Date startDate = new Date();
            logger.info("文件上传开始====================");
            // 判断文件不为空及判断文件大小
            if (multipartFile.getSize() == 0 || multipartFile.isEmpty()) {
                try {
                    throw new Exception("文件为空");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            String size = FileUtil.getSize(multipartFile.getSize());
//            System.out.println("size:" + size);
            logger.info("文件大小:" + size);

            // 得到上传文件的文件名
            String fileName = FileUtil.getFileName(multipartFile.getOriginalFilename());
            logger.info("文件名:" + fileName);
            // 得到上传文件的扩展名
            String fileExt = FileUtil.getFileExt(multipartFile.getOriginalFilename());
            logger.info("上传的文件的扩展名是:" + fileExt);
            //构建附件对象
            InfoAttachment attachment = new InfoAttachment();
            // 如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法
            if (!FileUtil.checkFileType(fileName)) {
                attachment.setFlag("文件:" + fileName + ",上传文件扩展名是不允许的扩展名:" + fileExt);
                return attachment;
            }

            // 得到存文件的新文件名(包含扩展名)
            String saveFileName = FileUtil.makeFileName(fileExt);
            // 上传时生成临时文件保存目录
            String savePath = rootPath + folder + "/" + TimeUtil.getMonthTamp();
//            System.out.println("临时文件保存目录:" + savePath);
            // 保存的绝对路径
            String saveRealPath = savePath + "//" + saveFileName;
//            System.out.println("绝对路径:" + saveRealPath);
            // 保存的相对路径
            String relativePath = folder + "/" + TimeUtil.getMonthTamp() + "/" + saveFileName;
//            System.out.println("相对路径:" + relativePath);
            logger.info("保存的绝对路径为:" + saveRealPath);

            logger.info("保存的相对路径为:" + relativePath);

            // 创建目录
            File tmpDir = new File(savePath);

            if (!tmpDir.exists()) {
                tmpDir.mkdirs();
            }


            try {

                try {
                    multipartFile.transferTo(new File(saveRealPath));
                } catch (IOException e) {
                    e.printStackTrace();
                }
//                System.out.println(fileName + "文件上传成功");
                logger.info("文件:" + fileName + ",上传成功");
                logger.info("文件上传结束====================用时" + TimeUtil.calLastedTime(startDate) + "毫秒");


                attachment.setAttName(fileName);
                attachment.setAttType(fileExt);
                attachment.setAttUrl(relativePath);
                attachment.setAttSize(size);
            } catch (Exception e) {
                attachment.setFlag("文件上传失败!");
                return attachment;
            } finally {
                // 关闭输出流
                // out.close();

                // 关闭输入流
                // is.close();
            }
            return attachment;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
    /**
     * 获取文件扩展名
     *
     * @param fileName
     * @return
     */
    public static String getFileExt(String fileName) {
        return fileName.substring(fileName.lastIndexOf(".")+1).toLowerCase();
    }
    /**
     * 传入原始文件名获取文件名
     *
     * @param originalName
     * @return
     */
    public static String getFileName(String originalName) {
        // 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的
        // 如: C:\Users\H__D\Desktop\1.txt 而有些则是 : 1.txt
        // 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
        return originalName.substring(originalName.lastIndexOf("\\") + 1);
    }
    /**
     * 文件大小,返回kb.mb
     *
     * @return
     */
    public static String getSize(long fileLength) {
        String size = "";
        DecimalFormat df = new DecimalFormat("#.00");
        if (fileLength < 1024) {
            size = df.format((double) fileLength) + "BT";
        } else if (fileLength < 1048576) {
            size = df.format((double) fileLength / 1024) + "KB";
        } else if (fileLength < 1073741824) {
            size = df.format((double) fileLength / 1048576) + "MB";
        } else {
            size = df.format((double) fileLength / 1073741824) + "GB";
        }
        return size;
    }
    /**
     * 文件类型判断
     *
     * @param fileName
     * @return
     */
    public static boolean checkFileType(String fileName) {
        // 定义允许上传的文件扩展名
        Iterator<String> type = Arrays.asList(ALLOW_FILES).iterator();
        while (type.hasNext()) {
            String ext = type.next();
            if (fileName.toLowerCase().endsWith(ext)) {
                return true;
            }
        }
        return false;
    }
}
发布了5 篇原创文章 · 获赞 0 · 访问量 154

猜你喜欢

转载自blog.csdn.net/w_v007/article/details/104160823