java-当直到运行时才知道记录布局时,使用哪种方法来解析具有固定长度记录的文件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-当直到运行时才知道记录布局时,使用哪种方法来解析具有固定长度记录的文件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2806字,纯文字阅读大概需要5分钟。
内容图文
![java-当直到运行时才知道记录布局时,使用哪种方法来解析具有固定长度记录的文件?](/upload/InfoBanner/zyjiaocheng/654/8afd131509454df7b281d8c78f2041f8.jpg)
我想基于另一个文件中提供的记录布局来解析文件.
基本上会有一个定义文件,它是一个用逗号分隔的字段及其各自长度的列表.其中会有很多,每次我运行程序时都会加载一个新的.
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<String,String> personMap = dynamicParser.parse(line);
}
infoScanner.close();
然后,唯一的其他代码就是确保解析器以正确的顺序进行解析.
public class Parser {
private ArrayList<ParsingStep> steps;
public Parser() {
steps = new ArrayList<ParsingStep>();
}
public void addStep(ParsingStep step) {
steps.add(step);
}
public Map<String,String> parse(String line) {
String remainingLine = line;
for (ParsingStep step : steps) {
remainingLine = step.parse(remainingLine);
}
return map; // Somehow convert to map.
}
}
就个人而言,我将在解析步骤中添加一些错误检查,以防infoToParse文件格式不正确.
希望这可以帮助.
内容总结
以上是互联网集市为您收集整理的java-当直到运行时才知道记录布局时,使用哪种方法来解析具有固定长度记录的文件?全部内容,希望文章能够帮你解决java-当直到运行时才知道记录布局时,使用哪种方法来解析具有固定长度记录的文件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。