缓冲读卡器..输出不正确

时间:2014-01-26 04:23:15

标签: java file

我有一个显示文件内容的代码。我尝试用两种不同的方式做到这一点。但是,我没有得到第一种方式的答案,而我得到了第二种方式的答案。我想知道你不是第一个案件的ans? 在第一种情况下,我使用while循环检查我的文件是否为空...我没有得到我的文件的输出...在第二种情况下,我使用函数传递相同的while循环,我得到结果

                line++;

            } 

 l = line;
        System.out.println("lines are "+ l);
    String[] text =new String[l];

 for(i=0;i<l;i++)
    {
        text[i]=b.readLine();//Reads a line of text
        System.out.println("text is "+text[i]);
        //System.out.print("txt "+ text[i]);
       }

        return null;

}

    }

输出:= 线是4 text为null text为null text为null text为null

代码2 -

public class JavaApplication9 {

    public static void main(String[] args) throws IOException {
        // TODO code application logic here
 new FileReader(path);ception ex) {
            Logger.getLogger(ReadMe.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ReadMe.class.getName()).log(Level.SEVERE, null, ex);
        } return ln;
}

    }

Output-- 第4行 我在这里获取文件的内容

3 个答案:

答案 0 :(得分:0)

在你的第一个例子中,你正在读取文件,直到readLine()返回null,这意味着你处于文件末尾(EOF),然后你继续阅读它,你会惊讶于readLine()继续返回null ,这仍然意味着你继续参加EOF。不要对此感到惊讶。

在你的第二个例子中,你打开文件两次,一次计算行数,一次读取它们。

两者都是不良做法的例子。而不是一个数组,它让你知道通知中的行数,你应该使用某种形式的List来保存这些行。实际上你应该做的是一次处理一行文件,而不是将其全部读入内存,这不会扩展到大文件,并增加了延迟。

答案 1 :(得分:0)

嗯,对于#1,你有空,因为

while((lin=b.readLine())!=null)
{   
   line++;
} 

消耗了所有输入流。当你尝试过

text[i]=b.readLine();

你的读者已经在文件的最后,所以没有什么可读的。

对于#2,你要声明两个FileReader,一个在内部,另一个在rlh之外。这就是为什么它似乎有效。

答案 2 :(得分:-1)

使用BufferedReader进行文件阅读的正确方法......

    BufferedReader br = new BufferedReader(new FileReader(new File("filepath")));
    String s;
    while( (s=br.readLine()) != null ){
        //  process your string like ... 
        System.out.println(s);
    }