2012-01-31 68 views
4
列表

有人可以幫我在一個文本文件到列表中讀取數據的有選擇性的列..從文本文件中讀取選擇性的列數據轉換成Java中

例如:如果文本文件數據如下

------------- 
id name age 
01 ron 21 
02 harry 12 
03 tom 23 
04 jerry 25 
------------- 

從上面的數據,如果我需要收集列「名稱」使用Java中的列表,並打印..

+0

新行上的數據或全部在同一行上? – 2012-01-31 17:29:22

+0

我需要只有數據屬於「名稱」類別 – 2012-01-31 18:32:03

回答

0

由製表符分隔的列?

查看Java CSV,這是一個用於閱讀逗號分隔或製表符分隔的文本文件的開源庫。應該完成大部分工作。我從來沒有用過它,但我認爲你可以從列1(或類似的)請求所有的值。

或者,您可以使用BufferedReader(其中有readLine())方法一次讀取一行文件,然後撥打String.split()並獲取所需的部分。

1

java.util.Scanner可用於讀取文件,丟棄不需要的列。 可以在處理文件時打印想要的列值,或者將它們打印到java.util.ArrayList並在處理完成後打印它們。

一個小例子有限的錯誤檢查:

Scanner s = new Scanner(new File("input.txt")); 
List<String> names = new ArrayList<String>(); 

// Skip column headings. 

// Read each line, ensuring correct format. 
while (s.hasNext()) 
{ 
    s.nextInt();   // read and skip 'id' 
    names.add(s.next()); // read and store 'name' 
    s.nextInt();   // read and skip 'age' 
} 

for (String name: names) 
{ 
    System.out.println(name); 
} 
+0

感謝,短,看起來很簡單,但我們怎麼能用這個數據龐大的人羣,即太多列,nd我需要2或更多?也看到代碼wth拆分(「\ t」)使用,, wat是它的目的在這種編碼? – 2012-01-31 18:17:23

+0

根據列數修改while循環。 while循環的每次迭代表示一行的處理。當從文件中讀取整行時,'split()'將用於'String'實例,這在'Scanner'分裂時是不需要的。 – hmjd 2012-01-31 18:25:45

3

使用文件閱讀器和逐行讀它,在空間破裂,任何你想要的列添加到列表中。使用一個BufferedReader通過像這樣搶行:

BufferedReader br = new BufferedReader(new FileReader("C:\\readFile.txt")); 

然後,你可以做搶行:

String line = br.readLine(); 

最後,你可以將字符串通過列通過這樣分成數組:

String[] columns = line.split(" "); 

然後你就可以訪問列,並將它們添加到列表取決於如果你想列0,1,或者2

+0

謝謝,我給了這個嘗試,但我只需要有屬於「名稱」類別的數據,我沒有任何想法超越該 – 2012-01-31 18:33:33

+0

如果您只需要名稱下做'List.add (columns1 [1])',所有這些都需要在while循環中進行說明。如果br.readLine()已經到達文件末尾,它將返回null,所以你可以這樣做:'while((line = br.readLine())!= null)'。這將繼續閱讀文件的每一行,然後只需將該條目添加到您希望列表的任何列中,就像我上面顯示的那樣。 – 2012-01-31 19:53:06