Java 为什么我的方法只能阅读一行文字?

Java 为什么我的方法只能阅读一行文字?,java,text,Java,Text,我有一个方法,可以读取文本文件的部分,该文件有4个部分:日期、名称、描述和金额 4/5/2018, gel, hair product, 20.00 4/4/2018, wax, hair product, 20.00 等等 我的问题是,我的方法只读取第1行,然后输出catch方法,表示找不到文件 public static void showRecordedExpense(String filename)throws IOException { String date = "";

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

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

我的问题是,我的方法只读取第1行,然后输出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");
     }

}
编辑: 取出“最终工作”按钮。

阅读有关“最终工作”的详细信息。当前,由于您与
try/catch
配对的
finally
,您正在
循环的第一次迭代结束时关闭扫描仪。
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");
     }
有关
最终如何工作的详细信息,请阅读。当前,由于您与
try/catch
配对的
finally
,您正在
循环的第一次迭代结束时关闭扫描仪。
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");
     }

你的文件存储在哪里?
filename
的值是多少?我的文件存储在Intellij的src中,名称是expenses.txt在它读取了
最后的第一行之后,您正在关闭扫描仪
文件名的值是多少?您正在隐藏异常类型、消息和堆栈跟踪,这将告诉您问题所在。不要捕捉异常。捕获您期望的异常,并正确处理该异常。打印异常的堆栈跟踪。文件存储在哪里?
filename
的值是多少?我的文件存储在Intellij的src中,名称是expenses.txt在它读取了
最后的第一行之后,您正在关闭扫描仪
文件名的值是多少?您正在隐藏异常类型、消息和堆栈跟踪,这将告诉您问题所在。不要捕捉异常。捕获您期望的异常,并正确处理该异常。打印异常的堆栈跟踪。