このプログラムを実行すると、"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 ((inputLine = in.readLine()) != null)
in.close();
...
_
したがって、ループの最初のサイクルは正しく実行され、in.close()
が実行されます。次に、2番目のサイクルでは、ストリームが閉じられて例外がスローされるため、呼び出しinputLine = in.readLine()
が失敗します。