Java - 如何在运行readLine命令之前检查BufferedReader是否包含换行符

时间:2015-07-16 15:41:43

标签: java bufferedreader readline

我正在尝试从网站解析HTML以获取非常具体的数据。以下方法读取源并将其作为字符串输出以供其他方法处理。

    StringBuilder source = new StringBuilder();
    URL url = new URL(urlIn);
    URLConnection spoof;
    spoof = url.openConnection();
    spoof.setRequestProperty( "User-Agent", "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; H010818)" );

    BufferedReader in = new BufferedReader(new InputStreamReader(spoof.getInputStream()));
    String strLine = "";

    while ((strLine = in.readLine()) != null){
        source.append(strLine);
    }

    return source.toString();

我遇到的问题是,由于每次使用不同的urlIn参数多次调用此方法,有时候方法会在readLine命令中卡住。我读到这是因为readLine查找换行符,如果BufferedReader对象由于某种原因不包含一个,它将无限期地被卡住。

在运行readLine命令之前,有没有办法检查我的BufferedReader对象是否包含换行符。我尝试使用if (in.toString().contains("\n")),但总是返回false。或者,我可以添加一个" \ n"在我的Buffered Reader" in"每次只是为了让while循环破坏而不是无限期挂起?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

好的,这里应该是您正在寻找的。

fis = new FileInputStream("C:/sample.txt");
reader = new BufferedReader(new InputStreamReader(fis));

System.out.println("Reading File line by line using BufferedReader");

String line = reader.readLine();
while(line != null){
    System.out.println(line);
    line = reader.readLine();
}           

了解详情:http://javarevisited.blogspot.com/2012/07/read-file-line-by-line-java-example-scanner.html#ixzz3g4RHvy6V

编辑,在您的情况下,因为您似乎正在进行webapp测试,我相信WebDriverWait可能会满足您的需求。

答案 1 :(得分:1)

事实并非如此。如果基础流已到达输入结束,BufferedReader.readLine()将不会阻止。它将返回null。请参阅http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()

如果您的方法陷入困境,还有另一种解释。

仔细检查所有异常处理和流关闭逻辑。