在写工具类或进行文本分析时, 对小文本文件的读写是一种很常见的操作. 对于小文件文件, 一次性读取到内存, 然后再做分析处理, 比边读边处理更快. 因此笔者封装了一个工具类, 专门用于读写小文本文件.

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*/public static List<String> readFile(String filePath, boolean ignoreEmptyLine){return readFile(filePath, line -> "".equals(line.trim()), ENCODING_UTF8);}/*** @Description: 读取文件内容, 以指定编码格式打开文件, 可忽略空行* @param filePath 文件路径, 支持相对路径和绝对路径* @param ignoreEmptyLine 忽略空行* @return List<String> 文件内容* @author: zongf* @time: 2019-06-11 15:09:28*/public static List<String> readFile(String filePath, boolean ignoreEmptyLine, String encoding){return readFile(filePath, line -> "".equals(line.trim()), encoding);}/*** @Description: 读取文件内容, 可自定义过滤器, 过滤行. 默认以UTF-8编码打开文件* @param filePath 文件路径, 支持相对路径和绝对路径* @param filter 过滤器* @return List<String> 文件内容* @author: zongf* @time: 2019-06-11 15:09:28*/public static List<String> readFile(String filePath, Predicate<String> filter){return readFile(filePath, filter, ENCODING_UTF8);}/*** @Description: 读取文件内容.* @param filePath 文件路径, 支持相对路径和绝对路径* @param encoding 设置以哪种文件编码打开文件* @param ignoreFilter 忽略的行过滤器* @return List<String> 文件内容* @author: zongf* @time: 2019-06-11 15:09:28*/public static List<String> readFile(String filePath, Predicate<String> ignoreFilter, String encoding) {// 创建list 存储文件内容List<String> contents = new ArrayList<String>();File file = new File(filePath);BufferedReader br = null;try {br = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding));String line = null;while ((line = br.readLine()) != null) {if (!ignoreFilter.test(line)) {contents.add(line);}}} catch (FileNotFoundException e) {throw new RuntimeException(filePath + "文件不存在");} catch (IOException e) {throw new RuntimeException(filePath + "文件打开失败");}finally {close(br);}return contents;}/*** @Description: 向文件中追加内容. 默认以UTF-8编码写入文件. 当文件已存在时, 进行文件覆盖* @param contents 文件内容* @param filePath 文件路径, 支持相对路径和绝对路径* @author: zongf* @time: 2019-06-11 15:09:28*/public static void writeFile(List<String> contents, String filePath){writeFile(contents, filePath, ENCODING_UTF8, true);}/*** @Description: 向文件中追加内容, 默认以UTF-8编码写入文件* @param contents 文件内容* @param filePath 文件路径, 支持相对路径和绝对路径* @param overrideFile 当文件已存在时, 是否进行文件覆盖.* @author: zongf* @time: 2019-06-11 15:09:28*/public static void writeFile(List<String> contents, String filePath, boolean overrideFile){writeFile(contents, filePath, ENCODING_UTF8, overrideFile);}/*** @Description: 向文件中追加内容, 当文件存在时, 会进行文件覆盖* @param contents 文件内容* @param filePath 文件路径, 支持相对路径和绝对路径* @param encoding 指定新成文件文件编码* @author: zongf* @time: 2019-06-11 15:09:28*/public static void writeFile(List<String> contents, String filePath, String encoding){writeFile(contents, filePath, encoding, true);}/*** @Description: 向文件中追加内容.* @param contents 文件内容* @param filePath 文件路径, 支持相对路径和绝对路径* @param encoding 指定新成文件文件编码* @param overrideFile 当文件已存在时, 是否进行文件覆盖.* @author: zongf* @time: 2019-06-11 15:09:28*/public static void writeFile(List<String> contents, String filePath, String encoding, boolean overrideFile) {File file = new File(filePath);// 校验文件是否存在if(file.exists() && !overrideFile){throw new RuntimeException("文件已存在!");}BufferedWriter bw = null;try {bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding));for (String content : contents) {bw.write(content);bw.newLine();}} catch (IOException e) {e.printStackTrace();}finally {close(bw);}}/*** @Description: 向文件中追加内容, 默认以UTF-8格式写入文件, 当文件不存在时创建新的文件.* @param contents 文件内容* @param filePath 文件路径, 支持相对路径和绝对路径* @author: zongf* @time: 2019-06-11 15:09:28*/public static void appendFile(List<String> contents, String filePath){appendFile(contents, filePath, ENCODING_UTF8, true);}/*** @Description: 向文件中追加内容, 默认写入文件编码为UTF-8* @param contents 文件内容* @param filePath 文件路径, 支持相对路径和绝对路径* @param creatNewFile 当文件不存在时, 是否创建新的文件* @author: zongf* @time: 2019-06-11 15:09:28*/public static void appendFile(List<String> contents, String filePath, boolean creatNewFile){appendFile(contents, filePath, ENCODING_UTF8, creatNewFile);}/*** @Description: 向文件中追加内容, 当文件不存在时, 创建新文件* @param contents 文件内容* @param filePath 文件路径, 支持相对路径和绝对路径* @param encoding 指定新成文件文件编码* @author: zongf* @time: 2019-06-11 15:09:28*/public static void appendFile(List<String> contents, String filePath, String encoding){appendFile(contents, filePath, encoding, true);}/*** @Description: 向文件中追加内容.* @param contents 文件内容* @param filePath 文件路径, 支持相对路径和绝对路径* @param encoding 指定新成文件文件编码* @param creatNewFile 当文件不存在时, 是否创建新的文件* @author: zongf* @time: 2019-06-11 15:09:28*/public static void appendFile(List<String> contents, String filePath, String encoding, boolean creatNewFile) {File file = new File(filePath);// 校验文件是否存在if(!file.exists() && !creatNewFile){throw new RuntimeException("文件不存在!");}BufferedWriter bw = null;try {bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), encoding));for (String content : contents) {bw.write(content);bw.newLine();}} catch (IOException e) {e.printStackTrace();}finally {close(bw);}}/*** @Description: 手工关闭流* @param closeable* @author: zongf* @time: 2019-06-11 15:08:41*/private static void close(Closeable closeable) {if (closeable != null) {try {closeable.close();} catch (IOException e) {e.printStackTrace();}}}}

TxtFileUtil-文本文件操作工具类相关推荐

  1. 字符串工具类、数组工具类、集合工具类、转型操作工具类、编码与解码操作工具类...

    package hjp.smart4j.framework.util;import org.apache.commons.lang3.StringUtils;/*** 字符串工具类*/ public ...

  2. XML文档操作工具类

    1 /// <summary> 2 /// XML文档操作工具类 3 /// </summary> 4 public class XmlUtil 5 { 6 #region X ...

  3. Code片段 : .properties属性文件操作工具类 JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "贵专" - 泥瓦匠 一.java.util.Properties API ...

  4. 文件操作工具类FileUtil

    分享一个文件处理的工具类,依赖如下: <dependency><groupId>org.apache.ant</groupId><artifactId> ...

  5. geotools读取shp文件及shp文件操作工具类代码

    geotools读取shp文件及shp文件操作工具类代码.pdf 完整文档下载地址 https://download.csdn.net/download/a772304419/17468931 imp ...

  6. JAVA——文件操作工具类封装的简单实现

    问题描述 关于文件操作的简单工具类,包括文件夹创建,文件夹删除,文件创建,文件重命名,文件复制,文件删除.如果需要文件夹复制,其实就是创建文件夹和复制文件的操作. 解决方案 上下文 package c ...

  7. mysql util_关于mysql数据库操作工具类MySQLUtils用于连接数据提交sql脚本及结果转为JSONArray等操作...

    一.前言 关于实现mysql数据简单操作工具类MySQLUtils,用户密码连接数据库执行sql脚本ExecSQL.将查询结果转为com.alibaba.fastjson.JSONArray(fast ...

  8. Mysql和Oracle 数据库操作工具类

    适配Mysql和Oracle数据源 文章目录 1. 适配Mysql和Oracle数据源 2. 适配于Mysql数据源 3. 适配Oeacle数据源 1. 适配Mysql和Oracle数据源 packa ...

  9. java/javascript 时间操作工具类

    一.java 时间操作工具类 import org.springframework.util.StringUtils;import java.text.ParseException; import j ...

  10. Hbase 操作工具类

    依赖jar <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-clien ...

最新文章

  1. 设计模式之访问者模式、例子分析
  2. 程序员转正述职报告_程序员转正述职报告范文
  3. 铁路 12306 网站否认发生用户信息泄漏
  4. UICollectionView实现的图片的多选效果(本人已封装好,简单操作)
  5. afl-fuzz技术白皮书
  6. Facebook广告5大成功案例!
  7. Java环境变量配置(详细操作)
  8. xl2tpd服务一键安装
  9. 号称是世界最大的电子书图书馆ZLibrary
  10. JS 阻止浮层弹窗下滚动
  11. Java之阻塞和非阻塞以及同步和异步的区别
  12. postman导入postman_collection文件
  13. 光明勇士iOS服务器维护,裕际网络科技《光明勇士》3月11日 iOSamp;安卓部分区服数据互通公告 - 热门手游公告-TK游戏...
  14. C语言编辑时绝对值怎么输,互联网常识:c语言绝对值怎么打
  15. Could not initialize proxy - the owning Session was closed
  16. word中的神奇的“Alt + X”
  17. JVAV-基础②标识符与运算符
  18. speedoffice(Excel)如何设置纸张大小
  19. 亚马逊婴儿围栏CPC认证,ASTMF1004、ASTMF406、CPSIA测试标准办理
  20. 在排序中,如何不借助中间变量进行排序呢?()

热门文章

  1. 一个最简单的HTML页面(第一次学,记录一下)
  2. AdSec 中开裂梁截面刚度计算
  3. matplotlib部件(widgets)之套索(Lasso)
  4. 古老密码---凯撒密码
  5. 串口之CreateFile 函数详解
  6. 羽绒服穿出既动人又不冻人的美丽
  7. 采用WTL及LibXML2进行传真软件的开发
  8. 一般来说,GET产生一个TCP数据包;POST产生两个TCP数据包。
  9. Windows 7 网络质量测试
  10. 三菱fx5u CCD控制plc程序(含触摸屏程序)