2013-05-21 4 views
1

Я написал код, который читает веб-страницы и передает их в файл .txt. Проблема в том, что выходной файл (something.txt) LOCKED (я использую OS X, если это помогает). Я понял, что может возникнуть проблема с закрытым BufferedReader(), но он кажется закрытым. Благодарю.Closed BufferedReader()?

PrintStream ps = new PrintStream(new File("/Users/MyName/Desktop/something.txt")); 
URL myUrl = new URL("webPage"); 
BufferedReader in = new BufferedReader(new InputStreamReader(myUrl.openStream())); 
String inputLine; 
while ((inputLine = in.readLine()) != null) { 
    ps.println(inputLine); 
    System.out.println(inputLine); 
} 
in.close(); 
ps.close(); 
+1

Это должно быть просто, чтобы проверить - изменить имя выходного файла. Если ваша теория верна, она будет работать один раз, а затем снова сработает. –

+0

Выходной файл по-прежнему заблокирован. – slanecek

ответ

1

Если вы находитесь в Java 7, то лучшим способом является try-with-resources, который гарантирует, что оба in и ps будут закрыты

try (PrintStream ps = new PrintStream(new File("/Users/MyName/Desktop/something.txt")); 
      BufferedReader in = new BufferedReader(new InputStreamReader(
        new URL("webPage").openStream()))) { 
     String inputLine; 
     while ((inputLine = in.readLine()) != null) { 
      ps.println(inputLine); 
      System.out.println(inputLine); 
     } 
    } 
1

Возможно, существует исключение между броском в вашем цикле чтения/записи. Если это произойдет, вызовы close() не произойдут, что объяснит вашу проблему, если вы повторно используете одни и те же имена файлов в течение одного прогона вашей программы.

Чтобы исправить это, сделайте close() в блоке finally с попыткой обертывания цикла чтения/записи.