繁体   English   中英

JAVA-将句子写入文本文件

[英]JAVA - Writing sentences to textfile

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


}
}

任何帮助将不胜感激。 谢谢。

移动陈述

writer.close();

从内部try catch块中移出,这样您就不会在将第一个条目写入文件后关闭OutputStream 这同样适用于InputStream

inStream.close();

BufferedWriter在构造函数中打开,并在getIp中关闭。 构造函数仅被调用一次,但是getIp每2秒被调用以读取一个句子。 因此,BufferedWriter在第一行之后将关闭(并且不会再次打开)。 getIp的第二次调用尝试编写第二句,但BufferedWriter已关闭。 这应该引发一个异常,因为catch块为空,所以将其忽略。

切勿将捕获块留空 -如fgb上面所述!

首先,至少向每个空的catch块添加一个printStackTrace() ,例如:

    catch (Exception ex) {
        ex.printStackTrace();
    }

这样就可以查看是否引发了异常...

我建议在getIp方法而不是构造函数中打开BufferedWriter 或者,如果它应该一直保持打开状态,请使用其他方法关闭BufferedWriter ,该方法在main的循环终止后调用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM