java FileUtils 批量读取文件内所有文件【包含子文件】,并统一命名存储到新路径

package com.tterpcloud.tterp.common.core.util;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.*;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author :sam-yang
 * @date :Created in 2020/9/5 11:41
 * @description:测试类
 * @modified By:
 * @version: 1.0
 */
public class FileReadUtil {

    public static void main(String[] args) throws Exception {
        List<File> filePaths = new ArrayList<>();
        filePaths = readAllFile( "Url", filePaths );
        Boolean status = true;
        File file = new File("F:\\prodImgList1101.txt");
        if(file.exists()){
            System.out.println("文件已存在");
        }else{
            try{
                file.createNewFile();
                System.out.println("创建成功");
            }catch (IOException e){
                System.out.println("创建失败:"+e.toString());
            }
        }
        FileWriter fw = new FileWriter(file);

        File fileError = new File("F:\\prodImgErrorList1101.txt");
        if(fileError.exists()){
            //System.out.println("文件已存在");
        }else{
            try{
                fileError.createNewFile();
                //System.out.println("创建成功");
            }catch (IOException e){
                //System.out.println("创建失败:"+e.toString());
            }
        }
        FileWriter fwError = new FileWriter(fileError);
        int num = 0;
        int numRun = 0;
        for ( File path : filePaths ) {
            String resFilePath = path.toString();
            numRun++;
            String distFolder = "F:\\deyinImg20201101";
            if (resFilePath.contains("主图")&&!resFilePath.contains("详情")){
                if (resFilePath.contains(".jpg")||resFilePath.contains(".png")){
                    if(status){
                        num ++;
                        /*if(num>2){
                            status = false;
                        }*/
                        String newFilePath = StringToolkit.getParentPath(resFilePath);
                        //String newFilePath = StringToolkit.formatPath(StringToolkit.getParentPath(resFilePath) + "/" + newFileName);
                        String newFilePathParent = StringToolkit.getParentPath(newFilePath);
                        String[] pathStringList = newFilePathParent.split("\\\\");
                        String prodCodeName = pathStringList[pathStringList.length-1];
                        String[] resFilePathList = resFilePath.split("\\\\");
                        String imgName = resFilePathList[resFilePathList.length-1];
                        String imgNameNew = imgName;
                        String fileType = "";
                        try {
                            String[] fileTypeList = imgNameNew.split("\\.");
                            fileType = fileTypeList[fileTypeList.length-1];
                            imgNameNew = "1"+"."+fileType;
                        }catch (Exception ex){

                        }
                        String newFileName = prodCodeName + "_" + imgNameNew;


                        File resFile = new File(resFilePath);
                        File distFile = new File(distFolder);
                        if (resFile.isDirectory()) {
                            FileUtils.copyDirectoryToDirectory(resFile, distFile);
                        } else if (resFile.isFile()) {
                            FileUtils.copyFileToDirectory(resFile, distFile, true);
                        }

                        String newFileUrl = distFolder+"\\"+imgName;
                        String newFilePathCreate = StringToolkit.formatPath(distFolder + "/" + newFileName);

                        try{
                            if(isExist(newFilePathCreate)){
                                int uuidI = (int)((Math.random()*9+1)*100000);
                                String uuid = String.valueOf(uuidI);
                                newFileName = prodCodeName + "_" +  uuid + imgNameNew;
                                newFilePathCreate = StringToolkit.formatPath(distFolder + "/" +newFileName);
                            }
                        }catch (Exception e){
                        }
                        File resFileNew = new File(newFileUrl);
                        File newFile = new File(newFilePathCreate);

                        resFileNew.renameTo(newFile);
                        try{
                            if(isExist(newFileUrl)){
                                deleteFile(newFileUrl);
                            }
                        }catch (Exception e){

                        }
                        fw.write(prodCodeName+"|"+newFileName);
                        fw.write("\r\n");
                    }
                }
            }else{
                fwError.write(resFilePath);
                fwError.write("\r\n");
            }
            System.out.println("文件总数:"+filePaths.size()+";当前执行:"+numRun+";执行目录:"+resFilePath);
        }
        fw.flush();
        fw.close();
        fwError.flush();
        fwError.close();
    }
    /**
     * 读取一个文件夹下所有文件及子文件夹下的所有文件
     *
     * @param filePath 文件路径
     * @return
     */
    public static List<File> readAllFile(String filePath) {
        File f = new File(filePath);
        // 得到f文件夹下面的所有文件。
        File[] files = f.listFiles();
        List<File> list = new ArrayList<File>();
        for (File file : files) {
            if (file.isDirectory()) {
                //如何当前路劲是文件夹,则循环读取这个文件夹下的所有文件,如果有二级目录,则添加文件名称为二级目录/文件名称
                list = readAllFile(file.getAbsolutePath());
            } else {
                list.add(file);
            }
        }
        return list;
    }
    /**
     * 读取一个文件夹下的所有文件夹和文件
     *
     * @param filePath 文件路径
     */
    public static List<File> readFile(String filePath) {
        File f = new File(filePath);
        // 得到f文件夹下面的所有文件。
        List<File> list = new ArrayList<File>();
        File[] files = f.listFiles();
        for (File file : files) {
            list.add(file);
        }
        return list;
    }

    /**
     * 读取一个文件夹下所有文件及子文件夹下的所有文件
     *
     * @param filePath 文件路径
     * @return
     */
    public static List<File> readAllFile(String filePath,List<File> list) {
        File f = new File(filePath);
        // 得到f文件夹下面的所有文件。
        File[] files = f.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                //如何当前路劲是文件夹,则循环读取这个文件夹下的所有文件,如果有二级目录,则添加文件名称为二级目录/文件名称
                readAllFile(file.getAbsolutePath(),list);
            } else {
                list.add(file);
            }
        }
        return list;
    }

    /**
     * 复制文件或者目录,复制前后文件完全一样。
     *
     * @param resFilePath 源文件路径
     * @param distFolder    目标文件夹
     * @IOException 当操作发生异常时抛出
     */
    public static void copyFile(String resFilePath, String distFolder) throws IOException {
        File resFile = new File(resFilePath);
        File distFile = new File(distFolder);
        if (resFile.isDirectory()) {
            FileUtils.copyDirectoryToDirectory(resFile, distFile);
        } else if (resFile.isFile()) {
            FileUtils.copyFileToDirectory(resFile, distFile, true);
        }
    }

    /**
     * 删除一个文件或者目录
     *
     * @param targetPath 文件或者目录路径
     * @IOException 当操作发生异常时抛出
     */
    public static void deleteFile(String targetPath) throws IOException {
        File targetFile = new File(targetPath);
        if (targetFile.isDirectory()) {
            FileUtils.deleteDirectory(targetFile);
        } else if (targetFile.isFile()) {
            targetFile.delete();
        }
    }

    /**
     * 移动文件或者目录,移动前后文件完全一样,如果目标文件夹不存在则创建。
     *
     * @param resFilePath 源文件路径
     * @param distFolder    目标文件夹
     * @IOException 当操作发生异常时抛出
     */
    public static void moveFile(String resFilePath, String distFolder) throws IOException {
        File resFile = new File(resFilePath);
        File distFile = new File(distFolder);
        if (resFile.isDirectory()) {
            FileUtils.moveDirectoryToDirectory(resFile, distFile, true);
        } else if (resFile.isFile()) {
            FileUtils.moveFileToDirectory(resFile, distFile, true);
        }
    }


    /**
     * 重命名文件或文件夹
     *
     * @param resFilePath 源文件路径
     * @param newFileName 重命名
     * @return 操作成功标识
     */
    public static boolean renameFile(String resFilePath, String newFileName) {
        String newFilePath = StringToolkit.formatPath(StringToolkit.getParentPath(resFilePath) + "/" + newFileName);
        File resFile = new File(resFilePath);
        File newFile = new File(newFilePath);
        return resFile.renameTo(newFile);
    }

    /**
     * 读取文件或者目录的大小
     *
     * @param distFilePath 目标文件或者文件夹
     * @return 文件或者目录的大小,如果获取失败,则返回-1
     */
    public static long genFileSize(String distFilePath) {
        File distFile = new File(distFilePath);
        if (distFile.isFile()) {
            return distFile.length();
        } else if (distFile.isDirectory()) {
            return FileUtils.sizeOfDirectory(distFile);
        }
        return -1L;
    }

    /**
     * 判断一个文件是否存在
     *
     * @param filePath 文件路径
     * @return 存在返回true,否则返回false
     */
    public static boolean isExist(String filePath) {
        return new File(filePath).exists();
    }

    /**
     * 本地某个目录下的文件列表(不递归)
     *
     * @param folder ftp上的某个目录
     * @param suffix 文件的后缀名(比如.mov.xml)
     * @return 文件名称列表
     */
    public static String[] listFilebySuffix(String folder, String suffix) {
        IOFileFilter fileFilter1 = new SuffixFileFilter(suffix);
        IOFileFilter fileFilter2 = new NotFileFilter(DirectoryFileFilter.INSTANCE);
        FilenameFilter filenameFilter = new AndFileFilter(fileFilter1, fileFilter2);
        return new File(folder).list(filenameFilter);
    }

    /**
     * 将字符串写入指定文件(当指定的父路径中文件夹不存在时,会最大限度去创建,以保证保存成功!)
     *
     * @param res            原字符串
     * @param filePath 文件路径
     * @return 成功标记
     */
    public static boolean string2File(String res, String filePath) {
        boolean flag = true;
        BufferedReader bufferedReader = null;
        BufferedWriter bufferedWriter = null;
        try {
            File distFile = new File(filePath);
            if (!distFile.getParentFile().exists()) distFile.getParentFile().mkdirs();
            bufferedReader = new BufferedReader(new StringReader(res));
            bufferedWriter = new BufferedWriter(new FileWriter(distFile));
            char buf[] = new char[1024];         //字符缓冲区
            int len;
            while ((len = bufferedReader.read(buf)) != -1) {
                bufferedWriter.write(buf, 0, len);
            }
            bufferedWriter.flush();
            bufferedReader.close();
            bufferedWriter.close();
        } catch (IOException e) {
            flag = false;
            e.printStackTrace();
        }
        return flag;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值