从String.split创建数组时出现NullPointerException



我正在读取一个文件,文件的每行并不总是具有相同数量的元素。有些线有2个元素,而其他可能有4或6个元素。所以我要做的是创建一个临时数组基于这一行的分割方式。这里的问题是,我得到了一个java.lang.NullPointerException for String[] currentLine。但是程序仍然读取currentLine[1]的内容:

        boolean needData = true;    
        String path = "foo/" + filename + ".bar";
        File dataFile = null;
        BufferedReader bufReader = null;
        String line = null;
        if (needData) // always true
        {
            try
            {
                dataFile = new File(path);
                FileReader fr = new FileReader(dataFile);
                bufReader = new BufferedReader(fr);
                if (file.exists())
                {
                    while(true)
                    {
                        line = bufReader.readLine();
                        String[] currentLine = line.split(" "); // Error
                        String lineStartsWith = currentLine[0];
                        switch(lineStartsWith)
                        {
                          case "Name:" :
                              System.out.println(currentLine[1]);
                          break;
                        }
                    } // end while loop
                }
                bufReader.close();
            }
            catch (FileNotFoundException e)
            {
                System.err.println("Couldn't load " + filename + ".bar");
                e.printStackTrace();
            } catch (IOException e)
            {
                e.printStackTrace();
            }
        }

BufferedReaderreadLine方法最终将返回null,表示没有更多的输入可读。

的回报:

包含行内容的字符串,不包括任何行终止字符,如果已到达流的结尾,则为空

但是,您已经设置了一个无限循环。您正在尝试处理一个不存在的行。

检查while循环条件下line是否为null。这将在最后一行被处理完后停止循环。

while( (line = bufReader.readLine()) != null)
{
    // Remove readLine call here
    // The rest of the while loop body is the same

public String readLine() of Buffered Reader的文档说:

包含行内容的字符串,不包括任何行终止字符,或null(如果已到达流的末尾

)

https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html readLine ()

所以,你只是击中了文件的结尾,因为你从来没有离开while

你需要改变你的循环:

while((line = bufReader.readLine()) != null )
{
  String[] currentLine = line.split(" "); // Error
  String lineStartsWith = currentLine[0];
  switch(lineStartsWith)
  {
  case "Name:" :
  System.out.println(currentLine[1]);
  break;
  }
}

相关内容

  • 没有找到相关文章

最新更新