将行读入列表列表

时间:2016-02-20 13:01:21

标签: java csv

如果我的文件行包含以逗号分隔的元素,我是否可以将缓冲的阅读器自动插入列表中?

或者我是否readline然后调用string.split方法?

E.g。我的档案有。

1, dog, abc, 10pm
2, cat, abc, 11pm

我想从我的文件中列出一个列表,以便我可以单独调用这些元素

3 个答案:

答案 0 :(得分:1)

最简单的方法是首先读取一行,然后使用split(),因为所有行的格式完全相同。并使用ArrayList的{​​{1}}制作列表清单。

使用BufferedReader的示例:

String[]

使用扫描仪(不完整示例):

import java.util.*;
import java.io.*;

class Test {
    public static void main(String[] args) {
        ArrayList<ArrayList<String>> myList = new ArrayList<>();
        try {
            BufferedReader in = new BufferedReader(new FileReader("foo.txt"));
            while(in.ready()) {
                String line = in.readLine();
                String[] parts = line.split(", ");
                ArrayList<String> lineList = new ArrayList<>();
                for (String s : parts) {
                    lineList.add(s);
                }
                myList.add(lineList);
            }
        }
        catch(Exception e) {
        }

        for(ArrayList<String> elem : myList) {
            for(String item : elem) {
                System.out.print(item + " ");
            }
            System.out.println();
        }
    }
}

答案 1 :(得分:0)

据我所知,除非你实现自己的BufferedReader ...尽管可能有一个在Java 8中使用lambda

答案 2 :(得分:0)

BufferedReader的界面不支持直接读入列表而不支持列表列表。你将至少自己做分裂。

java8开始,您可以使用BufferedReader.lines()获取您必须拆分的行流,转换为列表并添加到列表列表中:

public List<List<String>> readAsListOfLists8(String file) throws IOException, FileNotFoundException {
    try (BufferedReader br = new BufferedReader(new FileReader(file))) {
        return br.lines().map(line -> Arrays.asList(line.split("[, ]+")))
            .collect(Collectors.toList());
    }
}

如果您在java7中投放,可以使用Files.readAllLines获取行列表:

public List<List<String>> readAsListOfLists7(String file) throws IOException, FileNotFoundException {
    List<List<String>> ll = new ArrayList<>();
    for(String line : Files.readAllLines(Paths.get(file))) {
        ll.add(Arrays.asList(line.split("[, ]+")));
    }
    return ll;
}

对于较低版本的java,请使用您的解决方案。