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