尝试逐行读取文件时出现NullPointerException(Java)?

时间:2013-09-01 15:48:47

标签: java file path bufferedreader

我正在尝试逐行读取文件,但每次运行程序时,我都会在行spaceIndex = line.indexOf(" ");处得到NullPointerException,这显然意味着该行为空。然而。我知道我正在使用的文件正好有7行(即使我打印numLines的值,我得到值7.然而当我尝试读取一行时,我仍然得到nullpointerexception进入我的字符串。

// File file = some File I take in after clicking a JButton

Charset charset = Charset.forName("US-ASCII");
try (BufferedReader reader = Files.newBufferedReader(file.toPath(), charset)) {

    String line = "";

    int spaceIndex;
    int numLines = 0;
    while(reader.readLine()!=null) numLines++;

    for(int i = 0; i<numLines; i++) {
        line = reader.readLine();
        spaceIndex = line.indexOf(" ");
        System.out.println(spaceIndex);
}

PS :(我实际上并没有使用这段代码打印空间的索引,我替换了循环中的代码,因为它有很多,而且会让它读起来更长)

如果我要以错误的方式阅读这些内容,那么如果有人可以提出另一种方式,这将是很好的,因为到目前为止,我尝试的每一种方式都给了我同样的例外。感谢。

2 个答案:

答案 0 :(得分:5)

当你开始for循环时,阅读器已经在文件的末尾 (来自while循环)。

因此,readLine()将始终返回null

你应该摆脱for循环,并在第一次阅读文件时在while循环中完成所有工作。

答案 1 :(得分:1)

您有两种选择。

首先,您可以通过以下方式读取文件中的行数:

LineNumberReader  lnr = new LineNumberReader(new FileReader(new File("File1")));
lnr.skip(Long.MAX_VALUE);
System.out.println(lnr.getLineNumber());

然后立即阅读文件:

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

这第一个选项是另一种选择(在我看来,更酷)这样做的方式。

第二个选项(可能更明智)是在while循环中一次完成所有操作:

while((line = reader.readLine())!=null) 
{
    numLines++;
    spaceIndex = line.indexOf(" ");
    System.out.println(spaceIndex);
}