我在下面有这个代码。基本上我从给定的URL获得输入。这个网站显示一个句子。每次我重新加载网站,它都会得到一个新的句子,依此类推。所以,我设法让它工作。现在我正在尝试在文本文件中编写句子。但有些事情是错的。它只写第一行而没有别的。我的代码出了什么问题?
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class ReadIp {
public static void main(String[] args) throws MalformedURLException, IOException,
InterruptedException {
ReadIp readIP = new ReadIp();
while (true) {
readIP.getIP();
Thread.sleep(2000);
}
}
BufferedReader buff;
InputStreamReader inStream;
String line;
URL url;
URLConnection urlConn;
FileWriter fileWriter ;
BufferedWriter bufferedWriter;
public ReadIp() throws IOException {
fileWriter = new FileWriter("myfile.txt", true);
bufferedWriter = new BufferedWriter(fileWriter);
}
public void getIP() throws MalformedURLException, IOException {
this.url = new URL("http://test.myrywebsite.co.uk");
this.urlConn = this.url.openConnection();
this.inStream = new InputStreamReader(this.urlConn.getInputStream());
this.buff = new BufferedReader(this.inStream);
try {
while ((this.line = this.buff.readLine()) != null)
{
System.out.println(this.line);
try {
this.bufferedWriter.write(this.line);
this.bufferedWriter.write("\n");
this.bufferedWriter.flush();
} catch (IOException e)
{
}
}
if (this.bufferedWriter != null)
{
this.bufferedWriter.close();
}
this.inStream.close();
}
catch (Exception ex)
{
}
}
}
非常感谢任何帮助。 谢谢。
答案 0 :(得分:5)
移动声明
writer.close();
从内部try catch块中删除,以便在将第一个条目写入文件后不关闭OutputStream
。这同样适用于InputStream
inStream.close();
答案 1 :(得分:0)
BufferedWriter正在构造函数中打开,并在getIp
中关闭。构造函数只调用一次,但每2秒调用一次getIp
来读取一个句子。因此BufferedWriter在第一行之后被关闭(而不是再次打开)。 getIp
的第二次调用尝试写第二句但BufferedWriter已关闭。这应该抛出一个被忽略的异常,因为catch块是空的。
永远不要将catch区块留空 - 如上面的 fgb 所写!
首先,至少在每个空捕获块中添加一个printStackTrace()
,例如:
catch (Exception ex) {
ex.printStackTrace();
}
所以你可以看看是否抛出异常......
我建议在方法BufferedWriter
中打开getIp
而不是构造函数;或者,如果它应该一直保持打开状态,请在另一个方法中关闭BufferedWriter
,在main
中的循环终止后调用