Почему мой метод читает только одну строку текста? - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть метод, который будет читать части текстового файла, который состоит из 4 частей: дата, имя, описание и сумма, например

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

и т. Д. *

Myпроблема в том, что мой метод будет читать только 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");
     }

}

РЕДАКТИРОВАТЬ: Удаление окончательно сработало.

1 Ответ

0 голосов
/ 24 ноября 2018

Прочитайте здесь , чтобы узнать, как работает finally.В настоящее время вы закрываете свой сканер в конце первой итерации цикла while из-за finally, который вы связали с 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");
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...