title: Java IOException - Stream Closed
body: <p>I get <em>"<code>IOException</code>: Stream Closed"</em> when I run this program. The text contains many lines of data. Program should read each line, do necessary function and write the output to a new file. I am confused as to which writer should be closed first and where.</p>
  
  <pre><code>import java.net.*; 
  import java.io.*;
  
  public class URLReader {
      public static void main(String[] args) throws Exception {
          BufferedReader br = null;
          try {
              // change this value
              FileInputStream fis = new FileInputStream("C:\\Users\\Rao\\Desktop\\test.txt");
              br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
              String sCurrentLine;
              while ((sCurrentLine = br.readLine()) != null) {
                  processLine(sCurrentLine); //error
              }
          } finally {
              if (br != null)
                  br.close();
          }
      }
  
      public static void processLine(String line) throws IOException {
          String prename = line.substring(22);
          int siz= prename.indexOf(":");
          String name = prename.substring(0, siz);
  
          URL oracle = new URL("http://ip-api.com/json/"+name);
          BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream()));
          String inputLine;
          while ((inputLine = in.readLine()) != null) // error
              // System.out.println(inputLine);
              in.close();  
          String baby = (line + "\t" + inputLine); 
  
          try {
              FileWriter writer = new FileWriter("C:\\Users\\Rao\\Desktop\\output.txt", true);
              writer.write(baby);
              writer.write("\r\n");   // write new line
              writer.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
  </code></pre>
  
  <p>The exception is as follows: </p>
  
  <pre><code>Exception in thread "main" java.io.IOException: Stream closed
      at java.io.BufferedReader.ensureOpen(Unknown Source)
      at java.io.BufferedReader.readLine(Unknown Source)
      at java.io.BufferedReader.readLine(Unknown Source)
      at URLReader.processLine(URLReader.java:31)
      at URLReader.main(URLReader.java:13)
  </code></pre>