JAVA - 将句子写入文本文件

时间:2014-08-04 10:59:11

标签: java string bufferedreader filewriter bufferedwriter

我在下面有这个代码。基本上我从给定的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) 
    {
    }


}
}

非常感谢任何帮助。 谢谢。

2 个答案:

答案 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中的循环终止后调用