2012-01-31 59 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