首页 > 解决方案 > 我不确定,为什么我的 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

标签: javacsv

解决方案


只需将您的 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;
        }
    }

推荐阅读