基于Hutool的文本文件处理工具类:FileWriter和FileReader的使用指南

基于Hutool的文本文件处理工具类:FileWriter和FileReader的使用指南

简介

本文详细介绍了如何利用基于糊涂工具包(Hutool)的FileWriter和FileReader,实现高效的文本文件处理。包括写入、修改、删除和插入数据等功能,助力你轻松处理文本文件。

写/修改文本文件工具类

包含

  1. 修改指定行
  2. 修改多行
  3. 修改指定行的列
  4. 在某行插入数据(实际使用再循环中最好倒叙插入,防止索引变更导致插入错误)
  5. 删除指定行(同上,循环中建议倒叙删除)
import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.io.file.FileWriter;
import cn.hutool.core.text.StrSplitter;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 模型写入
 *
 * @author sxy
 * @date 2022/07/26
 */
@Slf4j
public class ModelWriterUtil {

	/**
	 * 修改指定行
	 *
	 * @param file     文件
	 * @param line     需要修改的行号(文档行号 从1开始)
	 * @param encoding 编码
	 * @param modified 修改后内容 (用,,空格或换行符 分隔)
	 */
	public static void writerSpecifyLine(File file, Integer line, String encoding, String modified) {

		FileReader fileReader = new FileReader(file, encoding);
		List<String> originalData = new ArrayList<>();
		fileReader.readLines(originalData);
		if (line <= 1 || line > originalData.size()) {
			throw new IndexOutOfBoundsException("指定行号有误");
		}
		List<String> list = StrSplitter.splitByRegex(modified, "[,, \t]", 0, true, true);
		StringBuilder sb = new StringBuilder();
		for (String s : list) {
			sb.append(s);
			sb.append("\t");
		}
		originalData.set(line - 1, sb.toString());
		FileWriter fileWriter = new FileWriter(file, encoding);
		fileWriter.writeLines(originalData);
		log.info("修改的行号{},修改后的内容{}", line, sb);
	}

	/**
	 * 修改指定行
	 *
	 * @param file     文件
	 * @param line     需要修改的行号(文档行号 从1开始)
	 * @param modified 修改后内容 (用,,空格或换行符 分隔)
	 */
	public static void writerSpecifyLine(File file, Integer line, String modified) {

		FileReader fileReader = new FileReader(file, "GBK");
		List<String> originalData = new ArrayList<>();
		fileReader.readLines(originalData);
		if (line <= 1 || line > originalData.size()) {
			throw new IndexOutOfBoundsException("指定行号有误");
		}
		List<String> list = StrSplitter.splitByRegex(modified, "[,, \t]", 0, true, true);
		StringBuilder sb = new StringBuilder();
		for (String s : list) {
			sb.append(s);
			sb.append("\t");
		}
		originalData.set(line - 1, sb.toString());
		FileWriter fileWriter = new FileWriter(file, "GBK");
		fileWriter.writeLines(originalData);
		log.info("修改的行号{},修改后的内容{}", line, sb);
	}


	/**
	 * 修改多行 (可以同时修改多行)
	 *
	 * @param file     文件
	 * @param modified 修改后内容 (Map<String,String> 键:需要修改的行号,值:修改后的数据[用,,空格或换行符 分隔])
	 * @param encoding 编码
	 */
	public static void writerMultiLine(File file, String encoding, Map<String, String> modified) {

		FileReader fileReader = new FileReader(file, encoding);
		List<String> originalData = new ArrayList<>();
		fileReader.readLines(originalData);
		Set<String> keys = modified.keySet();
		for (String key : keys) {
			String value = modified.get(key);
			List<String> list = StrSplitter.splitByRegex(value, "[,, \t]", 0, true, true);
			StringBuilder sb = new StringBuilder();
			for (String s : list) {
				sb.append(s);
				sb.append("\t");
			}
			originalData.set(Integer.parseInt(key) - 1, sb.toString());
			log.info("修改的行号{},修改后的内容{}", key, sb);
		}
		FileWriter fileWriter = new FileWriter(file, encoding);
		fileWriter.writeLines(originalData);
	}


	/**
	 * 修改多行 (可以同时修改多行)
	 *
	 * @param file     文件
	 * @param modified 修改后内容 (Map<String,String> 键:需要修改的行号,值:修改后的数据[用,,空格或换行符 分隔])
	 */
	public static void writerMultiLine(File file, Map<String, String> modified) {

		FileReader fileReader = new FileReader(file, "GBK");
		List<String> originalData = new ArrayList<>();
		fileReader.readLines(originalData);
		Set<String> keys = modified.keySet();
		for (String key : keys) {
			String value = modified.get(key);
			List<String> list = StrSplitter.splitByRegex(value, "[,, \t]", 0, true, true);
			StringBuilder sb = new StringBuilder();
			for (String s : list) {
				sb.append(s);
				sb.append("\t");
			}
			originalData.set(Integer.parseInt(key) - 1, sb.toString());
			log.info("修改的行号{},修改后的内容{}", key, sb);
		}
		FileWriter fileWriter = new FileWriter(file, "GBK");
		fileWriter.writeLines(originalData);
	}



	/**
	 * 修改指定行的列 (可以同时修改多行)
	 *
	 * @param file     文件
	 * @param modified List<String> 字符串集合 按照 『行 列 数据』 中间采用空格或逗号分割
	 */
	public static void writerSpecifyRanks(File file,String encoding ,List<String> modified) {

		FileReader fileReader = new FileReader(file, encoding);
		List<String> originalData = new ArrayList<>();
		fileReader.readLines(originalData);
		for (String s : modified) {
			//获取传入的参数 分割
			List<String> list = StrSplitter.splitByRegex(s, "[,, \t]", 0, true, true);
			if (list.size() < 3) {
				throw new IndexOutOfBoundsException("传入的数据有误,请输入 行 列 数据 三个参数 中间采用空格或逗号分割");
			}
			//行
			String line = list.get(0);
			//列
			String row = list.get(1);
			//数据
			String data = list.get(2);
			//获取原始行数据
			String originalLineData = originalData.get(Integer.parseInt(line) - 1);
			//分割原始行数据
			List<String> originalLineDataList = StrSplitter.splitByRegex(originalLineData, "[,, \t]", 0, true, true);
			//修改原始行 对应的列数据
			originalLineDataList.set(Integer.parseInt(row) - 1, data);
			StringBuilder sb = new StringBuilder();
			//重新组合字符串
			for (String dat : originalLineDataList) {
				sb.append(dat);
				sb.append("\t");
			}
			originalData.set(Integer.parseInt(line) - 1, sb.toString());
			log.info("修改的行:{}列:{},修改后的内容:{}", line, row, sb);
		}
		FileWriter fileWriter = new FileWriter(file, encoding);
		fileWriter.writeLines(originalData);
	}
	
	
	/**
	 * 修改指定行的列 (可以同时修改多行)
	 *
	 * @param file     文件
	 * @param modified List<String> 字符串集合 按照 『行 列 数据』 中间采用空格或逗号分割
	 */
	public static void writerSpecifyRanks(File file, List<String> modified) {

		FileReader fileReader = new FileReader(file, "GBK");
		List<String> originalData = new ArrayList<>();
		fileReader.readLines(originalData);
		for (String s : modified) {
			//获取传入的参数 分割
			List<String> list = StrSplitter.splitByRegex(s, "[,, \t]", 0, true, true);
			if (list.size() < 3) {
				throw new IndexOutOfBoundsException("传入的数据有误,请输入 行 列 数据 三个参数 中间采用空格或逗号分割");
			}
			//行
			String line = list.get(0);
			//列
			String row = list.get(1);
			//数据
			String data = list.get(2);
			//获取原始行数据
			String originalLineData = originalData.get(Integer.parseInt(line) - 1);
			//分割原始行数据
			List<String> originalLineDataList = StrSplitter.splitByRegex(originalLineData, "[,, \t]", 0, true, true);
			//修改原始行 对应的列数据
			originalLineDataList.set(Integer.parseInt(row) - 1, data);
			StringBuilder sb = new StringBuilder();
			//重新组合字符串
			for (String dat : originalLineDataList) {
				sb.append(dat);
				sb.append("\t");
			}
			originalData.set(Integer.parseInt(line) - 1, sb.toString());
			log.info("修改的行:{}列:{},修改后的内容:{}", line, row, sb);
		}
		FileWriter fileWriter = new FileWriter(file, "GBK");
		fileWriter.writeLines(originalData);
	}

	
	/**
	 * 在某行插入数据
	 *
	 * @param file 文件
	 * @param line 行号
	 * @param txt  内容
	 */
	public static void insertByLine(File file, Integer line, String txt) {
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> originalData = new ArrayList<>();
		fileReader.readLines(originalData);
		originalData.add(line - 1, txt);
		FileWriter fileWriter = new FileWriter(file, "GBK");
		List<String> strList = new ArrayList<>();
		for (String s : originalData) {
			List<String> listStr = StrSplitter.splitByRegex(s, "[,, \t \\s+]", 0, false, false);
			StringBuilder sb = new StringBuilder();
			for (String str : listStr) {
				sb.append(str);
				sb.append("\t");
			}
			strList.add(sb.toString());
		}
		fileWriter.writeLines(strList);
	}

	/**
	 * 删除指定行
	 *
	 * @param file 文件
	 * @param ints 整数
	 * @return {@link List}<{@link String}>
	 */
	public static List<String> deleteSpecifiedLines(File file, int... ints) {
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> data = new ArrayList<>();
		List<String> strings = fileReader.readLines(data);

		// 将要删除的行索引按照从大到小的顺序排序
		Arrays.sort(ints);
		for (int i = ints.length - 1; i >= 0; i--) {
			int index = ints[i];
			if (index >= 0 && index < strings.size()) {
				strings.remove(index);
			}
		}

		ModelFileUtil.writeByStart(file, 1, strings);
		return strings;
	}

}

读文本文件工具类

包含

  1. 指定开始行获取文本数据
  2. 指定结尾行获取文本数据
  3. 获取开始和结束范围文本数据
  4. 获取文本数据并按照正则分割
  5. 获取指定行的文本数据
package cn.yrec.clock;

import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.text.StrSplitter;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 读取模型输出
 *
 * @author sxy
 * @date 2022/07/21
 */
public class ModelOutputUtils {

	/**
	 * 指定开头获取数据
	 * 返回值是数据的字符串列表 需要自行遍历分割
	 *
	 * @param file      文件
	 * @param startLine 开始行 (文档行号 非索引)
	 * @param encoding  字符编码
	 * @return {@link List}<{@link String}>
	 */
	public static List<String> getDataListByStart(File file, Integer startLine, String encoding) {
		if (startLine <= 0) {
			throw new IndexOutOfBoundsException("开始行号不能小于1");
		}
		FileReader fileReader = new FileReader(file, encoding);
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		return data.subList(startLine - 1, data.size());
	}


	/**
	 * 指定结尾获取数据
	 *
	 * @param file     文件
	 * @param endLine  头结束行(文档行号 非索引)
	 * @param encoding 编码
	 * @return {@link List}<{@link String}>
	 */
	public static List<String> getDataListByEnd(File file, Integer endLine, String encoding) {
		if (endLine <= 0) {
			throw new RuntimeException("结束行不能小于1");
		}

		FileReader fileReader = new FileReader(file, encoding);
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (endLine > data.size()) {
			throw new IndexOutOfBoundsException("结束行大于当前数据总行数");
		}
		return data.subList(0, endLine);
	}

	/**
	 * 获取范围数据
	 *
	 * @param file      文件
	 * @param startLine 开始行(文档行号 非索引)
	 * @param endLine   结束行(文档行号 非索引)
	 * @param encoding  编码
	 * @return {@link List}<{@link String}>
	 */
	public static List<String> getRangeData(File file, Integer startLine, Integer endLine, String encoding) {
		if (startLine > endLine || startLine <= 0) {
			throw new RuntimeException("开始行或结束行异常");
		}
		FileReader fileReader = new FileReader(file, encoding);
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (endLine > data.size()) {
			throw new IndexOutOfBoundsException();
		}
		return data.subList(startLine - 1, endLine);
	}

	/**
	 * 通过正则分割指定范围的字符串
	 *
	 * @param file        文件
	 * @param startLine   开始行
	 * @param endLine     结束行
	 * @param encoding    编码
	 * @param splitRegExp 分割正则表达式
	 * @return {@link List}<{@link List}<{@link String}>> list里是list<String>
	 */
	public static List<List<String>> getSplitRangeData(File file, Integer startLine, Integer endLine, String encoding, String splitRegExp) {
		if (startLine > endLine || startLine <= 0) {
			throw new RuntimeException("开始行或结束行异常");
		}
		FileReader fileReader = new FileReader(file, encoding);
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (endLine > data.size()) {
			throw new IndexOutOfBoundsException();
		}
		List<String> list = data.subList(startLine - 1, endLine);
		List<List<String>> reList = new ArrayList<>();
		for (String s : list) {
			List<String> split = StrSplitter.splitByRegex(s, splitRegExp, 0, true, true);
			reList.add(split);
		}
		return reList;
	}


	/**
	 * 指定开头获取分割的字符串
	 *
	 * @param file        文件
	 * @param startLine   开始行
	 * @param encoding    编码
	 * @param splitRegExp 分割正则
	 * @return {@link List}<{@link List}<{@link String}>>
	 */
	public static List<List<String>> getSplitDataByStart(File file, Integer startLine, String encoding, String splitRegExp) {
		FileReader fileReader = new FileReader(file, encoding);
		List<String> datas = new ArrayList<>();
		fileReader.readLines(datas);
		List<String> list = datas.subList(startLine, datas.size());
		List<List<String>> reList = new ArrayList<>();
		for (String data : list) {
			List<String> split = StrSplitter.splitByRegex(data, splitRegExp, 0, true, true);
			reList.add(split);
		}
		return reList;
	}


	/**
	 * 指定结尾获取分割的字符串
	 *
	 * @param file        文件
	 * @param endLine     结束行
	 * @param encoding    编码
	 * @param splitRegExp 分割正则
	 * @return {@link List}<{@link List}<{@link String}>>
	 */
	public static List<List<String>> getSplitDataByEnd(File file, Integer endLine, String encoding, String splitRegExp) {
		FileReader fileReader = new FileReader(file, encoding);
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		List<String> list = data.subList(0, endLine);
		List<List<String>> reList = new ArrayList<>();
		for (String s : list) {
			List<String> split = StrSplitter.splitByRegex(s, splitRegExp, 0, true, true);
			reList.add(split);
		}
		return reList;
	}


	/**
	 * 获取指定行
	 *
	 * @param file     文件
	 * @param line     行
	 * @param encoding 编码
	 * @return {@link String}
	 */
	public static String getSpecifiedLine(File file, Integer line, String encoding) {

		FileReader fileReader = new FileReader(file, encoding);
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (line <= 0 || line > data.size()) {
			throw new IndexOutOfBoundsException("请指定正确的行号");
		}
		return data.get(line - 1);
	}


	/**
	 * 获取指定行
	 *
	 * @param file 文件
	 * @param line 行
	 * @return {@link String}
	 */
	public static String getSpecifiedLine(File file, Integer line) {

		FileReader fileReader = new FileReader(file, "GBK");
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (line <= 0 || line > data.size()) {
			throw new IndexOutOfBoundsException("请指定正确的行号");
		}
		return data.get(line - 1);
	}


	/**
	 * 获取分割指定行
	 *
	 * @param file        文件
	 * @param line        行
	 * @param encoding    编码
	 * @param splitRegExp 正则
	 * @return {@link List}<{@link String}>
	 */
	public static List<String> getSplitSpecifiedLine(File file, Integer line, String encoding, String splitRegExp) {
		FileReader fileReader = new FileReader(file, encoding);
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (line <= 0 || line > data.size()) {
			throw new IndexOutOfBoundsException("请指定正确的行号");
		}
		String s = data.get(line - 1);
		return StrSplitter.splitByRegex(s, splitRegExp, 0, true, true);
	}


	/**
	 * 获取分割指定行
	 *
	 * @param file        文件
	 * @param line        行
	 * @param splitRegExp 正则
	 * @return {@link List}<{@link String}>
	 */
	public static List<String> getSplitSpecifiedLine(File file, Integer line, String splitRegExp) {
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (line <= 0 || line > data.size()) {
			throw new IndexOutOfBoundsException("请指定正确的行号");
		}
		String s = data.get(line - 1);
		return StrSplitter.splitByRegex(s, splitRegExp, 0, true, true);
	}


	/**
	 * 指定开头获取数据
	 * 返回值是数据的字符串列表 需要自行遍历分割
	 *
	 * @param file      文件
	 * @param startLine 开始行 (文档行号 非索引)
	 * @return {@link List}<{@link String}>
	 */
	public static List<String> getDataListByStart(File file, Integer startLine) {
		if (startLine <= 0) {
			throw new IndexOutOfBoundsException("开始行号不能小于1");
		}
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		return data.subList(startLine - 1, data.size());

	}


	/**
	 * 指定结尾获取数据
	 *
	 * @param file    文件
	 * @param endLine 头结束行(文档行号 非索引)
	 * @return {@link List}<{@link String}>
	 */
	public static List<String> getDataListByEnd(File file, Integer endLine) {
		if (endLine <= 0) {
			throw new RuntimeException("结束行不能小于1");
		}

		FileReader fileReader = new FileReader(file, "GBK");
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (endLine > data.size()) {
			throw new IndexOutOfBoundsException("结束行大于当前数据总行数");
		}
		return data.subList(0, endLine);
	}

	/**
	 * 获取范围数据
	 *
	 * @param file      文件
	 * @param startLine 开始行(文档行号 非索引)
	 * @param endLine   结束行(文档行号 非索引)
	 * @return {@link List}<{@link String}>
	 */
	public static List<String> getRangeData(File file, Integer startLine, Integer endLine) {
		if (startLine > endLine || startLine <= 0) {
			throw new RuntimeException("开始行或结束行异常");
		}
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (endLine > data.size()) {
			throw new IndexOutOfBoundsException();
		}
		return data.subList(startLine - 1, endLine);
	}

	/**
	 * 通过正则分割指定范围的字符串
	 *
	 * @param file        文件
	 * @param startLine   开始行
	 * @param endLine     结束行
	 * @param splitRegExp 分割正则表达式
	 * @return {@link List}<{@link List}<{@link String}>> list里是list<String>
	 */
	public static List<List<String>> getSplitRangeData(File file, Integer startLine, Integer endLine, String splitRegExp) {
		if (startLine > endLine || startLine <= 0) {
			throw new RuntimeException("开始行或结束行异常");
		}
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		if (endLine > data.size()) {
			throw new IndexOutOfBoundsException();
		}
		List<String> list = data.subList(startLine - 1, endLine);
		List<List<String>> reList = new ArrayList<>();
		for (String s : list) {
			List<String> split = StrSplitter.splitByRegex(s, splitRegExp, 0, true, true);
			reList.add(split);
		}
		return reList;
	}


	/**
	 * 指定开头获取分割的字符串
	 *
	 * @param file        文件
	 * @param startLine   开始行
	 * @param splitRegExp 分割正则
	 * @return {@link List}<{@link List}<{@link String}>>
	 */
	public static List<List<String>> getSplitDataByStart(File file, Integer startLine, String splitRegExp) {
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> datas = new ArrayList<>();
		fileReader.readLines(datas);
		List<String> list = datas.subList(startLine, datas.size());
		List<List<String>> reList = new ArrayList<>();
		for (String data : list) {
			List<String> split = StrSplitter.splitByRegex(data, splitRegExp, 0, true, true);
			reList.add(split);
		}
		return reList;
	}


	/**
	 * 指定结尾获取分割的字符串
	 *
	 * @param file        文件
	 * @param endLine     结束行
	 * @param splitRegExp 分割正则
	 * @return {@link List}<{@link List}<{@link String}>>
	 */
	public static List<List<String>> getSplitDataByEnd(File file, Integer endLine, String splitRegExp) {
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> data = new ArrayList<>();
		fileReader.readLines(data);
		List<String> list = data.subList(0, endLine);
		List<List<String>> reList = new ArrayList<>();
		for (String s : list) {
			List<String> split = StrSplitter.splitByRegex(s, splitRegExp, 0, true, true);
			reList.add(split);
		}
		return reList;
	}



	/**
	 * 指定开头字符 从下一行获取分割的字符串
	 *
	 * @param file        文件
	 * @param startLine   开始行
	 * @param encoding    编码
	 * @param splitRegExp 分割正则
	 * @return {@link List}<{@link List}<{@link String}>>
	 */
	public static List<List<String>> getSplitDataByStartNext(File file, Integer startLine, String encoding, String splitRegExp, String startStr) {
		FileReader fileReader = new FileReader(file, encoding);
		List<String> datas = new ArrayList<>();
		fileReader.readLines(datas);
		List<String> list = datas.subList(startLine, datas.size());
		List<List<String>> reList = new ArrayList<>();
		boolean startReading = false;
		for (String data : list) {
			if (data.contains(startStr)) {
				startReading = true;
				continue;
			}
			if (startReading) {
				List<String> split = StrSplitter.splitByRegex(data, splitRegExp, 0, true, true);
				reList.add(split);
			}
		}
		return reList;
	}



	/**
	 * 指定开头字符 从下一行获取分割的字符串
	 *
	 * @param file        文件
	 * @param startLine   开始行
	 * @param splitRegExp 分割正则
	 * @return {@link List}<{@link List}<{@link String}>>
	 */
	public static List<List<String>> getSplitDataByStartStrNext(File file, Integer startLine, String splitRegExp, String startStr) {
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> datas = new ArrayList<>();
		fileReader.readLines(datas);
		List<String> list = datas.subList(startLine, datas.size());
		List<List<String>> reList = new ArrayList<>();
		boolean startReading = false;
		for (String data : list) {
			if (data.contains(startStr)) {
				startReading = true;
				continue;
			}
			if (startReading) {
				List<String> split = StrSplitter.splitByRegex(data, splitRegExp, 0, true, true);
				reList.add(split);
			}
		}
		return reList;
	}


	/**
	 * 指定开头字符 从当前行获取分割的字符串
	 *
	 * @param file          文件
	 * @param startLine     开始行
	 * @param encoding      编码
	 * @param splitRegExp   分割正则
	 * @param startStr 开始截取行的开头
	 * @param ignoreNullRow  是否忽略空行
	 * @return {@link List}<{@link List}<{@link String}>>
	 */
	public static List<List<String>> getSplitDataByStart(File file, Integer startLine, String encoding, String splitRegExp, String startStr,Boolean ignoreNullRow) {
		FileReader fileReader = new FileReader(file, encoding);
		List<String> datas = new ArrayList<>();
		fileReader.readLines(datas);
		List<String> list = datas.subList(startLine, datas.size());
		List<List<String>> reList = new ArrayList<>();
		boolean foundStartStr = false;
		for (String data : list) {
			if (!foundStartStr && !data.contains(startStr)) {
				continue;
			}
			foundStartStr = true;
			if (ignoreNullRow && data.trim().isEmpty()) {
				continue;
			}
			List<String> split = StrSplitter.splitByRegex(data, splitRegExp, 0, true, true);
			reList.add(split);
		}
		return reList;
	}


	/**
	 * 指定开头字符 从当前行获取分割的字符串
	 *
	 * @param file          文件
	 * @param startLine     开始行
	 * @param splitRegExp   分割正则
	 * @param startStr 开始截取行的开头
	 * @param ignoreNullRow  是否忽略空行
	 * @return {@link List}<{@link List}<{@link String}>>
	 */
	public static List<List<String>> getSplitDataByStartStr(File file, Integer startLine, String splitRegExp, String startStr,Boolean ignoreNullRow) {
		FileReader fileReader = new FileReader(file, "GBK");
		List<String> datas = new ArrayList<>();
		fileReader.readLines(datas);
		List<String> list = datas.subList(startLine, datas.size());
		List<List<String>> reList = new ArrayList<>();
		boolean foundStartStr = false;
		for (String data : list) {
			if (!foundStartStr && !data.contains(startStr)) {
				continue;
			}
			foundStartStr = true;
			if (ignoreNullRow && data.trim().isEmpty()) {
				continue;
			}
			List<String> split = StrSplitter.splitByRegex(data, splitRegExp, 0, true, true);
			reList.add(split);
		}
		return reList;
	}
	
}

写的烂的一,能用,没优化

THE END
喜欢就支持一下吧
点赞14 分享
xiaoding的头像-陌路小站
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容