在写工具类或进行文本分析时, 对小文本文件的读写是一种很常见的操作. 对于小文件文件, 一次性读取到内存, 然后再做分析处理, 比边读边处理更快. 因此笔者封装了一个工具类, 专门用于读写小文本文件.
1. API 简介
- 核心API 分为三类: 读取文件, 写入文件, 追加文件. 笔者针对常用的默认参数做了一定的方法重载.
- filter API 需要jdk8 支持
方法签名 | 方法描述 |
---|---|
List readFile(String filePath) | 读取文件内容, 默认以UTF-8编码打开文件 |
public static List readFile(String filePath, String encoding) | 读取文件内容, 以指定编码格式打开文件 |
public static List readFile(String filePath, boolean ignoreEmptyLine) | 读取文件内容, 可忽略空行 |
public static List readFile(String filePath, boolean ignoreEmptyLine, String encoding) | 读取文件内容, 以指定编码格式打开文件, 可忽略空行 |
public static List readFile(String filePath, Predicate filter) | 读取文件内容, 可自定义过滤器, 过滤行. 默认以UTF-8编码打开文件 |
public static List readFile(String filePath, Predicate ignoreFilter, String encoding) | 读取文件内容. |
public static void writeFile(List contents, String filePath) | 向文件中追加内容. 默认以UTF-8编码写入文件. 当文件已存在时, 进行文件覆盖 |
public static void writeFile(List contents, String filePath, boolean overrideFile) | 向文件中追加内容, 默认以UTF-8编码写入文件 |
public static void writeFile(List contents, String filePath, String encoding) | 向文件中追加内容, 当文件存在时, 会进行文件覆盖 |
public static void writeFile(List contents, String filePath, String encoding, boolean overrideFile) | 向文件中追加内容. |
public static void appendFile(List contents, String filePath) | 向文件中追加内容, 默认以UTF-8格式写入文件, 当文件不存在时创建新的文件. |
public static void appendFile(List contents, String filePath, boolean creatNewFile) | 向文件中追加内容, 默认写入文件编码为UTF-8 |
public static void appendFile(List contents, String filePath, String encoding) | 向文件中追加内容, 当文件不存在时, 创建新文件 |
public static void appendFile(List contents, String filePath, String encoding, boolean creatNewFile) | 向文件中追加内容. |
2. TxtFileUtil 源码
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
/**
* @Description: 文本文件读写, 当文件内容过大时, 需要考虑内存
* @author: zongf
* @date: 2019-06-11 14:37
*/
public class TxtFileUtil {
/** utf-8 编码*/
private static String ENCODING_UTF8 = "UTF-8";
/** gbk 编码 */
private static String ENCODING_GBK = "GBK";
/** gb2312 编码 */
private static String ENCODING_GB2312 = "GB2312";
/**
* @Description: 读取文件内容, 默认以UTF-8编码打开文件
* @param filePath 文件路径, 支持相对路径和绝对路径
* @return List<String> 文件内容
* @author: zongf
* @time: 2019-06-11 15:09:28
*/
public static List<String> readFile(String filePath){
return readFile(filePath, line -> true, ENCODING_UTF8);
}
/**
* @Description: 读取文件内容, 以指定编码格式打开文件
* @param filePath 文件路径, 支持相对路径和绝对路径
* @param encoding 文件编码
* @return List<String> 文件内容
* @author: zongf
* @time: 2019-06-11 15:09:28
*/
public static List<String> readFile(String filePath, String encoding){
return readFile(filePath, line -> true, encoding);
}
/**
* @Description: 读取文件内容, 可忽略空行
* @param filePath 文件路径, 支持相对路径和绝对路径
* @param ignoreEmptyLine 忽略空行
* @return List<String> 文件内容
* @author: zongf
* @time: 2019-06-11 15:09:28
*/