为什么我的方法只能读取一行文本?

时间:2018-11-24 07:22:33

标签: java text

我有一个方法可以读取文本文件的一部分,该文件有4个部分:日期,名称,描述和金额,例如

4/5/2018, gel, hair product, 20.00
4/4/2018, wax, hair product, 20.00

以此类推...

我的问题是我的方法只会读取第一行,然后输出我的catch方法,说找不到该文件。

public static void showRecordedExpense(String filename)throws IOException {
    String date = "";
    String name = "";
    String description = "";
    double amount = 0.00;
     try{
         Scanner read = new Scanner(new File(filename));
         while (read.hasNextLine()){
             String oneLine = read.nextLine();
             String[] parts = oneLine.split(",");
             try {
                 date = parts[0];
                 name = parts[1];
                 description = parts[2];
                 amount = Double.parseDouble(parts[3]);
                 System.out.printf("%15s%15s%15s%20s%n", "---------------", "---------------",
                         "---------------", "---------------------");
                 System.out.printf("%15s%15s%15s%31s%n","Date", "Name", "Description","Amount");
                 System.out.printf("%15s%14s%33s%15s%n",date,name,description,amount);
                 System.out.printf("%15s%15s%15s%20s%n", "---------------", "---------------",
                         "---------------", "---------------------");
             }catch (Exception e){
                 System.out.println("no");
             } finally {
                 read.close();
             }
         }
     }catch (Exception e){
         System.out.println("The file could not be found");
     }

}

编辑: 取出最后工作的东西。

1 个答案:

答案 0 :(得分:2)

请阅读here,以详细了解finally的工作方式。由于whilefinally配对,当前正在try/catch循环的第一次迭代结束时关闭扫描程序。自关闭文件以来,while的下一个迭代不再能够从文件中读取,这就是为什么它仅读取第一行的原因。考虑在while循环完成后取出最终关闭的扫描仪。

     try{
         Scanner read = new Scanner(new File(filename));
         while (read.hasNextLine()){
             String oneLine = read.nextLine();
             String[] parts = oneLine.split(",");
             try {
                 date = parts[0];
                 name = parts[1];
                 description = parts[2];
                 amount = Double.parseDouble(parts[3]);
                 System.out.printf("%15s%15s%15s%20s%n", "---------------", "---------------",
                         "---------------", "---------------------");
                 System.out.printf("%15s%15s%15s%31s%n","Date", "Name", "Description","Amount");
                 System.out.printf("%15s%14s%33s%15s%n",date,name,description,amount);
                 System.out.printf("%15s%15s%15s%20s%n", "---------------", "---------------",
                         "---------------", "---------------------");
             }catch (Exception e){
                 System.out.println("no");
             }
         }

         read.close();
     }catch (Exception e){
         System.out.println("The file could not be found");
     }