在Java中解析具有固定格式的文本文件

时间:2010-04-26 10:33:10

标签: java string text text-parsing

假设我知道文本文件格式,

说,每行包含4个这样的字段:

firstword secondword thirdword fourthword
firstword2 secondword2 thirdword2 fourthword2
...

我需要将其完全读入内存

我可以使用这种方法:

open a text file
while not EOF
  read line by line
  split each line by a space
  create a new object with four fields extracted from each line
  add this object to a Set

好的,但有什么更好的,一个特殊的第三方Java库吗?

这样我们就可以事先定义每个文本行的结构,并用一些函数解析文件

thirdpartylib.setInputTextFileFormat("format.xml");
thirdpartylib.parse(Set, "pathToFile")

2 个答案:

答案 0 :(得分:1)

如果您明确知道分隔符将是什么,那么您建议的方法将快速可靠并且代码开销非常小。第三方库(谷歌“java文本文件库”的长篇名单)的优势在于它可能有一堆代码来处理作者关心的奇怪案例。缺点是,如果您正在处理简单可靠的文本文件格式,它可能会比您需要的代码更多。

自己这样做的好处是,您可以根据自己的要求调整代码,包括可伸缩性问题,如果您拥有大量数据,这些问题可能会成为一个考虑因素。通常第三方库会对文件进行完整的读取,如果你有几百万行,这可能是不实际的。

我的建议是花一个小时左右写自己的,看看你得到了什么。你可以用很少的努力来破解它。如果事实证明你有一个复杂的问题要解决数据格式的不同特殊问题,那么就开始寻找一个库。

答案 1 :(得分:1)

你可以这样做:

// Assuming a Reader called in and a Set called mySet

String line = in.readLine();
while(line != null)
{
  String[] splat = line.split(" ");
  mySet.add(new Widget(splat[0], splat[1], splat[2], splat[3]));
  line = in.readLine();
}

但你真的需要更好地定义'更好'的意思。上面的方法不会很好地处理'坏'输入,但它会很快(它实际上取决于Set的实现。如果你经常调整它,你可能会受到性能损失)。

使用XML并定义模式将允许您在解析之前验证输入,并且可能简化对象创建,但是您不能在每行上只有四个字符串(您需要XML标记等) 。有关示例第三方库,请参阅XMLBeans