Java 如何将没有标题的文本文件读入ArrayList
我目前正在做一项作业,我找不到任何线索可以从文本文件中删除标题并将其余内容写入ArrayList。有人能帮我吗Java 如何将没有标题的文本文件读入ArrayList,java,csv,Java,Csv,我目前正在做一项作业,我找不到任何线索可以从文本文件中删除标题并将其余内容写入ArrayList。有人能帮我吗 ID、Nama、GajiPokok、JmlAbsensi、JmlIzin 2,Peter,5000000,17,3 约翰,4500000,19,1 琳达,10000000,13,7 露西,7000000,20,0 这是我的密码: BufferedReader in = new BufferedReader(new FileReader("D:\\" + args[
ID、Nama、GajiPokok、JmlAbsensi、JmlIzin
2,Peter,5000000,17,3
约翰,4500000,19,1
琳达,10000000,13,7
露西,7000000,20,0
这是我的密码:
BufferedReader in = new BufferedReader(new FileReader("D:\\" + args[0] + ".txt"));
try {
String line = in.readLine();
String data[];
while (line != null){
data = line.split(",");
Staff s = new Staff(){};
s.setID(Integer.parseInt(data[0]));
s.setNama(data[1]);
s.setGajiPokok(Long.parseLong(data[2]));
s.setjmlhAbsensi(Integer.parseInt(data[3]));
s.setjmlhIzin(Integer.parseInt(data[4]));
s.getID();
s.getNama();
s.getGajiPokok();
s.getjmlhAbsensi();
s.getjmlhIzin();
list_Staff.addAll(Arrays.asList(s));
line = in.readLine();
}
in.close();
} catch (IOException e){e.printStackTrace();}
如果您想在读取CSV文件时忽略第一行,则可以通过调用.readLine()中的
开始时编码>两次,如下例所示:
BufferedReader in = new BufferedReader(new FileReader("D:\\" + args[0] + ".txt"));
String line = in.readLine();
line = in.readLine(); //skip fist line and read second line
String data[];
while (line != null){
data = line.split(",");
Staff s = new Staff(){};
s.setID(Integer.parseInt(data[0]));
s.setNama(data[1]);
s.setGajiPokok(Long.parseLong(data[2]));
s.setjmlhAbsensi(Integer.parseInt(data[3]));
s.setjmlhIzin(Integer.parseInt(data[4]));
s.getID();
s.getNama();
s.getGajiPokok();
s.getjmlhAbsensi();
s.getjmlhIzin();
list_Staff.addAll(Arrays.asList(s));
line = in.readLine();
}
使用JAVA 8流的skip()
方法:
try(BufferedReader in = new BufferedReader(new FileReader("D:\\" + args[0] + ".txt"))) {
Stream<String> lines = in.lines();
List<Staff> staff = lines.skip(1).map(line -> {
Staff s = new Staff();
String data[] = line.split(",");
s.setID(Integer.parseInt(data[0]));
s.setNama(data[1]);
s.setGajiPokok(Long.parseLong(data[2]));
s.setJmlhAbsensi(Integer.parseInt(data[3]));
s.setJmlhIzin(Integer.parseInt(data[4]));
return s;
}).collect(Collectors.toList());
System.out.println(staff);
}
try(BufferedReader in=new BufferedReader(新文件读取器(“D:\\”+args[0]+.txt”)){
流线=in.lines();
列表职员=行。跳过(1)。映射(行->{
职员s=新职员();
字符串数据[]=行。拆分(“,”);
s、 setID(Integer.parseInt(数据[0]);
s、 setNama(数据[1]);
s、 setGajiPokok(Long.parseLong(数据[2]);
s、 setJmlhAbsensi(Integer.parseInt(数据[3]);
s、 setJmlhIzin(Integer.parseInt(数据[4]);
返回s;
}).collect(Collectors.toList());
系统输出打印(工作人员);
}
您可以声明以下行两次,或者初始化整数变量,如果其为零,则跳过循环。
String line=in.readLine() 此解决方案有效
private void readTextFile(String fileName) throws FileNotFoundException {
BufferedReader in = new BufferedReader(new FileReader(fileName));
Stream<String> stream = in.lines();
List<String> answer = stream.collect(Collectors.toList());
// For Pre-Java8
/*for (int i = 1; i < answer.size(); i++) {
System.out.println(answer.get(i));
}*/
// Split afterwards.
Stream<String> ans = answer.stream().filter(p -> !p.equals(answer.get(0)));
ans.forEach(x -> System.out.println(x));
}
private void readTextFile(字符串文件名)引发FileNotFoundException{
BufferedReader in=新的BufferedReader(新文件读取器(文件名));
Stream=in.lines();
List answer=stream.collect(Collectors.toList());
//对于Java8之前的版本
/*for(inti=1;i!p.equals(answer.get(0));
ans.forEach(x->System.out.println(x));
}
它可以工作,但我想不起来它是怎么工作的,你能给我解释一下吗,先生?我有点好奇它到底是怎么工作的,它对我来说没有任何意义,但谢谢你…在这里,.readLine()方法逐行读取数据。当您第一次调用.readLine()时,它将读取第一行,如果您再次调用它,它将读取第二行,依此类推。由于需要从第二行开始处理,所以只需在开始时调用.readLine()两次。这和你读书时一样。若你们想跳过第一页,你们只需翻开那个一页,就可以从第二页开始阅读这本书。我希望我已经解释得很好:)有没有一种方法可以在没有sskip的情况下删除这些标题?