Java readline()跳过第二行

时间:2016-01-16 21:50:18

标签: java

我有一个我想阅读的问题文件,在阅读时,我想让它从答案中识别问题并打印出来,在每个问题之前都有一行“#”字符,代码保持不变出于某种原因跳过问题一?我在这里错过了什么?

以下是代码:

     try {
            // Open the file that is the first
            // command line parameter
            FileInputStream fstream = new FileInputStream(path);
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String strLine;
            strLine = br.readLine();
            System.out.println(strLine);
            // Read File Line By Line
            while ((strLine ) != null) {
                strLine = strLine.trim();

                if ((strLine.length()!=0) && (strLine.charAt(0)=='#' && strLine.charAt(1)=='#')) {

                    strLine = br.readLine();
                        System.out.println(strLine);
                        //questions[q] = strLine;

                }

                strLine = br.readLine();
            }

            // Close the input stream
            fstream.close();
           // System.out.println(questions[0]);

        } catch (Exception e) {// Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }

text file

2 个答案:

答案 0 :(得分:2)

我怀疑,您阅读的文件是带有BOM的UTF-8。

BOM是第一个字符之前的代码,有助于识别文本文件的正确编码。

BOM的问题在于它是不可见的并且扰乱了阅读。带有BOM的文本文件可以说不再是文本文件。特别是,如果您阅读第一行,则第一个字符不再是#,但它是不同的,因为它是字符BOM + #

尝试使用指定的显式编码加载文件。 Java可以在较新的版本中处理BOM,不记得究竟是哪一个。

BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));

否则,拿一个体面的文本编辑器,如记事本++,并将编码更改为UTF-8而不使用BOM或ANSI编码(yuck)。

答案 1 :(得分:0)

请注意,当您在while中输入if语句时,首先会strLine = br.readLine();覆盖初始化strline时读取的行。