2010-04-26 50 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