Java 将txt文本文档转换为excel
1、废话不多说,直接上代码:
package com.exceltotxt.demo.util;import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** @author Arthur_Yang* @return* @description 文本写入excel* @date 2021-11-29**/public class POIUtils {private static final String XLS = "xls";private static final String XLSX = "xlsx";private static List<String> fileNameExtension = Arrays.asList(XLS, XLSX);/*** @param inFile 文件输入 : txt* @param outFile 文件输出位置 :(文件|目录)* @param splie 分割符 正则匹配,特殊字符需要转义* @param append 文件存在时的写入方式* @param columnName* @return* @description 文件转换* @author Arthur_Yang* @date 22021-11-29**/public static void txt2Excel(File inFile, File outFile, String splie, boolean append, String... columnName) {List<String> list = txt2List(inFile);ByteArrayOutputStream baos = new ByteArrayOutputStream();FileOutputStream fileOutputStream = null;String fileName = inFile.getName().substring(0, inFile.getName().indexOf("."));try {if (!outFile.exists()) {System.out.println("***************************文件路径错误****************************");throw new Exception();} else if (outFile.isDirectory()) {outFile.mkdirs();fileOutputStream = new FileOutputStream(outFile.getAbsolutePath() + "\\" + fileName + ".xlsx");} else {if (outFile.isFile()) {String tempFileNameExtension = outFile.getName().substring(outFile.getName().indexOf(".") + 1);if (fileNameExtension.stream().anyMatch(o -> o.equals(tempFileNameExtension))) {fileOutputStream = new FileOutputStream(outFile, append);}fileOutputStream = new FileOutputStream(outFile.getParent() + "\\" + fileName + ".xlsx");}}createExcel(fileName, splie, list, columnName).write(baos);fileOutputStream.flush();fileOutputStream.write(baos.toByteArray());} catch (Exception e) {e.printStackTrace();}}/*** @param inFile 文件输入 : txt* @param outFile 文件输出位置 :(文件|目录)* @param splie 分割符 正则匹配,特殊字符需要转义* @param columnName 列名* @return* @description 以默认方式写入* @author Arthur_Yang* @date 2021-11-29 11:04:51**/public static void txt2Excel(File inFile, File outFile, String splie, String... columnName) {List<String> list = txt2List(inFile);ByteArrayOutputStream baos = new ByteArrayOutputStream();FileOutputStream fileOutputStream = null;String fileName = inFile.getName().substring(0, inFile.getName().indexOf("."));try {if (!outFile.exists()) {System.out.println("***************************文件路径错误****************************");throw new Exception();} else if (outFile.isDirectory()) {outFile.mkdirs();fileOutputStream = new FileOutputStream(outFile.getAbsolutePath() + "\\" + fileName + ".xlsx");} else {if (outFile.isFile()) {//获取输出文件后缀String tempFileNameExtension = outFile.getName().substring(outFile.getName().indexOf(".") + 1);if (fileNameExtension.stream().anyMatch(o -> o.equals(tempFileNameExtension))) {fileOutputStream = new FileOutputStream(outFile, false);}fileOutputStream = new FileOutputStream(outFile.getParent() + "\\" + fileName + ".xlsx");}}createExcel(fileName, splie, list, columnName).write(baos);fileOutputStream.flush();fileOutputStream.write(baos.toByteArray());} catch (Exception e) {e.printStackTrace();}}/*** @param fileName 文件名* @param splie 分割符 正则匹配,特殊字符需要转义* @param list 文件转换后的List* @param columnName 列名* @return* @description* @author Arthur_Yang* @date 2021-11-29 11:04:46**/public static HSSFWorkbook createExcel(String fileName, String splie, List<String> list, String... columnName) {//1. 创建一个 Excel 文档HSSFWorkbook workbook = new HSSFWorkbook();//2. 创建文档摘要workbook.createInformationProperties();//3. 获取并配置文档信息DocumentSummaryInformation docInfo = workbook.getDocumentSummaryInformation();//文档类别docInfo.setCategory(fileName);//文档管理员docInfo.setManager("Arthur_Yang");//设置公司信息docInfo.setCompany("www.liruiong.org");//4. 获取文档摘要信息SummaryInformation summInfo = workbook.getSummaryInformation();//文档标题summInfo.setTitle(fileName);//文档作者summInfo.setAuthor("Arthur_Yang");// 文档备注summInfo.setComments("本文档由 Arthur_Yang 提供");//5. 创建样式//创建标题行的样式HSSFCellStyle headerStyle = workbook.createCellStyle();headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);HSSFCellStyle dateCellStyle = workbook.createCellStyle();dateCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));HSSFSheet sheet = workbook.createSheet(fileName);HSSFRow rx = null;//构造表格框架rx = sheet.createRow(0);for (int i = 0; i < columnName.length; i++) {//设置列的宽度sheet.setColumnWidth(i, 12 * 456);//创建标题行HSSFCell cx = rx.createCell(i);cx.setCellValue(columnName[i]);cx.setCellStyle(headerStyle);}// 填充数据for (int i = 0; i < list.size(); i++) {HSSFRow row = sheet.createRow(i + 1);String[] tempLine = list.get(i).toString().split(splie);for (int i1 = 0; i1 < tempLine.length; i1++) {row.createCell(i1).setCellValue(tempLine[i1]);}}return workbook;}/*** @param file* @param data 每行数据* @return* @description 写入excel数据* @author Arthur_Yang* @date 2021-11-29 10:04:40**/public static void excelWriter(File file, String... data) {//获取文件类型String fileType = file.getName().substring(file.getName().indexOf(".") + 1);try (POIFSFileSystem poifsFileSystem = new POIFSFileSystem(new FileInputStream(file))) {Workbook workbook = null;if (fileType.equalsIgnoreCase(XLS)) {workbook = new HSSFWorkbook(poifsFileSystem);} else if (fileType.equalsIgnoreCase(XLSX)) {workbook = new XSSFWorkbook(file);}Sheet sheetAt = workbook.getSheetAt(0);Row row = sheetAt.getRow(0);System.out.println("最后一行的行号为:" + sheetAt.getLastRowNum() + "--记录为:" + row.getLastCellNum());row = sheetAt.createRow(sheetAt.getLastRowNum() + 1);for (int i = 0; i < data.length; i++) {row.createCell(i).setCellValue(data[i]);}} catch (Exception e) {e.printStackTrace();}}/*** @param file* @return* @description 判断文件的Excel类型,输出Excel对象* @author Arthur_Yang* @date 2021-11-29 10:04:37**/public static Workbook getWorkbook(File file) {Workbook workbook = null;String fileType = file.getName().substring(file.getName().indexOf(".") + 1);try (FileInputStream fileInputStream = new FileInputStream(file)) {if (fileType.equalsIgnoreCase(XLS)) {workbook = new HSSFWorkbook(fileInputStream);} else if (fileType.equalsIgnoreCase(XLSX)) {workbook = new XSSFWorkbook(fileInputStream);}} catch (IOException e) {e.printStackTrace();}return workbook;}/*** @param file* @return* @description 文本文件 --》 内存List* @author Arthur_Yang* @date 2021-11-29 18:04:01**/public static List<String> txt2List(File file) {String string = null;List<String> txtListAll = new ArrayList<>();if (!file.exists() || file.isDirectory()) {System.out.println("***************************文件错误****************************");} else {fileToBufferedReader((bufferedReader) -> {String str = null;StringBuilder stringBuilder = new StringBuilder();while ((str = bufferedReader.readLine()) != null) {// TODO 此处可以书写去重逻辑。if (!txtListAll.contains(str)) {txtListAll.add(str);}}}, file);}if (txtListAll.size() > 65535) {System.out.println("***************************行数太多错误****************************");}return txtListAll;}/*** @param inputStreamPeocess* @param file* @return 环绕处理* @description* @author Arthur_Yang* @date 2021-11-29 16:04:57**/public static void fileToBufferedReader(InputStreamPeocess1 inputStreamPeocess, File file) {try (FileInputStream fileInputStream = new FileInputStream(file)) {try (InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream)) {try (BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {inputStreamPeocess.peocess(bufferedReader);}}} catch (IOException e) {e.printStackTrace();}}/*** @param fileParentPath 文件父路径* @param shilp 分割符* @return* @description 以父目录的形式进行转化,默认输出位置,列名,写入方式* @author Arthur_Yang* @date 2021-11-29 10:04:28**/public static void dir2Excel(String fileParentPath, String shilp) {File[] files = new File(fileParentPath).listFiles();Arrays.stream(files).forEach(f -> {txt2Excel(f, f, shilp, "");});}/*** @param fileParentPath 输入文件父路径* @param outParentPath 输出文件父路径* @param shilp 分割符* @return* @description 以指定输出父目录输出,列名默认* @author Arthur_Yang* @date 2021-11-29 10:04:41**/public static void dir2Excel(String fileParentPath, String outParentPath, String shilp) {File[] files = new File(fileParentPath).listFiles();Arrays.stream(files).forEach(f -> {txt2Excel(f, new File(outParentPath), shilp, "");});}/*** @param fileParentPath 输入文件父路径* @param outParentPath 输出文件父路径* @param shilp 分割符* @return* @description 以指定输出父目录输出,列名指定* @author Arthur_Yang* @date 2021-11-29 10:04:23**/public static void dir2Excel(String fileParentPath, String outParentPath, String shilp, String... columnName) {File[] files = new File(fileParentPath).listFiles();Arrays.stream(files).forEach(f -> {txt2Excel(f, new File(outParentPath), shilp, columnName);});}/*** @param filePath 文件路径* @param shilp 分割符* @return* @description 单文件转化,指定分割符,* @author Arthur_Yang* @date 2021-11-29 10:04:08**/public static void OneTxt2Excel(String filePath, String shilp) {File file = new File(filePath);txt2Excel(file, file, shilp, "");}/*** @param filePath* @param outFilePath* @param shilp* @param append* @return* @description 单文件转化,指定分割符,写入方式* @author Arthur_Yang* @date 2021-11-29 11:04:07**/public static void OneTxt2Excel(String filePath, String outFilePath, String shilp, boolean append) {File file = new File(filePath);File outFile = new File(outFilePath);txt2Excel(file, outFile, shilp, append, "");}public static void main(String[] args) {txt2Excel(new File("D:\\89852028062010A_20211128_68.txt"),new File("D:\\"), "\\|", "交易日期", "交易流水号", "交易商户号", "交易终端号", "交易类型", "交易条码", "支付交易金额", "优惠", "实际交易金额", "交易终端流水号", "银行商户流水号","支付类型", "支付卡包", "商户订单号", "订单号");}}package com.exceltotxt.demo.util;import java.io.BufferedReader;
import java.io.IOException;/*** @Description :* @Author: Arthur_Yang* @Date: 2021-11-29 16:39*/
@FunctionalInterface
public interface InputStreamPeocess1 {/*** @return com.liruilong.demotext.service.utils.InputStream* @Author Arthur_Yang* @Description 方法签名 BufferedReader ->String* @Date 15:47 2021-11-29* @Param [inputStream]**/void peocess(BufferedReader bufferedReader) throws IOException;
}
2、相关运行截图
3、如有雷同,望见谅!!!
Java 将txt文本文档转换为excel相关推荐
- 如何把文本文档转换成html格式,把固定格式的文本文档转换为Excel电子表格的方法...
有时候,需要把一些拥有固定格式的文本文件导入电子表格.微软的Excel 电子表格程序有一个文本文件转换向导,将这种格式转换变得非常快捷方便.本文图文讲解把固定格式的文本文档转换为Excel电子表格的方 ...
- 从TXT文本文档向Sql Server中批量导入数据
因为工作的需要,近期在做数据的分析和数据的迁移.在做数据迁移的时候需要将原有的数据导入到新建的数据库中.本来这个单纯的数据导入导出是没有什么问题的,但是客户原有的数据全部都是存在.dat文件中的.所以 ...
- PDF文件如何转换成txt文本文档
想要将PDF文件转换成txt文本文档,需要用到PDF转换器的帮助,比如奥凯丰 PDF转换大师将PDF文件格式转换一下. [PDF转换大师]转为word_excel_ppt_txt_jpg等格式-奥凯丰 ...
- 我的电脑中无法新建txt文本文档
我的电脑中无法新建txt文本文档 电脑中病毒或者是系统错误所致,可以通过如下方式进行解决: 1.按Win+R打开运行,输入regedit,回车打开注册表编辑器; 2.按Ctrl+F键,输入:.txt, ...
- 同时删除多个 Txt 文本文档的前几行
概要:在网上下载 txt 格式的文本文件是我们经常会需要碰到的一种需求,不管是下载小说还是一些其他的学习资料,可能下载下来的文件就是txt格式的.这些下载下来的 txt 文件前面几行可能会有一些内容是 ...
- 同时删除多个 Txt 文本文档的最后几行
概要:在平常的工作当中,我们对文本文件的使用是非常普遍的,文本文件的类型多种多项,有 txt 扩展名的.有 xml 扩展名的,甚至还有些文本文件是没有任何扩展名的.有时候可能我们会在网上下载一些文本文 ...
- txt文本文档加密方法总结
txt文本想要加密只能借助外部功能,因为txt文本文档没有自带加密功能.所以今天给大家总结加密方法. RAR加密 通过将txt文本文档压缩成rar格式的压缩包,在压缩过程中添加密码,这样就是对压缩包进 ...
- MATLAB提取txt文本文档中特定关键字后的数字信息
文本文档的信息多是按照行的格式读写的,因此在读取时对提取到每行的文本信息进行关键字的对比找到指定行,然后利用正则表达式提取相应的信息即可. 文本信息示例 positions bitstream siz ...
- Unity学习篇之txt文本文档的多种读写方式
在Unity开发中,有时候需要将参数写在外部文档中方便动态读取和修改,文档可以是txt.xml.json,这篇文章介绍一下txt文档的几种读取和写入方法. 1.读取txt文档 首先在Unity中新建一 ...
最新文章
- IntelliJ IDEA 快捷键终极大全,速度收藏!
- log4j, common-logging, slf4j 关系
- 【童心制物】一篇很硬的标新立异级别的体验测评——聊新版造物编程盒
- html中的input是一个块级元素,input属于什么元素,input是行内块元素吗
- 一线大厂Java开发所需掌握的技能要点汇总
- 153是一个非常特殊的数,它等于它的每位数字的立方和
- cpucores_CPUCores怎么用 CPUCores使用方法指南_3DM单机
- 英特尔AI如何帮助修缮残垣断壁的长城,背后的奥秘找到了
- SQL语法用like %或in时Parameters要怎么用才能避免SQL Injection的问题
- BT5 autoscan genlist ADMsnmp snmpcheck使用
- android面板驱动的使用方法,高通平台Android 驱动层LCD显示屏驱动移植说明和相关工具...
- 2015年9月 javaweb餐厅系统
- 14072202(带IK的Recoil)
- 8年测开经验面试28K公司后,吐血整理出1000道高频面试题和答案
- Python轻量级ORM框架——peewee
- 无法启动计算机的杀毒软件,电脑中毒杀毒软件无法启动任务管理器也被禁用怎么办?...
- green power 设备入网过程
- DSCP(Differentiated Service Codepoint,差分服务代码点)
- 2016计算机论文参考文献,2016大学毕业设计计算机软件论文摘要和结论参考文献俱全.doc...
- java 面试知识点总结
热门文章
- MyHDL中文手册(十)——转换成Verilog和VHDL
- SQL语句注入的全过程
- 统计学、深度学习、机器学习、数据挖掘
- SSL证书配置(https访问接口, 单向认证和双向认证)
- AT24C02驱动程序,【I2C串行总线】的组成及工作原理
- LruCache源码的理解
- 【Python自动化测试14】Python自动化测试基础与进阶练习题
- linux shell logout,.bash_pfofile、.bash_logout和.bashrc区别
- 【渗透测试】锐捷网络-EWEB网管系统易网关批量GetShell
- 【渝粤教育】国家开放大学2019年春季 1292企业集团财务管理 参考试题