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;
}
}
java实现批量提取pdf指定页
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
下一篇:java 工厂类放在什么包里
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
javaweb 项目pdf.js和print.js 实现pdf预览和批量打印
pdf文件预览,直接批量打印,前后端代码实现
文件流 压缩版 官网 pdfjs printjs