как перехватить исключения и продолжить обработку в Java - PullRequest
6 голосов
/ 21 марта 2012

У меня есть приложение, в котором во время цикла я обрабатываю 5000 файлов до 6000 файлов.

В блоке try and catch я читаю файл excel и обрабатываю каждую отдельную ячейку.

Конечно, все файлы в одном и том же формате, но в некоторых файлах данные в ячейке могут различаться, могут содержать данные или нет

когда есть исключение при обработке 100-го файла, вся обработка останавливается и выдается исключение,

Но я не хочу этого сценария, вместо этого, если в сотом файле есть исключение, итерация должна продолжиться со 101-го файла. И, наконец, я должен знать, какой файл успешно обработан, а какой нет.

Исключение, которое я получаю, NumberFormatException и NullPointerExceptions

Как передать этот сценарий?

Ответы [ 3 ]

8 голосов
/ 21 марта 2012

Основная идея - поместить блок try-catch внутри циклов.

for (File file : files) {
    try {
        parseExcelFile(file); // Do whatever you want to do with the file
    }
    catch (Exception e) {
        logger.warn("Error occurs while parsing file : " + file, e);
    }
}
5 голосов
/ 21 марта 2012

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

Map fileExceptions = new HashMap<String, Exception>();

for(File file : files){
   try{
        <file processing>
   }
   catch(NumberFormatException e){
       fileExceptions.put(fileName, e);
   }
   catch(NullPointerException e){
       fileExceptions.put(fileName, e);
   }
}
4 голосов
/ 21 марта 2012

Трудно быть более конкретным, не видя некоторый код, но это может быть возможным подходом:

public void processFiles(List<File> fileList)
{
    for (File thisFile : fileList) {
        try {
            processOneFile(thisFile);
        }
        catch (Exception ex) {
            printLogMessage(thisFile.getName());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...