【问题标题】:Reading selective column data from a text file into a list in Java将文本文件中的选择性列数据读取到Java中的列表中
【发布时间】:2012-01-31 17:26:13
【问题描述】:

谁能帮我将文本文件中的选择性数据列读入列表..

例如:如果文本文件数据如下

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

如果我需要在 java 中使用 list 收集列“名称”并打印它,则从上述数据中......

【问题讨论】:

  • 数据是换行还是一行?
  • 我只需要属于“名称”类别的数据

标签: java file-io


【解决方案1】:

java.util.Scanner 可用于读取文件,丢弃不需要的列。 在处理文件时打印所需的列值,或者将它们add() 打印到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);
}

【讨论】:

  • 谢谢,简短,看起来很简单,但是我们如何将它用于大量数据,即太多列,我需要 2 个或更多?还看到了使用 split("\t") 的代码,在这种编码中它的目的是什么?
  • 根据列数修改while循环。 while 循环的每次迭代都代表单行的处理。当从文件中读取整行时,split() 将用于 String 实例,这里不需要这样做,因为 Scanner 会进行拆分。
【解决方案2】:

使用文件阅读器并逐行阅读,在空格处换行并将您想要的任何列添加到列表中。使用 BufferedReader 通过以下方式获取行:

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

那你就可以做抢线了:

String line = br.readLine();

最后,您可以通过以下方式将字符串按列拆分为数组:

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

然后您可以访问这些列并将它们添加到列表中,具体取决于您是否需要第 0、1 或 2 列。

【讨论】:

  • 谢谢,我试了一下,但我只需要属于“名称”类别的数据,我不知道如何继续进行下去
  • 如果您只需要名称 do List.add(columns1[1]) 下的内容,则所有这些都需要在 while 循环中进行。如果 br.readLine() 到达文件末尾,它将返回 null,因此您可以执行以下操作:while((line = br.readLine()) != null)。这将继续读取文件的每一行,然后只需将任何列中的条目添加到列表中,就像我在上面展示的那样。
【解决方案3】:

列是否由制表符分隔?

查看Java CSV,这是一个用于读取逗号分隔或制表符分隔的文本文件的开源库。应该完成大部分工作。我自己从未使用过它,但我认为您可以从第 1 列(或类似列)中查询所有值。

或者,您可以使用BufferedReader(具有readLine())方法一次读取一行文件,然后调用String.split() 并获取您想要的部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2023-03-04
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多