java解析定长文件入库_java-当直到运行时才知道记录布局时,使用哪种方法来解析具有固定长度记录的文件?...-程序员宅基地

技术标签: java解析定长文件入库  

我想基于另一个文件中提供的记录布局来解析文件.

基本上会有一个定义文件,它是一个用逗号分隔的字段及其各自长度的列表.其中会有很多,每次我运行程序时都会加载一个新的.

firstName,text,20

middleInitial,text,1

lastName,text,20

salary,number,10

然后,我将显示一个带有提供的列标题的空白表,以及一个通过单击按钮或其他方式添加数据的选项-我尚未决定.

我还希望有一个选项,既可以从文件加载数据,也可以将数据保存到文件,文件匹配定义文件中描述的格式.

例如,要为上述定义文件加载的文件(或由保存功能生成的文件)可能看起来像这样.

Adam DSmith 50000

Brent GWilliams 45000

Harry TThompson 47500

什么样的模式在这里可能有用,谁能给我一些粗略的指导,以指导如何构建内部存储和建模数据的方式.

我想我可以找到有关Java文档的方法,但是,如果有人可以将我指向某个地方开始寻找,将不胜感激!

谢谢

解决方法:

因此,在我看来,您有一个howToParse文件和infoToParse文件,分别说明了如何解析信息以及在这些文件中解析信息的方向.

首先,我将阅读howToParse文件并创建某种动态Parser对象.看起来此文件中的每一行都是一个不同的ParsingStep对象.然后,您只需要读取将存储为String对象的行,并将ParsingStep分为3部分即可:字段名称,数据类型,数据长度.

// Create new parser to hold parsing steps.

Parser dynamicParser = new Parser();

// Create new scanner to read through parse file.

Scanner parseFileScanner = new Scanner(howToParseFileName);

// *** Add exception handling as necessary *** this is just an example

// Read till end of file.

while (parseFileScanner.hasNext()) {

String line = parseFileScanner.nextLine(); // Get next line in file.

String[] lineSplit = line.split(","); // Split on comma

String fieldName = lineSplit[0];

String dataType = lineSplit[1];

String dataLength = lineSplit[2]; // Convert to Integer with Integer.parseInt();

ParsingStep step = new ParsingStep(fieldName, dataType, dataLength);

dynamicParser.addStep(step);

}

parseFileScanner.close();

然后,您将具有如何解析一行的信息,然后只需解析另一个文件并将该文件中的信息存储在数组中即可.

// Open infoToParse file and start reading.

Scanner infoScanner = new Scanner(infoToParseFileName);

// Add exception handling.

while (infoScanner.hasNext()) {

String line = infoScanner.nextLine();

// Parse line and return a Person object or maybe just a Map of field names to values

Map personMap = dynamicParser.parse(line);

}

infoScanner.close();

然后,唯一的其他代码就是确保解析器以正确的顺序进行解析.

public class Parser {

private ArrayList steps;

public Parser() {

steps = new ArrayList();

}

public void addStep(ParsingStep step) {

steps.add(step);

}

public Map parse(String line) {

String remainingLine = line;

for (ParsingStep step : steps) {

remainingLine = step.parse(remainingLine);

}

return map; // Somehow convert to map.

}

}

就个人而言,我将在解析步骤中添加一些错误检查,以防infoToParse文件格式不正确.

希望这可以帮助.

标签:data-structures,file-io,java,parsing

来源: https://codeday.me/bug/20191208/2089049.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_35381077/article/details/114758348

智能推荐

微信小程序入门教程 --(保姆级)-程序员宅基地

文章浏览阅读6.7k次,点赞24次,收藏92次。小程序入门保姆级教程_微信小程序入门

计算机毕设 深度学习猫狗分类 - python opencv cnn_毕业设计可以用猫狗大战吗-程序员宅基地

文章浏览阅读559次。 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是 **基于深度学习猫狗分类 **学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:3分创新点:3分。_毕业设计可以用猫狗大战吗

手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)_eclipse安装教程-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏16次。写这篇文章的由来是因为后边要用这个工具,但是由于某些原因有部分小伙伴和童鞋们可能不会安装此工具,为了方便小伙伴们和童鞋们的后续学习和不打击他们的积极性,因为80%的人都是死在工具的安装这第一道门槛上,这门槛说高也不高说低也不是太低。所以就抽时间水了这一篇文章。_eclipse安装教程

分享11个web前端开发实战项目案例+源码_前端项目实战案例-程序员宅基地

文章浏览阅读4.1w次,点赞12次,收藏193次。小编为大家收集了11个web前端开发,大企业实战项目案例+5W行源码!拿走玩去吧!1)小米官网项目描述:首先选择小米官网为第一个实战案例,是因为刚开始入门,有个参考点,另外站点比较偏向目前的卡片式设计,实现常见效果。目的为学者练习编写小米官网,熟悉div+css布局。学习资料的话可以加下web前端开发学习裙:600加上610再加上151自己去群里下载下。项目技术:HTML+CSS+Div布局2)迅雷官网项目描述:此站点特效较多,所以通过练习编写次站点,学生可以更多练习CSS3的新特性过渡与动画的实_前端项目实战案例

计算质数-埃里克森筛法(间隔黄金武器)-程序员宅基地

文章浏览阅读73次。素数,不同的质数,各种各样的问题总是遇到的素数。以下我们来说一下求素数的一种比較有效的算法。就是筛法。由于这个要求得1-n区间的素数仅仅须要O(nloglogn)的时间复杂度。以下来说一下它的思路。思路:如今又1-n的数字。素数嘛就是除了1和本身之外没有其它的约数。所以有约数的都不是素数。我们从2開始往后遍历,是2的倍数的都不是素数。所以我们把他们划掉然后如...

探索Keras DCGAN:深度学习中的创新图像生成-程序员宅基地

文章浏览阅读532次,点赞9次,收藏14次。探索Keras DCGAN:深度学习中的创新图像生成项目地址:https://gitcode.com/jacobgil/keras-dcgan在数据驱动的时代,图像生成模型已经成为人工智能的一个重要领域。其中,Keras DCGAN 是一个基于 Keras 的实现,用于构建和训练 Deep Convolutional Generative Adversarial Networks(深度卷积生...

随便推点

WebSphere MQ6.0 for redhat4.6 setup_websphere mq6.0下载-程序员宅基地

文章浏览阅读956次。WebSphere MQ6.0 for redhat4.6 setup分类: WebSphere 2010-04-12 14:45650人阅读 评论(0)收藏举报websphereredhatmanageribm消息中间件statisticsWebsphere MQ是IBM的商业消息中间件(Commercial Messaging Middlewar_websphere mq6.0下载

Spring——Bean 的生命周期_spring bean的生命周期-程序员宅基地

文章浏览阅读1.1w次,点赞11次,收藏49次。目录一、Bean 的生命周期二、代码演示三、主要步骤简述一、Bean 的生命周期  对于普通的 Java 对象,new 的时候会去创建对象,而当它没有任何引用的时候则被垃圾回收机制回收。相较于前者,由Spring IoC 容器托管的对象,它们的生命周期完全由容器控制。Spring 中每个 Bean 的生命周期如下:对于 ApplicationContext 容器,当容器启动结束后,实例化所有的 Bean。设置对象属性,即依赖注入,动态将依赖关系注入到对象中。紧接着,Spring 会检测该对象_spring bean的生命周期

matlab_matlab fat-程序员宅基地

文章浏览阅读94次。为什么logical==0?_matlab fat

HTML标签分类及转义字符_ol是单标记还是双标记-程序员宅基地

文章浏览阅读302次。一. HTML标签分类1.根据标签个数分类。 单标签:只有一个标签。 <br>, <hr>,<img>,<meta>, 实现一个特定的功能。 双标签:既有开始标签,也有结束标签。 Html,head,Body,title,h1~h6,p,a,ul,li,ol,strong,em。2.根据标签特性分类(网页效果)。 2.1行属性..._ol是单标记还是双标记

什么是配置_基于配置是什么意思-程序员宅基地

文章浏览阅读1.6k次。应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数 据库连接参数、启动参数等。配置主要有以下几个特点:配置是独立于程序的只读变量配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置配置伴随应用的整个生命周期配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。比如:启动时需要读取服务的端口号、系统在运行过程中需要读取定时策略执行定时任务等。配置可以有多种加载方式常见的有程序内部_基于配置是什么意思

二、使用GObject——一个简单类的实现-程序员宅基地

文章浏览阅读170次。Glib库实现了一个非常重要的基础类--GObject,这个类中封装了许多我们在定义和实现类时经常用到的机制: 引用计数式的内存管理 对象的构造与析构 通用的属性(Property)机制 Signal的简单使用方式 很多使用GObject..._