java获取文件目录树,创建文件夹、删除文件夹

目录

1.FileInfo实体类

2.service接口

3. impl实现

 4.Controller实现

5.工具类 


1.FileInfo实体类

package cn.piesat.document.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class FileInfo {
    /**
     * 文件夹或文件名
     */
    private String fileName;
    /**
     * 相对路径
     */
    private String filePath;
    /**
     * 绝对路径
     */
    private String absolutePath;
    /**
     * 文件大小
     */
    private Long fileSize;
    /**
     * 更新时间
     */
    private Date updateTime;
    /**
     * 文件中子文件
     */
    private List<FileInfo> childrenFileList;
    /**
     * 文件类型   1其他文件  2-模板文件  判断选择不同的根路径
     */
    private Integer fileType;
}

2.service接口

 /**
     * 获取文件目录树
     *
     * @param fileInfo   文件信息
     * @param isFile     是否获得文件
     * @param isChildren 是否获得子集
     * @return 文件目录树
     * @throws FileNotFoundException
     */
    List<FileInfo> getFileDirectoryTree(FileInfo fileInfo, Boolean isFile, Boolean isChildren) throws FileNotFoundException;

  /**
     * 新建文件夹
     *
     * @param fileInfo 文件信息
     * @return 新建成功返回true否则false
     */
    boolean newFolder(FileInfo fileInfo);

    /**
     * 删除文件
     *
     * @param fileInfo 文件信息
     * @return 删除成功返回true否则false
     */
    boolean delFile(FileInfo fileInfo);

3. impl实现

  /**
     * 获取文档目录树
     *
     * @param fileInfo   文件信息
     * @param isFile     是否获得文件
     * @param isChildren 是否获得子集
     * @return
     * @throws FileNotFoundException
     */
    @Override
    public List<FileInfo> getFileDirectoryTree(FileInfo fileInfo, Boolean isFile, Boolean isChildren) throws FileNotFoundException {
        List<FileInfo> tree = new ArrayList<>();
//获取根路径配置
        String rootDirectory = getRootDirectory(fileInfo.getFileType());
        File file = new File(rootDirectory + fileInfo.getFilePath());
        if (!file.exists()) {
            throw new FileNotFoundException("文件不存在");
        }

        if (file.isFile()) {
            tree.add(getFileInfo(file, fileInfo));
        } else {
            File[] files = file.listFiles();
            for (File f : files) {
                if (f.isDirectory()) {
//获取文件对象
                    FileInfo info = getFolder(f, fileInfo);
//是否获取子文件列表
                    if (isChildren) {
                        List<FileInfo> list = getFileDirectoryTree(FileInfo.builder()
                                .filePath(fileInfo.getFilePath() + "/" + f.getName())
                                .fileType(fileInfo.getFileType())
                                .build(), isFile, isChildren);
                        info.setChildrenFileList(list);
                    }
                    tree.add(info);
                } else {
//是否获取文件
                    if (isFile) {
                        tree.add(getFileInfo(f, fileInfo));
                    }
                }
            }
        }
        return tree;
    }
//设置文件属性列表
    private FileInfo getFileInfo(File f, FileInfo fileInfo) {
        FileInfo info = getFolder(f, fileInfo);
        info.setFileSize(f.length());
        info.setUpdateTime(new Date(f.lastModified()));
        info.setChildrenFileList(new ArrayList<>());
        return info;
    }
//获取文件绝对路径

    private FileInfo getFolder(File f, FileInfo fileInfo) {
        FileInfo info = new FileInfo();
        info.setFileName(f.getName());
        info.setFilePath(IoUtil.convertLinuxPath(fileInfo.getFilePath() + "/" + f.getName()));
        info.setAbsolutePath(IoUtil.convertLinuxPath(f.getAbsolutePath()));
        info.setFileType(fileInfo.getFileType());
        return info;
    }
//获取文件根路径
    private String getRootDirectory(Integer fileType) {
        String rootDirectory = "";
        switch (fileType) {
            case FileTypeConstant.FILE_OTHER:
                rootDirectory = DocManagerConfig.getUploadPath();
                break;
            case FileTypeConstant.FILE_TEMPLATE:
                rootDirectory = DocManagerConfig.getAvatarPath();
                break;
            default:
                throw new RuntimeException("非法文件类型");
        }
        return rootDirectory;
    }

 @Override
    public boolean newFolder(FileInfo fileInfo) {
        if (fileInfo.getFileType() == FileTypeConstant.ONLINE || fileInfo.getFileType() == FileTypeConstant.FZ) {
            return false;
        }
        String rootDirectory = getRootDirectory(fileInfo.getFileType());
        File file = new File(rootDirectory + fileInfo.getFilePath() + File.separator + fileInfo.getFileName());
        File faFile = new File(rootDirectory + fileInfo.getFilePath());
        if (!faFile.exists()) {
            boolean result = faFile.mkdirs();
        }

        if (!faFile.isDirectory()) {
            throw new IllegalArgumentException("该文件不是目录");
        }

        if (file.exists()) {
            throw new IllegalArgumentException("该目录已存在");
        } else {
            boolean flag = file.mkdir();
            return flag;
        }
    }

    @Override
    public boolean delFile(FileInfo fileInfo) {
        if (fileInfo.getFileType() == FileTypeConstant.ONLINE || fileInfo.getFileType() == FileTypeConstant.FZ) {
            return false;
        }
        String rootDirectory = getRootDirectory(fileInfo.getFileType());
        File file = new File(rootDirectory + fileInfo.getFilePath());
        if (!file.exists()) {
            throw new IllegalArgumentException("不存在该文件");
        }

        boolean result = true;
        if (file.isDirectory()) {
            try {
                FileUtils.deleteDirectory(file);
            } catch (IOException e) {
                result = false;
            }
        } else {
            result = file.delete();
        }

        return result;
    }

 4.Controller实现

    /**
     * 返回服务端文件目录结构
     */
    
    
    @GetMapping("/tree")
    public TableDataInfo findFileDirectoryTree(FileInfo fileInfo) {
        List<FileInfo> list = null;
        try {
            list = fileBaseInfoService.getFileDirectoryTree(fileInfo, true, false);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return getDataTable(null);
        }
        //统一返回数据方式
        return getDataTable(list);
    }


/**
     * 新建文件夹
     */
    @RequestMapping(value = "newFolder", method = RequestMethod.POST)
    @ApiOperation(value = "新建文件夹")
    public Response newFolder(FileInfo fileInfo) {
        boolean result = service.newFolder(fileInfo);
        if (result) {
            return Response.getInstance().setOk(200, "", "创建成功", null);
        } else {
            return Response.getInstance().setError(400, "", "创建失败");
        }
    }

    /**
     * 删除文件或文件夹
     */
    @RequestMapping(value = "delFile", method = RequestMethod.POST)
    @ApiOperation(value = "删除文件或文件夹")
    public Response delFile(FileInfo fileInfo) {
        boolean result = service.delFile(fileInfo);
        if (result) {
            return Response.getResultData(200, "删除成功");
        } else {
            return Response.getResultData(400, "删除失败");
        }
    }

5.工具类 

package cn.piesat.common.utils.file;

import org.apache.commons.io.IOUtils;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.nio.charset.Charset;

/**
 * @date 2018-07-17 15:29
 * @description IO操作类
 */
public class IoUtil {

    private static final org.slf4j.Logger log = LoggerFactory.getLogger(IoUtil.class);

    /**
     * 将文件读出装入byte数组中
     *
     * @param path
     * @return
     */
    public static byte[] toByteArray(String path) {
        FileInputStream is = null;
        try {
            File file = new File(path);
            if (file != null && file.exists()) {
                is = new FileInputStream(file);
                return IOUtils.toByteArray(is);
            }
            return null;
        } catch (IOException e) {
            log.error("读取" + path + "文件成byte数组失败", e);
            return null;
        } finally {
            close(is, null);
        }
    }

    /**
     * 将输入流读出装入byte数组中
     *
     * @param inputStream 输入流
     * @return
     */
    public static byte[] toByteArray(InputStream inputStream) {
        try {
            return IOUtils.toByteArray(inputStream);
        } catch (IOException e) {
            log.error("读取输入流成byte数组失败", e);
            return null;
        }
    }

    /**
     * 将本地文件读成输入流
     *
     * @param path     本地文件路径
     * @param encoding 编码
     * @return
     */
    public static InputStream toInputStream(String path, String encoding) {
        return IOUtils.toInputStream(path, Charset.forName(encoding));
    }

    /**
     * 关闭输入流和输出流
     *
     * @param is
     * @param os
     */
    public synchronized static void close(InputStream is, OutputStream os) {
        try {
            if (is != null) {
                is.close();
            }
            if (os != null) {
                os.close();
            }
        } catch (IOException e) {
            log.info("关闭读写流失败", e);
        }
    }

    public static String convertLinuxPath(String path) {
        String osName = System.getProperty("os.name");
        if (!"Linux".equals(osName)) {
            if (path.contains(":")) {
                path = path.substring(2);
            }
//            path = StringUtils.replaceAll(path, "\\", "/");
        }
        return path;
    }

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值