Java 循环读取csv文件时超出范围

Java 循环读取csv文件时超出范围,java,csv,while-loop,Java,Csv,While Loop,我正在开发一个程序,该程序可以读取包含银行账户列表的文件。我一直遇到IndexOutOfBoundsException错误,我不知道为什么。当我将银行账户直接输入代码(而不是从文件中读取)时,它工作得很好,这让我相信我的while循环在某个地方出错了。我怀疑它没有正确循环,但我不是肯定的。不幸的是,我对while循环没有太多经验 我正在读取的文件,按accountType/name/worth/rate的顺序列出: 1,Waterford Ellingsworth,4350.0,0.002 2,

我正在开发一个程序,该程序可以读取包含银行账户列表的文件。我一直遇到IndexOutOfBoundsException错误,我不知道为什么。当我将银行账户直接输入代码(而不是从文件中读取)时,它工作得很好,这让我相信我的while循环在某个地方出错了。我怀疑它没有正确循环,但我不是肯定的。不幸的是,我对while循环没有太多经验

我正在读取的文件,按accountType/name/worth/rate的顺序列出:

1,Waterford Ellingsworth,4350.0,0.002
2,Bethanie Treadwell,500.0,0.35
3,Ira Standish,50000,0.1,59,0.1
实际程序本身:

 Scanner infile = new Scanner("‪C:/Users/Josh/Desktop/prog5input.csv");
    while (infile.hasNextLine()) {
        Scanner s2 = new Scanner(infile.nextLine()); // put string from file into second Scanner object
        s2.useDelimiter(",");
        if (s2.hasNextInt()) {
            int type = s2.nextInt(); 
            if (type == 1) {
                String accountHolder = s2.next();
                double accountInitial = s2.nextDouble();
                double accountRate = s2.nextDouble();
                bank.addNewAccount(new SavingsAccount(accountHolder, accountInitial, accountRate));
                // read fields for Type 1 accounts and create new Type 1 object
            }
            else if (type == 2) {
                String accountHolder = s2.next();
                double accountInitial = s2.nextDouble();
                double accountCostPerMonth = s2.nextDouble();
                bank.addNewAccount(new CheckingAccount(accountHolder, accountInitial, accountCostPerMonth));
            }
            else if (type == 3) {
                String accountHolder = s2.next();
                double accountInitial = s2.nextDouble();
                double accountRate = s2.nextDouble();
                int disbursementAge = s2.nextInt();
                double earlyWithdrawalPenalty = s2.nextDouble();
                bank.addNewAccount(new IRAAccount(accountHolder, accountInitial, accountRate, disbursementAge, earlyWithdrawalPenalty));
            }
        } //ends if statement s2.hasNextInt()
        // now go to top of loop, check infile to see if there is another line to read
    } //ends while loop
编辑以包含输出:

Creating accounts...

Performing transactions...
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at Bank.getAccountByIndex(Bank.java:28)
    at BankDriverFileInput.main(BankDriverFileInput.java:58)
这里有一个指向我整个程序的链接:

替换

Scanner infile = new Scanner("‪C:/Users/Josh/Desktop/prog5input.csv");


因为作为您的代码,扫描仪的输入流将是字符串“c:…..”而不是它所代表的文件。

我下载了您的google drive程序,它通过以下更改为我带来了魅力

Scanner infile = new Scanner(new FileInputStream("‪C://Users//Josh//Desktop//prog5input.csv"));
请确保在此处指定了正确的文件路径

我的示例输出供您参考: 项目5,Josh Correia,cssc0491 正在创建帐户。。。 Waterford Ellingsworth 4350.00.002客户:Waterford Ellingsworth,储蓄账户1余额:4350.00美元 客户:Bethanie Treadwell,支票账户2余额:$500.00 客户:爱尔兰共和军斯坦迪什,爱尔兰共和军储蓄账户3余额:50000.00美元,支付期限=59,提前支取罚金=0.1

正在执行事务。。。 储蓄账户1余额:4550.00美元 支票账户2余额:286.87美元 IRA储蓄账户3余额:50000.00美元,支付年龄=59岁,提前支取罚金=0.1

正在更新帐户。。。 储蓄账户1余额:4559.10美元 支票账户2余额:286.52美元
IRA储蓄账户3余额:55000.00美元,支付年龄=59岁,提前支取罚款=0.1‪C:/Users/Josh/Desktop/prog5input.csv”)扫描文件名,而不是文件。当我这样做时,我在线程“main”java.io.FileNotFoundException中得到错误异常:‪C:\Users\Josh\Desktop\prog5input.csv(文件名、目录名或卷标语法不正确)@Josh Correia使用“/”或“\\”作为C:\\Users\\。。。因为“\”是转义字符。
Scanner infile = new Scanner(new FileInputStream("‪C://Users//Josh//Desktop//prog5input.csv"));