Java IOException - 流关闭
Java IOException - Stream Closed
当我 运行 这个程序时,我得到 "IOException
: Stream Closed"。文本包含多行数据。程序应读取每一行,执行必要的功能并将输出写入新文件。我很困惑应该先关闭哪个作者以及在哪里。
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();
}
}
}
异常情况如下:
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)
您关闭循环中的输入流:
while ((inputLine = in.readLine()) != null) // error
// System.out.println(inputLine);
in.close();
您应该在循环外关闭流:
while ((inputLine = in.readLine()) != null) // error
{
//dosomething
// System.out.println(inputLine);
}
in.close();
您应该在 while 循环中放置一个函数调用,例如:
- 一个
System.out.println("Hi, I'm a row!");
或
- 取消注释
System.out.println(inputLine);
或
- 在 while 语句的末尾放一个分号
为了让它正常执行
编写的代码执行(省略注释):
...
while ((inputLine = in.readLine()) != null)
in.close();
...
所以循环的第一个循环正确执行并运行in.close()
。然后第二个循环调用 inputLine = in.readLine()
失败,因为流被关闭然后抛出异常。
当我 运行 这个程序时,我得到 "IOException
: Stream Closed"。文本包含多行数据。程序应读取每一行,执行必要的功能并将输出写入新文件。我很困惑应该先关闭哪个作者以及在哪里。
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();
}
}
}
异常情况如下:
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)
您关闭循环中的输入流:
while ((inputLine = in.readLine()) != null) // error
// System.out.println(inputLine);
in.close();
您应该在循环外关闭流:
while ((inputLine = in.readLine()) != null) // error
{
//dosomething
// System.out.println(inputLine);
}
in.close();
您应该在 while 循环中放置一个函数调用,例如:
- 一个
System.out.println("Hi, I'm a row!");
或 - 取消注释
System.out.println(inputLine);
或 - 在 while 语句的末尾放一个分号
为了让它正常执行
编写的代码执行(省略注释):
...
while ((inputLine = in.readLine()) != null)
in.close();
...
所以循环的第一个循环正确执行并运行in.close()
。然后第二个循环调用 inputLine = in.readLine()
失败,因为流被关闭然后抛出异常。