解析Txt文件的过程
项目需要解析用逗号(,)分隔的文本文件,然后将其中的数据转换成xml文件进行导入到财务系统中....
考虑到以后可能文件格式会变化,因此使用了动态的创建方法,即通过格式文件来动态解析txt文件..本程序使用了apache的Digester来动态生成格式文件,使用CGLib动态生成目标类.步骤如下:
1、定义文件和字段的元数据格式,如果出现其他的文件格式只需要实现元数据接口即可..接口代码:
java 代码
- public interface FileMeta {
- public String getName();
- public List<fieldmeta></fieldmeta> getFieldMeta();
- }
- public interface FieldMeta {
- public String getName();
- public String getType();
- public int getLength();
- public int getScale();
- public String getComment();
- public boolean isAllowNull();
- }
通过两个接口描述文件的属性已经字段格式..
本例使用的是逗号分隔,如果出现其他分隔符怎么办?为此,定义了一个分隔符接口:LineSpliter
java 代码
- public interface LineSpliter {
- public String getSpliterRegx();
- public String[] split(String lineData);
- }
getSpliterRegx()同于返回当前的分隔符,split()用户处理各行文本数据.
此处缺省实现了此接口,用于逗号分隔DefaultLineSpliter,定义如下:
java 代码
- public class DefaultLineSpliter implements {
- public String defaultSpliterRegx = ",";
- public String getSpliterRegx() {
- return defaultSpliterRegx ;
- }
- public String[] split(String lineData) {
- return StringUtils.splitPreserveAllTokens(lineData,defaultSpliterRegx );
- }
- }
这里使用apache的Lang包进行处理,没有使用JDK的String的split方法,因为jdk的实现会将末尾空的字段过滤掉,造成数据减少...
比如:如果行数据为aaa,bbb,,,,, 通过jdk的实现会返回aaa和bbb,而通过Lang包处理会返回包括后面空的字段.
2、接下来使用DigesterDigester包根据xml规则生成对象..
首先需要了解digester包的使用方法,这里简单的说一下:disgeter可以根据一定的规则将xml文件解析成一组对象...具体这里,我先定义
一个规则文件,
xml 代码
- <digester-rules>
- <pattern value='XXXFileMeta'>
- <object-create-rule classname="com.xxx.file.DefaultFileMeta"/>
- <set-properties-rule/>
- <pattern value="field">
- <object-create-rule classname="com.xxx.file.DefaultFieldMeta"/>
- <set-properties-rule/>
- <bean-property-setter-rule pattern="beanname1"/>
- <bean-property-setter-rule pattern="beanname2"/>
- <bean-property-setter-rule pattern="beanname3"/>
- <bean-property-setter-rule pattern="beanname4"/>
- <!---->pattern>
- <!---->digester-rules>
这就是一个简单的规则定义,具体含义这里不详细讲了,想了解的可以给我回帖...
接着定义缺省的文件元数据文件,格式如下:
xml 代码
- <DefaultFileMeta name="com.xxx.file.DefaultFileMeta">
- <field>
- <beanname1>Codebeanname1>
- <beanname2>Namebeanname2>
- <beanname3>Datebeanname3>
- <beanname4>Remakebeanname4>
- field>
- DefaultFileMeta>
最后实例化digester对象,加载规则文件,解析文件元数据文件,则会动态生成根据元数据文件解析的格式定义.
代码如下:GeneratorObject.createObject(){}
初始化CGLib
java 代码
- @SuppressWarnings("unchecked")
- private void init(Class target, FileMeta fileMeta) {
- List<fieldmeta></fieldmeta> fields = fileMeta.getFieldMeta();
- String[] getters = new String[fields.size()];
- String[] setters = new String[fields.size()];
- Class[] types = new Class[fields.size()];
- try {
- for (int i=0; i < fields.size(); i++) {
- FieldMeta fieldMeta = fields.get(i);
- getters[i] = "get" + ConverterUtils.upperCaseFirstChar(fieldMeta.getName());
- setters[i] = "set" + ConverterUtils.upperCaseFirstChar(fieldMeta.getName());
- types[i] = Class.forName(fieldMeta.getType());
- }
- } catch(ClassNotFoundException e) {
- logger.error("类没有找到.." + e.getMessage());
- }
- this.bulkBean = BulkBean.create(target, getters, setters, types);
- }
根据指定的目标类动态生成对象
java 代码
- @SuppressWarnings("unchecked")
- private Object createObject(Class target, FileMeta fileMeta, Object[] values) {
- Object targetObject = null;
- try {
- targetObject = target.newInstance();
- } catch (Exception e){
- logger.error("创建对象出错,目标类-->" + target.getName(), e);
- }
- bulkBean.setPropertyValues(targetObject, values);
- return targetObject;
- }
解析文本文件
java 代码
- @SuppressWarnings("unchecked")
- public List createObjects() {
-
- init(targetClass, fileMeta);
- List result = new ArrayList();
- LineIterator iterator = null;
- try {
- iterator = FileUtils.lineIterator(this.dataFile, DEF_ENCODING);
- while(iterator.hasNext()) {
- String line = iterator.nextLine();
-
- if (StringUtils.isBlank(line)) {
- continue;
- }
- Object[] values = this.parseLine(line, fileMeta);
- Object object = createObject(this.targetClass, fileMeta, values);
- result.add(object);
- }
- } catch (IOException e) {
- logger.error("读取文件名出错!-->" + this.dataFile.getName(), e);
- } finally {
- LineIterator.closeQuietly(iterator);
- }
- return result;
- }
最终返回解析好的文本文件对象列表..
本例综合使用了apache的代码包,灵活实现了文本文件的解析...
分享到:
相关推荐
总结一下,Java解析TXT文件到MySQL数据库的过程主要包括:1)解压ZIP文件;2)读取并解析TXT文件;3)创建或连接到MySQL数据库;4)构建并执行SQL插入语句。这个过程可以扩展到处理任意数量的TXT文件,只需适当调整...
在C#编程中,读取和解析TXT文件是一项常见的任务,尤其在处理大量文本数据时。本示例将深入探讨如何使用C#有效地读取单个或多个TXT文件,并进行内容解析与筛选。 首先,我们可以使用`System.IO`命名空间中的`...
本话题聚焦于"解析txt类型的试题文档",这是一个使用Java编写的程序,它的主要功能是解析txt格式的试题文档,并将这些数据转换成XML文档。让我们深入探讨这个过程涉及的技术点。 首先,txt文件是一种常见的纯文本...
本资源"**C语言txt文件解析.zip**"提供了一种使用C语言读写TXT文件的方法,特别关注如何处理字符串拆分,以及根据行列号选取特定内容。下面将详细介绍这个主题及其相关知识点。 首先,`readTXT.cpp`是C++源代码文件...
在实现PB实时读取txt文件的过程中,开发者可能会使用到的关键技术包括文件系统监视(如Windows的FindFirstChangeNotification函数)、异步I/O操作,以及PowerBuilder的事件驱动编程模型。通过监听文件系统的变更事件...
在本例中,我们的目标是筛选TXT文件中的单词,因此解析过程主要涉及识别和分离字符串中的单词。 步骤1:读取TXT文件 使用编程语言(如Python)的内置函数可以轻松读取TXT文件。例如,在Python中,可以使用`open()`...
本话题主要关注如何从TXT文件中提取内容,对其进行解析,并将这些数据存储到SQLite数据库中。SQLite是一个轻量级、自包含的数据库引擎,适用于嵌入式应用或者作为桌面系统的本地数据库解决方案。以下是关于这个过程...
Java解析FTP服务器文本文件 Java解析FTP服务器文本文件是指使用Java语言连接FTP服务器,上传、下载、递归目录遍历等基本操作的集合。在这个过程中,我们需要引入相关的jar包,例如cpdetector.jar、jchardet-1.0.jar...
3. **"JavaApk源码说明.txt"**:这个文件可能包含了关于示例项目源码的详细说明,包括关键类和方法的作用,以及如何将这些代码整合到自己的项目中的指导。阅读这份文档可以帮助开发者更快地理解和复用提供的代码。 ...
"oui.txt 网卡查询 txt文件解析"这个主题就聚焦于如何处理和解析这种特定类型的文本文件,以便获取关于网络接口控制器(NICs)的制造商信息。OUI,全称为Organizationally Unique Identifier,是由IEEE分配给各制造...
4. 将解析出的文本信息格式化为TXT文件所需的样式。 5. 创建一个TXT文件,将格式化的信息写入其中。 6. 最后,关闭文件并完成转换。 标签中的“txt”表明了转换的目标格式,TXT文件由于其简单性和通用性,广泛应用...
在这个项目“CTest”中,可能的实现是创建一个程序,它打开一个txt文件,逐行读取内容,然后对每一行进行字符串划分,可能是为了提取特定信息或者进行数据分析。例如,如果txt文件包含CSV格式的数据,程序可能会将每...
1. 解析TXT:读取TXT文件,识别出各部分的二进制数据表示,如宽度、高度、颜色深度等。 2. 构建文件头:根据解析的数据,构建对应的文件头和信息头。 3. 重组像素数据:按照BMP文件格式的规则,重新组织像素数据。...
这样,我们就完成了从二进制STL文件提取数据并生成TXT文件的过程。需要注意的是,实际的STL文件可能存在字节序问题,因为STL文件格式不规定字节序。如果在不同平台上遇到问题,可能需要进行字节序的转换,例如使用`...
标题中的"python json文件转txt文件,批处理json文件转换成一个txt文件",指的是使用Python编写脚本来读取多个JSON文件,解析其内容,并将数据写入到TXT文件中。这通常涉及到以下步骤: 1. **导入必要的库**:首先...
本文将详细介绍如何使用“PDB文件转TXT文件工具”将PDB内容转换为TXT文档,以便于阅读和分析。 首先,让我们了解这个工具的核心功能。"PDB-TXT.exe"是一个执行程序,它的设计目的就是将PDB文件中的信息抽取出来,并...
"bin文件转txt文件工具"就是这样一个实用程序,它专为将二进制(bin)文件转换成文本(txt)文件而设计。这个工具由Visual Studio 2010开发,能够处理任意大小的bin文件,使得数据的解析和读取变得更加容易。 首先...
2. **数据解析**:数据解析是将文件内容转换为可操作结构的过程。这可能涉及到XML、JSON、CSV等数据格式的解析。例如,对于XML,可以使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`进行...
1. **打开txt文档**:首先,创建一个ifstream对象并使用open()函数打开txt文件。你需要提供文件的路径作为参数。例如: ```cpp #include std::ifstream inputFile("path_to_your_file.txt"); ``` 如果文件成功...
综合以上信息,我们可以理解这个工具的工作原理:它读取HEX文件,解析其中的十六进制数据,然后按照用户选择的大小(1byte、2byte或4byte)将其转换为对应的数值,并逐行写入TXT文件。这个过程对于那些需要处理或...