2017-01-12 3 views
0

Я просто задавался вопросом, не объективна ли моя цель FileOutputStream; out.close(); следует вызвать в блоке catch? Поскольку внешний объект все еще «открыт», если что-то происходит.Должен FileOutputStream.close(); вызываться в блоке catch IOException?

Если нет, следует ли что-либо еще с объектом FileOutputStream обрабатывать в блоке catch?

public void saveBitmap(){ 

    final File myDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), folderName); 
    myDir.mkdirs(); 
    final File file = new File(myDir, getFileName() + getFileExtension()); 
    FileOutputStream out = null; 

    try { 

     out = new FileOutputStream(file); 
     viewToBitmap().compress(Bitmap.CompressFormat.JPEG, quality, out); 

     } 

     out.flush(); 
     out.getFD().sync(); 
     out.close(); 

    } catch (IOException e) { 

     //should I out.close(); here too? 

     e.printStackTrace(); 
     onBitmapSavedListener(false, null); 
    } 
    } 
+0

Вы не сможете использовать 'out' в' catch', потому что вы его объявили в 'try' – rala

+0

@rala Просто изменилось, так что теперь возможно – Muddz

ответ

3

Необходимо закрыть соединение в блоке finally. Поэтому вы можете быть уверены, что он закроется в конце класса.

+0

. А что, если произошла ошибка, и мы перейдем к блоку catch? Должна ли быть закрыта связь и сбрасываться? – Muddz

+1

Наконец, блок всегда будет выполнен. Таким образом, если произошла ошибка или соединение не будет закрыто. –

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