TxtFileUtil-文本文件操作工具类
在写工具类或进行文本分析时, 对小文本文件的读写是一种很常见的操作. 对于小文件文件, 一次性读取到内存, 然后再做分析处理, 比边读边处理更快. 因此笔者封装了一个工具类, 专门用于读写小文本文件.
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-文本文件操作工具类相关推荐
- 字符串工具类、数组工具类、集合工具类、转型操作工具类、编码与解码操作工具类...
package hjp.smart4j.framework.util;import org.apache.commons.lang3.StringUtils;/*** 字符串工具类*/ public ...
- XML文档操作工具类
1 /// <summary> 2 /// XML文档操作工具类 3 /// </summary> 4 public class XmlUtil 5 { 6 #region X ...
- Code片段 : .properties属性文件操作工具类 JSON工具类
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "贵专" - 泥瓦匠 一.java.util.Properties API ...
- 文件操作工具类FileUtil
分享一个文件处理的工具类,依赖如下: <dependency><groupId>org.apache.ant</groupId><artifactId> ...
- geotools读取shp文件及shp文件操作工具类代码
geotools读取shp文件及shp文件操作工具类代码.pdf 完整文档下载地址 https://download.csdn.net/download/a772304419/17468931 imp ...
- JAVA——文件操作工具类封装的简单实现
问题描述 关于文件操作的简单工具类,包括文件夹创建,文件夹删除,文件创建,文件重命名,文件复制,文件删除.如果需要文件夹复制,其实就是创建文件夹和复制文件的操作. 解决方案 上下文 package c ...
- mysql util_关于mysql数据库操作工具类MySQLUtils用于连接数据提交sql脚本及结果转为JSONArray等操作...
一.前言 关于实现mysql数据简单操作工具类MySQLUtils,用户密码连接数据库执行sql脚本ExecSQL.将查询结果转为com.alibaba.fastjson.JSONArray(fast ...
- Mysql和Oracle 数据库操作工具类
适配Mysql和Oracle数据源 文章目录 1. 适配Mysql和Oracle数据源 2. 适配于Mysql数据源 3. 适配Oeacle数据源 1. 适配Mysql和Oracle数据源 packa ...
- java/javascript 时间操作工具类
一.java 时间操作工具类 import org.springframework.util.StringUtils;import java.text.ParseException; import j ...
- Hbase 操作工具类
依赖jar <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-clien ...
最新文章
- 设计模式之访问者模式、例子分析
- 程序员转正述职报告_程序员转正述职报告范文
- 铁路 12306 网站否认发生用户信息泄漏
- UICollectionView实现的图片的多选效果(本人已封装好,简单操作)
- afl-fuzz技术白皮书
- Facebook广告5大成功案例!
- Java环境变量配置(详细操作)
- xl2tpd服务一键安装
- 号称是世界最大的电子书图书馆ZLibrary
- JS 阻止浮层弹窗下滚动
- Java之阻塞和非阻塞以及同步和异步的区别
- postman导入postman_collection文件
- 光明勇士iOS服务器维护,裕际网络科技《光明勇士》3月11日 iOSamp;安卓部分区服数据互通公告 - 热门手游公告-TK游戏...
- C语言编辑时绝对值怎么输,互联网常识:c语言绝对值怎么打
- Could not initialize proxy - the owning Session was closed
- word中的神奇的“Alt + X”
- JVAV-基础②标识符与运算符
- speedoffice(Excel)如何设置纸张大小
- 亚马逊婴儿围栏CPC认证,ASTMF1004、ASTMF406、CPSIA测试标准办理
- 在排序中,如何不借助中间变量进行排序呢?()