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; } }