2015-09-21 3 views
0

Я не могу скомпилировать программу. Проблема заключается в последней строке «out.close». Скажите, пожалуйста, как исправить это и почему это вызывает проблему.Не удается закрыть поток Ouput

import java.io.*; 

public class Test { 

    public static void main(String args[]) throws IOException { 
     try { 
      BufferedReader in = new BufferedReader(new FileReader(args[0])); 
      BufferedWriter out = new BufferedWriter(new FileWriter(args[1])); 
      String line; 
      line = in.readLine(); 
      while (line != null) { 
       out.write(line, 0, line.length()); 
       out.newLine(); 
       line = in.readLine(); 
      } 
     } finally { 
      out.close(); 
     } 
    } 
} 
+1

нет 'поймать block' – thegauravmahawar

+0

это еще не проблема, попытка может работать с наконец, также – user1254966

+0

Пожалуйста, используйте«Формат»в меню вашего IDE, обновить свой вопрос и вставить код с отступом. Это практически нечитаемо. – RealSkeptic

ответ

1

Вам необходимо объявить переменную out за пределами yur try . . . finally. Поскольку try и finally являются двумя различными областями, out не определен в вашем блоке finally.

8

Вы должны объявить BufferedWriter из переменного вне примерочных, наконец, блока, поскольку переменные, объявленные в блоке Ьги находятся вне области видимости, в конце концов, это называется блок-область. Код должен быть как:

BufferedWriter out = null; 
try { 
    BufferedReader in = new BufferedReader(new FileReader(args[0])); 
    out = new BufferedWriter(new FileWriter(args[1])); 
    String line; 
    line = in.readLine(); 
    while (line != null) { 
     out.write(line, 0, line.length()); 
     out.newLine(); 
     line = in.readLine(); 
    } 
} finally { 
    if (out != null) 
     out.close(); 
} 

Или, как это сказано в комментариях, если Java версия 7 или выше, вы должны использовать примерочный с-ресурсов:

try(BufferedReader in = new BufferedReader(new FileReader(args[0])); 
    BufferedWriter out = new BufferedWriter(new FileWriter(args[1]))) 
{ 
    String line; 
    line = in.readLine(); 
    while (line != null) { 
     out.write(line, 0, line.length()); 
     out.newLine(); 
     line = in.readLine(); 
    } 
} 

В этом случае, вы не В конце блока нужно закрыть его вручную.

+2

Или использовать блок try-with-resources с Java 7 – gla3dr

+1

Если он использует Java 7+, он также должен использовать try-with-resources. – childofsoong

+2

@ gla3dr вы избили меня на три секунды! – childofsoong

2

Try with Resources (Java 7+). В этом случае нет необходимости в закрытых операторах. Ресурсы, объявленные внутри try, будут автоматически закрыты.

try(BufferedReader in = new BufferedReader(new FileReader(args[0])); 
     BufferedWriter out = new BufferedWriter(new FileWriter(args[1]))) 
     { 
     String line; 
     line = in.readLine(); 
     while (line != null) { 
      out.write(line, 0, line.length()); 
      out.newLine(); 
      line = in.readLine(); 
     } 
    } catch (FileNotFoundException e) { 
    } catch (IOException e) { 
    } finally { 
    } 
Смежные вопросы