Java 使用BufferedReader取消引用可能的空指针

Java 使用BufferedReader取消引用可能的空指针,java,Java,我有一段代码: ... BufferedReader reader= new BufferedReader(new FileReader(file)); while ((line = reader.readLine()) != null) { // Do stuff... } reader.close(); .... BufferedReader reader2= new BufferedReader(new FileReader(file)); while ((line =

我有一段代码:

...
BufferedReader reader= new BufferedReader(new FileReader(file));

while ((line = reader.readLine()) != null) {
      // Do stuff...
}
reader.close();

....

BufferedReader reader2= new BufferedReader(new FileReader(file));

while ((line = reader2.readLine()) != null) { // Here I get a "Dereferencing possible null pointer" warning!
      // Do stuff...
}
reader2.close();
...
如果我尝试执行它,我会在
((line=reader2.readLine())!=null)
处得到一个NullPointerException。我不明白的是为什么
reader2
的声明返回
null
。这是否与我试图在同一个文件上打开两个
BufferedReaders
有关

你知道为什么会这样吗

编辑:完整代码:

    BufferedReader brFileToAdjust = new BufferedReader(new FileReader(fileToAdjust));
    String line;
    List<String> customersToAdjust = new ArrayList<String>();
    int lineNo = 0;

    while ((line = brFileToAdjust.readLine()) != null) {

        if (lineNo != 0) { // Do not do this for the first line.:
            String[] data = line.split("\t");
            if (!customersToAdjust.contains(data[0])) {
                customersToAdjust.add(data[0]);
            }
        }
        lineNo++;
    }

    brFileToAdjust.close();
    BufferedReader brFileToAdjust2 = new BufferedReader(new FileReader(fileToAdjust));

    for (String customer : customersToAdjust) {
        boolean newCustomer = true;
        String customerTransactions[][] = new String[999][6];
        String outputCustomerTransactions[][] = new String[999][15];
        lineNo = 0;
        int i = 0;
        while ((line = brFileToAdjust2.readLine()) != null) {
              ...
        }
    }
    brFileToAdjust2.close();
BufferedReader brFileToAdjust=newbufferedreader(newfilereader(fileToAdjust));
弦线;
List customersToAdjust=new ArrayList();
int lineNo=0;
而((line=brFileToAdjust.readLine())!=null){
如果(lineNo!=0){//请不要对第一行执行此操作:
String[]data=line.split(“\t”);
如果(!customersToAdjust.contains(数据[0])){
customersToAdjust.add(数据[0]);
}
}
lineNo++;
}
brFileToAdjust.close();
BufferedReader brFileToAdjust2=新的BufferedReader(新文件读取器(fileToAdjust));
for(字符串客户:customersToAdjust){
布尔值newCustomer=true;
字符串customerTransactions[][]=新字符串[999][6];
字符串outputCustomerTransactions[][]=新字符串[999][15];
lineNo=0;
int i=0;
而((line=brFileToAdjust2.readLine())!=null){
...
}
}
brFileToAdjust2.close();

如果
reader2
为空,则该行上只能有一个NPE。根据你的代码,我看不出这是怎么可能的。你能发布准确的stacktrace吗?根据您提供的当前信息,这是不可能的。一定是出了什么问题。另外,这是一个异常还是一个IDE警告?这里的示例中肯定缺少一些东西。我已经尝试过你的示例,它在我的本地计算机上正确运行。文件在第一次使用、移动或删除时不会被使用、移动或删除。第一个while只包含读取文件的所有行和更改一些变量。我将用完整的代码更新这个问题,让大家看看。在while循环中,您只需添加一个省略号。。。您是否对循环中的brFileToAdjust2执行了任何操作?