2010-04-26 77 views
0

想我知道一个文本文件格式,解析的文本文件在Java中的固定格式

说,每行包含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 

好,但有更好的东西,一个特殊的3第三方Java库?

,使我们可以预先定义每个文本行的结构,并与一些功能

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

解析文件?

+0

我完全同意Catchwa,你的意思是说更好?你的算法非常清晰,易于阅读/维护。你更期待什么?可扩展性?速度?磁盘访问次数? – 2010-04-26 11:38:28

回答

1

如果你确切地知道分隔符是什么,那么你的建议aproach将是快速和可靠的,并且具有很少的代码开销。与第三方库(一个长列表谷歌“Java文本文件库”)的好处是,它可能有一堆代码来处理作者关心的奇怪情况。缺点是,如果你有一个简单可靠的文本文件格式,你可能需要更多的代码。

您自己做这件事的好处是您可以调整代码以准确满足您的要求,包括可扩展性问题,如果您有大量数据,这可能是一个考虑因素。很多时候,第三方库会对文件进行完整的读取,如果您拥有数百万行,这可能不太实际。

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

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