2014-02-08 1 views
0

Когда я хочу закрыть объекты InputFileStream и OutputFileStream, eclipse говорит, что мне нужно поймать IOException, поэтому вот мой код после обнаружения этих исключений. Как вы можете видеть, я дважды ловил IOException. Есть ли более простой способ, которым я могу иметь только один блок для catch IOException для in.close() и in.read()?закрытие объекта FileInputStream исключает исключение

public class ByteStream { 

public static void main(String[] args) { 

    FileInputStream in = null; 

    try { 

     in = new FileInputStream("testdata.txt"); 
     int nextByte; 
     while((nextByte = in.read()) != -1){ 
      System.out.println(nextByte + "-"); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (in != null){ 
      try { 
       in.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

    } 
} 

}

+0

'try-with-resources'. –

+0

Что говорит e.printStackTrace()? – KernelPanic

+0

Ошибка отсутствует, и все работает нормально. Я просто хочу сделать код более простым, используя только один блок IOException. – iman

ответ

0

Используйте синтаксис try-with-resources в Java 7

try (FileInputStream in = new FileInputStream("testdata.txt");){ 

    int nextByte; 
    while ((nextByte = in.read()) != -1) { 
     System.out.println(nextByte + "-"); 
    } 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

компилятор будет заботиться о преобразовании выше код в код, который закрывает inInputStream, или любой другой AutoCloseable объект, объявленный и установлен в части () выражения try.

+0

Это один из способов. Все еще с нетерпением ждем решений, регрессирующих Java 6. – iman

+0

@iman Вы не найдете их. То, что вы делаете, это правильный способ работы с java 6. –

 Смежные вопросы

  • Нет связанных вопросов^_^