diff --git a/UPDATE.md b/UPDATE.md
index b6b85be..40b7a76 100644
--- a/UPDATE.md
+++ b/UPDATE.md
@@ -1,6 +1,14 @@
yexuejc-base 更新记录
------------------
+#### version :1.5.3-jre11
+**time: **
+**branch:** jre11
+**update:**
+1. [FileUtil.java](src/main/java/com/yexuejc/base/util/FileUtil.java)增加读取大文件自定义方法和单纯读取方法
+2.
+---
+
#### version :1.5.2-jre11
**time:2024-4-7 14:34:33**
**branch:** jre11
diff --git a/src/main/java/com/yexuejc/base/util/FileUtil.java b/src/main/java/com/yexuejc/base/util/FileUtil.java
index b55f6c4..d4132d2 100644
--- a/src/main/java/com/yexuejc/base/util/FileUtil.java
+++ b/src/main/java/com/yexuejc/base/util/FileUtil.java
@@ -18,6 +18,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;
+import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.CRC32;
@@ -38,11 +39,14 @@ import io.jsonwebtoken.lang.Assert;
* @time 2017年11月3日 下午3:12:49
*/
public class FileUtil {
- static Logger logger = Logger.getLogger(FileUtil.class.getName());
+ private static final Logger logger = Logger.getLogger(FileUtil.class.getName());
private FileUtil() {
}
+
+ private static final String NEW_LINE = "\n";
+ private static final String CONSTANT_DOT = ".";
private static final String TYPE_TAR_GZ = ".tar.gz";
private static final String TYPE_CSV = ".csv";
private static final String TAR_GZ = "tar.gz";
@@ -61,7 +65,7 @@ public class FileUtil {
if (fileName.lastIndexOf(TYPE_TAR_GZ) > 0) {
return TAR_GZ;
}
- return fileName.substring(fileName.lastIndexOf(".") + 1);
+ return fileName.substring(fileName.lastIndexOf(CONSTANT_DOT) + 1);
} catch (Exception e) {
logger.severe("file doesn't exist or is not a file");
}
@@ -332,22 +336,19 @@ public class FileUtil {
}
/**
- * 分段读取大文件
+ * 分段读取大文件(不限格式)
*
- * @param csvFilePath 文件路径
+ * @param filePath 文件路径
* @param readFileBean 分段每次读取的bean 初始值需要设置每次读取的行数
* @param 读取结果类型bean
- * @return
+ * @return 文件分页读取内容(自定义处理后)及读取信息
*/
- public static ReadFileBean readBigFile(String csvFilePath, ReadFileBean readFileBean, Class readCls) throws IOException {
- if (!isFileExist(csvFilePath)) {
- throw new FileNotFoundException(String.format("解析用的csv: [%s] 文件不存在。", csvFilePath));
- }
- if (!csvFilePath.endsWith(TYPE_CSV)) {
- throw new IOException(String.format("解析用的csv: [%s] 文件不是CSV文件格式。", csvFilePath));
+ public static ReadFileBean readBigFile(String filePath, ReadFileBean readFileBean, Function, List> readAfter) throws IOException {
+ if (!isFileExist(filePath)) {
+ throw new FileNotFoundException(String.format("[%s]文件不存在。", filePath));
}
List datas = new ArrayList<>();
- try (RandomAccessFile randomAccessFile = new RandomAccessFile(new File(csvFilePath), "r")) {
+ try (RandomAccessFile randomAccessFile = new RandomAccessFile(new File(filePath), "r")) {
if (readFileBean.getPointer() < 0) {
readFileBean.setPointer(0);
}
@@ -365,29 +366,60 @@ public class FileUtil {
//无数据
return readFileBean.setDatas(new ArrayList<>());
}
-
- //csv文件处理
- com.yexuejc.base.pojo.CsvToBean csvToBean = getCsvToBean(readCls);
- readFileBean.setHeader(csvToBean.getHeader());
- if (csvToBean.hasHeader()) {
- //文件存在header,设置header优先,没设置使用文件的
- if (StrUtil.isNotEmpty(csvToBean.getHeader())) {
- //替换header
- datas.remove(0);
- datas.add(0, csvToBean.getHeader());
- } else {
- readFileBean.setHeader(datas.get(0));
- }
- } else {
- //文件不存在header,使用设置的
- datas.add(0, csvToBean.getHeader());
- }
-
- List dataList = readCsv(String.join("\n", datas), readCls, csvToBean.getDelimiter());
+ List dataList = readAfter.apply(datas);
readFileBean.setDatas(dataList);
return readFileBean;
}
+ /**
+ * 分段读取大文件(不解析)
+ *
+ * @param csvFilePath 文件路径
+ * @param readFileBean 分段每次读取的bean 初始值需要设置每次读取的行数
+ * @return 文件分页读取内容(每行为一个String对象)及读取信息
+ */
+ public static ReadFileBean readBigFile(String csvFilePath, ReadFileBean readFileBean) throws IOException {
+ return readBigFile(csvFilePath, readFileBean, (datas) -> datas);
+ }
+
+ /**
+ * 分段读取大文件(CSV格式)
+ *
+ * @param csvFilePath 文件路径
+ * @param readFileBean 分段每次读取的bean 初始值需要设置每次读取的行数
+ * @param 读取结果类型bean
+ * @return 文件分页读取内容(转bean后)及读取信息
+ */
+ public static ReadFileBean readBigFile(String csvFilePath, ReadFileBean readFileBean, Class readCls) throws IOException {
+ if (!csvFilePath.endsWith(TYPE_CSV)) {
+ throw new IOException(String.format("[%s]文件不是CSV文件格式。", csvFilePath));
+ }
+ return readBigFile(csvFilePath, readFileBean, (datas) -> {
+ //csv文件处理
+ com.yexuejc.base.pojo.CsvToBean csvToBean = getCsvToBean(readCls);
+ readFileBean.setHeader(csvToBean.getHeader());
+ if (csvToBean.hasHeader()) {
+ //文件存在header,设置header优先,没设置使用文件的
+ if (StrUtil.isNotEmpty(csvToBean.getHeader())) {
+ //替换header
+ datas.remove(0);
+ datas.add(0, csvToBean.getHeader());
+ } else {
+ readFileBean.setHeader(datas.get(0));
+ }
+ } else {
+ //文件不存在header,使用设置的
+ datas.add(0, csvToBean.getHeader());
+ }
+ try {
+ return readCsv(String.join(NEW_LINE, datas), readCls, csvToBean.getDelimiter());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ });
+
+ }
+
/**
* 获取csv的header,使用注解{@link CsvToBean}
*