ali_r
ali_r

Reputation: 19

Java - How to check if BufferedReader contains line break before running readLine command

I am trying to parse HTML from a website to get very specific data. The following method reads the source and outputs it as a string to be processed by other methods.

    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();

The problem that I'm having is that since I call this method multiple times with a different urlIn argument each time, sometimes the method gets stuck at the readLine command. I read that this is because readLine looks for a line break and if the BufferedReader object does not contain one for whatever reason, it will be stuck indefinitely.

Is there a way to check whether my BufferedReader object contains a line break before I run the readLine command. I tried using an if (in.toString().contains("\n")) but that always returns false. Alternatively, could I add a "\n" at the end of my Buffered Reader "in" object every time just so that the while loop would break and not hang up indefinitely?

Any help would be appreciated.

Upvotes: 2

Views: 3310

Answers (2)

SomeStudent
SomeStudent

Reputation: 3048

Okay, this here should be what you are looking for.

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();
}           

Read more: http://javarevisited.blogspot.com/2012/07/read-file-line-by-line-java-example-scanner.html#ixzz3g4RHvy6V

Edit, in your case, since it seems like you are doing webapp testing, I do believe WebDriverWait may work for your needs.

Upvotes: 2

H-Man
H-Man

Reputation: 81

This is not true. BufferedReader.readLine() will not block if the underlying stream has reached the end of input. It will return null. See http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine().

If your method is getting stuck there is another explanation.

Carefully check all of your exception handling and stream closing logic.

Upvotes: 1

Related Questions