Обработка исключений Java - PullRequest
       0

Обработка исключений Java

5 голосов
/ 02 сентября 2010

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

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

С уважением,

magggi

Ответы [ 7 ]

15 голосов
/ 02 сентября 2010
for(File f : files){
   try {
       process(f); // may throw various exceptions
   } catch (Exception e) {
       logger.error(e.getMessage(), e);
   }
}
11 голосов
/ 02 сентября 2010

Вы должны использовать блоки try / catch / finally.

try{  
    //Sensitive code  
} catch(ExceptionType e){  
    //Handle exceptions of type ExceptionType or its subclasses  
} finally {  
    //Code ALWAYS executed  
}
  • try позволит вам выполнить чувствительный код, который может вызвать исключение.
  • catch будет обрабатывать определенное исключение (или любой подтип этого исключения).
  • finally поможет выполнить операторы, даже если исключение выдается и не перехватывается.

Вваш случай

for(File f : getFiles()){
    //You might want to open a file and read it
    InputStream fis;
    //You might want to write into a file
    OutputStream fos;
    try{
        handleFile(f);
        fis = new FileInputStream(f);
        fos = new FileOutputStream(f);
    } catch(IOException e){
        //Handle exceptions due to bad IO
    } finally {
        //In fact you should do a try/catch for each close operation.
        //It was just too verbose to be put here.
        try{
            //If you handle streams, don't forget to close them.
            fis.close();
            fos.close();
        }catch(IOException e){
            //Handle the fact that close didn't work well.
        }
    }
}

Ресурсы:

2 голосов
/ 02 сентября 2010

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

Основная предпосылка - это блок try catch.

try
{
    //Your code here that causes problems
}
catch(exception ex)
{
    //Your code to handle the exception
}

Вы «пробуете» свой код, и если возникает исключение, вы «ловите» его.И делать то, что вам нужно.Есть также дополнение к блоку catch, которое вы можете добавить в конце {}.По существу, даже если исключение не возникает, код finally все еще выполняется.Вы можете удивиться этому, но его часто используют с обработкой потоков / файлов и т. Д. Для закрытия потока.

Подробнее об исключениях java читайте здесь в руководствах, написанных Sun (сейчас Oracle) - http://download.oracle.com/javase/tutorial/essential/exceptions/

try
{
    //Your code here that causes problems
}
catch(exception ex)
{
    //Your code to handle the exception
}
finally
{
    //Always do this, i.e. try to read a file, catch any errors, always close the file
}

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

Опять же, это полезная, но обширная тема, поэтому вам нужно прочитать об этом.

Поскольку вы делаете несколько файловвам нужно сделать цикл, и внутри цикла содержится блок try / catch.

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

0 голосов
/ 12 марта 2019
public class Main
{
    public static void main(String args[])
    {
        int a=10;
        try
        {
            System.out.println(a/0); //Here it is not possible in maths so it goes to catch block 
        }
        catch(ArithmeticException e)
        {
            System.out.println("Arithmetic Exception");
        }
    }
}

вывод: арифметическое исключение

0 голосов
/ 22 декабря 2015

FileSystemException может быть конкретным исключением, которое вы ищете.

Хотя для новичков лучше поймать исключение и распечатать его, используя

System.out.println(e);

, где e - пойманное исключение.

0 голосов
/ 02 сентября 2010

Как правило, я бы сделал это.

ArrayList<Entry> allEntries = getAllEntries();

for(Entry eachEntry:allEntries){
  try{
    //do all your processing for eachEntry
  } catch(Exception e{
     ignoredEntries.add(eachEntry);
     //if concerned, you can store even the specific problem.
  } finally{
     //In case of resource release
  }
}

if(ignoredEntries.size() > 0){
  //Handle this scenario, may be display the error to the user
}
0 голосов
/ 02 сентября 2010

просто поймать исключение, которое он может бросить, и ничего не делать с ним;ешьте, как говорят люди :) Но хотя бы войдите в систему!

Очень лаконичный пример:

try {
   your code...
} catch (Exception e) {
   log here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...