Java 将行读入列表中

Java 将行读入列表中,java,csv,Java,Csv,如果我的文件行包含以逗号分隔的元素,我可以让缓冲读取器自动将元素插入列表吗 还是我先执行readline然后调用string.split方法 我的档案有问题 1, dog, abc, 10pm 2, cat, abc, 11pm 我想从我的文件中得到一个列表列表,这样我就可以单独调用元素了。据我所知,除非您实现自己的BufferedReader。。。尽管在Java 8中可能有一种方法采用lambda,但对于您的情况,最简单的方法是先读取一行,然后使用split(),因为所有行的格式都完全相同。

如果我的文件行包含以逗号分隔的元素,我可以让缓冲读取器自动将元素插入列表吗

还是我先执行
readline
然后调用
string.split
方法

我的档案有问题

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

我想从我的文件中得到一个列表列表,这样我就可以单独调用元素了。据我所知,除非您实现自己的BufferedReader。。。尽管在Java 8中可能有一种方法采用lambda,但对于您的情况,最简单的方法是先读取一行,然后使用
split()
,因为所有行的格式都完全相同。并使用
String[]
ArrayList
创建列表

使用BufferedReader的示例:

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();
        }
    }
}

BufferedReader
的接口不支持直接读取列表,也不支持较少读取列表。你至少得自己做分割

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

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());
    }
}

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

您真的希望分割用逗号分隔的元素吗?或者你真的想读一种叫做“CSV”的格式吗?
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());
    }
}
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;
}