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执行了任何操作?