缓冲读取器未读取完整的文本文件

4
                String str = "";
            try {

                BufferedReader br = new BufferedReader(new FileReader(file.getAbsolutePath()));
                while (br.readLine() != null) {
                    str += br.readLine();
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            String replace = str.replace("HTTP Request: ", "")
                    .replace("Resource URL: ","")
                    .replace("Attribute\t\tDescription", "| Attribute | Type | Description |<P>|----|----|<P>")
                    .replace("Data Type | Max Length | Requirement |", "")
                    .replace("N/A", "Object")
                    .replace("String", "| String")
                    .replace("255 |", "")
                    .replace("Required", "**Required**")
                    .replace("Optional", "**Optional**")
                    .replace("Request Example <P>", "")
                    .replace("Response Example <P>", "Nothing");

            PrintWriter pw = null;

BufferedReader忽略前三行,读取/转换其余部分。不确定问题所在。我尝试了其他的StackOverflow解决方案,但似乎都无法解决!


你检查了 str 或者 replace 的内容吗? - Andre Holzner
是的,我使用了sysout打印了str,但它没有打印前三行。 - Suhail Prasathong
3个回答

7
问题出在这里:
while (br.readLine() != null)

当您检查br.readLine()不为空时,您已经读取了该行。为了解决这个问题,您可以尝试以下操作:

String line = br.readLine();
while (line != null){
    str +=line;
    line = br.readLine();
}

@Suhail Prasathong,我很高兴能够帮到你,但请记得接受一个解决方案来关闭问题,它不一定要是我的。 - theVoid

2

在处理br.readLine()的返回值时,您不仅需要检查其返回值,还需要妥善处理它。以下是常见代码:

StringBuider buffer = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(file.getAbsolutePath()))) {
    String line;
    while((line = br.readLine()) != null) {
        buffer.append(line);
    }
}

0

theVoid已经说明了问题并提供了解决方案。

在条件语句是迭代函数的情况下,我总是更喜欢使用

do{
    //task
    //Iterate and store result in var, like in your case
    var = br.readLine();
}while(var != null/*check on var rather than executing iteration*/);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接