2012-11-09 36 views
4

我有五個字段一個簡​​單的.csv文件:firstName(串),lastName(串),age(INT),gender(焦炭),和priority(INT )。我需要將這個文件讀入我已經設置好的鏈表中。閱讀.csv文件並存儲到鏈表中的Java

我的問題是這樣的:最簡單的方法是什麼?我沒有發佈具體信息,因爲我只是尋找一般(但簡單)的想法;我想弄清楚自己。我們還沒有比FileReader/FileWriter更先進的文件I/O。我能想到的唯一方法就是使用Scanner來導入每一行,然後使用String.split()將所有內容分解成一個數組,然後通過數組並手動將所有內容/轉換爲正確的格式(因爲它們會全部是字符串),然後一次將所有內容插入到鏈表中。然而,這看起來像是一種令人難以置信的迂迴方式。

有沒有更簡單的方法,我可以做到這一點?

+4

你的方法非常好。我會盡力去做。 – amit

+0

結果列表中元素的類型是什麼? – Natix

+0

如果這是家庭作業,那麼我會說你有正確的想法。如果這是一個項目,我會建議[opencsv](http://opencsv.sourceforge.net/)。順便說一句,如果它*是作業,你應該這樣標記它。 –

回答

2

不幸的是,您已經發現最簡單的解決方案。

一般來說,通用數據讀取在Java中非常不舒服,因爲它是靜態類型的。 CSV,XML和其他數據序列化方法的一部分就是它們根據所定義數據的結構自行記錄。在Java的情況下,這樣做效果不好,因爲結構要麼是預定義的(通過類),要麼讀入一個如此通用的結構中,幾乎沒有用處(例如列表或鍵 - >值映射,一個字符串)。

這不是一個Java討厭的咆哮,我只是指出,使這個特定的工作容易和直觀從根本上與Java的核心語言功能不兼容。在像Python這樣的動態類型語言中,這樣的事情要簡單得多(特別是在Python中,由於核心csv模塊的存在幾乎是微不足道的),因爲您可以將任何類型的數據放入對象中,並且它將適應擬合。 Java必須事先知道將要發生的事情,這會導致你發現的冗長冗長。

+0

好吧,根據您的評論和其他評論來看,這是最簡單的方法。那麼我會堅持下去。謝謝! – vaindil

1

來自Spring Framework的StringUtils具有一些功能。 但我會說它並沒有真正的區別,並引入了不必要的依賴。

堅持你的想法。

5

有一個更有效的解決方案,而無需重新發明輪子: 添加這個庫opencsv 如果你使用Maven的時候,你可以把這個代碼在你的POM文件 net.sf.opencsv opencsv 2.3

和庫文件中解釋得非常好如何使用它documentacion

ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy(); 
strat.setType(YourOrderBean.class); 
String[] columns = new String[] {"name", "orderNumber", "id"}; // the fields to bind do in your JavaBean 
strat.setColumnMapping(columns); 

CsvToBean csv = new CsvToBean(); 
List list = csv.parse(strat, yourReader); 

我希望這可以幫助您。