Исключение в потоке «main» java .util.NoSuchElementException. проблема в чтении файла - PullRequest
0 голосов
/ 03 августа 2020

Я читаю 10 файлов из каталога. Я проверяю условие, если файл пуст, тогда выполнение должно выполняться напрямую go для следующего файла. Когда я помещаю это условие, я получаю сообщение об ошибке, в противном случае мой код работает правильно.

for (int i = 0; i < jsonArray.size(); i++) {
                String filename=entityName+".json";
                String fileNameWithpath=filepath+filename;
                System.out.println("File name with path: "+fileNameWithpath);
                File f =new File(fileNameWithpath);
                 if(f.length()==0)
                    continue; 
                String payLoad = new Scanner(f).useDelimiter("\\Z").next();
                System.out.println("File name is: "+payLoad);  }

Когда я удаляю это условие, оно работает правильно.

                   if(f.length()==0)
                        continue; 

Мое требование - если файл пусто, он должен перейти к следующему файлу. Я получаю исключение ниже, если включаю if условие

D:/Learning/spring/automation/src/main/java/ItemEntity.json
Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at org.file.practice.ReadFile.main(ReadFile.java:116)
            
            

Ответы [ 3 ]

1 голос
/ 03 августа 2020

Либо файл пуст, либо файл вообще не существует. Вот почему вы можете получить эту ошибку.

Просто измените это:

for (int i = 0; i < jsonArray.size(); i++) {
                String filename=entityName+".json";
                String fileNameWithpath = filepath + filename;
                System.out.println("File name with path: "+fileNameWithpath);
                File f = new File(fileNameWithpath);
                System.out.println(f.length()); // for debugging
                if(!f.exists() || f.length() == 0)
                    continue; 
                String payLoad = new Scanner(f).useDelimiter("\\Z").next();
                System.out.println("File name is: "+payLoad);  
}
1 голос
/ 03 августа 2020

Вы должны сначала проверить, существует ли файл или нет, а затем проверить его на пустоту.

boolean exists = f.exists(); if(!exists || f.length()==0) continue;

1 голос
/ 03 августа 2020

Почему бы не go об этом так:

for (int i = 0; i < jsonArray.size(); i++) {
                String filename=entityName+".json";
                String fileNameWithpath=filepath+filename;
                System.out.println("File name with path: "+fileNameWithpath);
                File f =new File(fileNameWithpath);
                if(f.length()>0){                       
                String payLoad = new Scanner(f).useDelimiter("\\Z").next();
                System.out.println("File name is: "+payLoad);  }}

Это гарантирует, что следующие две строки будут работать только тогда, когда размер строго больше 0

...