java - 我不确定,为什么我的 java 缓冲阅读器代码只读取 CSV 文件的最后一行?
问题描述
我创建了一个方法,它将读取 CSV 文件的内容并将其传递给我的对象(银行帐户)。我不确定,为什么它只读取我的 csv 文件的最后一行。任何人都可以弄清楚/或帮助我阅读 csv 并将其转换为 java 对象吗?
我的代码:
public static ArrayList<bankAccount> readCSV(File f){
ArrayList<bankAccount> accounts = new ArrayList<>();
try{
BufferedReader br = new BufferedReader(new FileReader(f));
String line = br.readLine();
while (line != null){
String[] atrib = line.split(",");
int id = Integer.parseInt(atrib[0]);
String n = atrib[1];
double b = Double.parseDouble(atrib[2]);
bankAccount newacc = new bankAccount(id,n,b);
accounts.add(newacc);
line = br.readLine();
}
br.close();
}catch (Exception e){
e.printStackTrace();
}
return accounts;
}
CSV 文件:
123,Ac,1000
456,Aundrea,2000
789,Nicole,300
321,Draku,2990
预期输出:
Acc Num: 321
Acc Name: Draku
Acc Bal: 2990.0
Acc Num: 321
Acc Name: Draku
Acc Bal: 2990.0
Acc Num: 321
Acc Name: Draku
Acc Bal: 2990.0
Acc Num: 321
Acc Name: Draku
Acc Bal: 2990.0
解决方案
只需将您的 BankAccount 属性更改为非静态,因为它们属于实例
public class Test {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ArrayList<BankAccount> list = readCSV(new File("your path"));
System.out.println(list);
}
public static ArrayList<BankAccount> readCSV(File f){
ArrayList<BankAccount> accounts = new ArrayList<>();
try{
BufferedReader br = new BufferedReader(new FileReader(f));
String line = br.readLine();
while (line != null){
String[] atrib = line.split(",");
int id = Integer.parseInt(atrib[0]);
String n = atrib[1];
double b = Double.parseDouble(atrib[2]);
BankAccount newacc = new BankAccount(id,n,b);
accounts.add(newacc);
line = br.readLine();
}
br.close();
}catch (Exception e){
e.printStackTrace();
}
return accounts;
}
}
class BankAccount{
private int id;
private String n;
private double b;
public BankAccount(int id, String n, double b) {
this.id = id;
this.n = n;
this.b = b;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getN() {
return n;
}
public void setN(String n) {
this.n = n;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public String toString(){
return id + " : " + n + " : " + b;
}
}
推荐阅读
- java - RollbackException:事务标记为 rollbackOnly 尽管将其设置为 norollbackfor
- excel - VBA Excel 2016 在运行时抛出 Object Required 错误
- widget - Flutter - 将焦点转移到特定的小部件
- php - 在 PhpStorm 2017.3.2 中设置 docker-compose
- angular - Nativescript - 如何在 .ts 代码中以编程方式使用 nsRouterLink
- angular - 如果 p-datatable 中的复选框已选中该行,如何从按钮切换禁用属性
- reactjs - 如何将 Google 趋势嵌入到 React 应用程序中
- wordpress - 无法使用 CPT 类别获取帖子
- javascript - 我想在 ReactJS 表单中显示错误消息
- java - samza 容器失败