java文件读取行返回null
我试图用Java创建一个预订系统,但是每次我运行这个程序时,while循环(如下所示)都会直接跳到末尾,就像读取的行是空的一样java文件读取行返回null,java,null,readline,filereader,Java,Null,Readline,Filereader,我试图用Java创建一个预订系统,但是每次我运行这个程序时,while循环(如下所示)都会直接跳到末尾,就像读取的行是空的一样 //hardcoded file path - needs to be changed when program moved String fileName = "C:\\Users\\BOO\\Desktop\\SystemsSoftwareBookingsystem\\FilmData.txt"; String
//hardcoded file path - needs to be changed when program moved
String fileName = "C:\\Users\\BOO\\Desktop\\SystemsSoftwareBookingsystem\\FilmData.txt";
String line = null;
int readInt = 0;
float readFloat = 0;
int item_counter = 0;
try
{
BufferedReader bufferedReaderF = new BufferedReader(new FileReader(new File(fileName)));
while ((line = bufferedReaderF.readLine()) != null)
{
Film tmpFilm = new Film();
switch (item_counter)
{
case 0:
{
line = bufferedReaderF.readLine();
tmpFilm.name = line;
item_counter++;
break;
}
case 1:
{
readInt = bufferedReaderF.read();
tmpFilm.seatsTotal = readInt;
item_counter++;
break;
}
case 2:
{
readInt = bufferedReaderF.read();
tmpFilm.seatsAvailable = readInt;
item_counter++;
break;
}
case 3:
{
readInt = bufferedReaderF.read();
tmpFilm.price = readFloat;
item_counter++;
break;
}
case 4:
{
readInt = bufferedReaderF.read();
tmpFilm.showingTime = readFloat;
item_counter++;
break;
}
case 5:
{
readInt = bufferedReaderF.read();
tmpFilm.day = readInt;
item_counter++;
break;
}
case 6:
{
readInt = bufferedReaderF.read();
tmpFilm.month = readInt;
item_counter++;
break;
}
case 7:
{
readInt = bufferedReaderF.read();
tmpFilm.year = readInt;
item_counter = 0;
break;
}
}
line = bufferedReaderF.readLine();
server.filmList.add(tmpFilm);
}
bufferedReaderF.close();
} catch (FileNotFoundException ex)
{
System.out.println("Unable to open file '" + fileName + "'");
} catch (IOException ex)
{
System.out.println("Error reading file '" + fileName + "'");
}
}
}`
如有任何想法/帮助,将不胜感激
根据请求编辑while循环中添加的其余代码
编辑这里是我正在读取的文件
Film 1
10
10
5.00
10.30
Wednesday 23rd
July
2013
除去-
line = bufferedReaderF.readLine();
并在循环中读取-
while ((line = bufferedReaderF.readLine()) != null)
检查文件是否为空。您是否可以同时使用内部代码更新您的问题
基于您的编辑-
你忽略了你正在读的东西。应该是这样的-
switch (item_counter)
{
case 0:
{
tmpFilm.name = line;
item_counter++;
break;
}
case 1:
{
tmpFilm.seatsTotal = Integer.parseInt(line);
item_counter++;
break;
}
...etc...
除去-
line = bufferedReaderF.readLine();
并在循环中读取-
while ((line = bufferedReaderF.readLine()) != null)
检查文件是否为空。您是否可以同时使用内部代码更新您的问题
基于您的编辑-
你忽略了你正在读的东西。应该是这样的-
switch (item_counter)
{
case 0:
{
tmpFilm.name = line;
item_counter++;
break;
}
case 1:
{
tmpFilm.seatsTotal = Integer.parseInt(line);
item_counter++;
break;
}
...etc...
我不知道这是否与问题有关,但您需要将
中断开关中每个代码序列后的code>语句。否则,如果说item\u counter
为0,它将执行0的代码,然后失败并执行1的代码,然后执行2的代码,等等。我不知道这是否与问题有关,但您需要将中断开关中每个代码序列后的code>语句。否则,如果说item\u counter
为0,它将执行0的代码,然后执行1的代码,然后执行2的代码,以此类推。试试这个
BufferedReader bufferedReaderF = new BufferedReader(new FileReader(new File(fileName)));
line = bufferedReaderF.readLine();
while (line != null)
{
Film tmpFilm = new Film();
switch (item_counter)
{
case 0:
{
// line = bufferedReaderF.readLine();
tmpFilm.name = line;
item_counter++;
break;
}
case 1:
{
readInt=Integer.parseInt(line);
tmpFilm.seatsTotal = readInt;
item_counter++;
break;
}
case 2:
{
readInt = Integer.parseInt(line);
tmpFilm.seatsAvailable = readInt;
item_counter++;
break;
}
case 3:
{
readFloat=Float.parseFloat(line);
tmpFilm.price = readFloat;
item_counter++;
break;
}
case 4:
{
readFloat=Float.parseFloat(line);
tmpFilm.showingTime = readFloat;
item_counter++;
break;
}
case 5:
{
line=line.replaceAll("\\D","");
readInt = Integer.parseInt(line);
tmpFilm.day = readInt;
item_counter++;
break;
}
case 6:
{
readInt = Integer.parseInt(GregorianCalendar.class.getField(line.toUpperCase()).get(line))+1;
tmpFilm.month = readInt;
item_counter++;
break;
}
case 7:
{
readInt = Integer.parseInt(line);
tmpFilm.year = readInt;
item_counter = 0;
}
}
line = bufferedReaderF.readLine();
server.filmList.add(tmpFilm);
}
试试这个
BufferedReader bufferedReaderF = new BufferedReader(new FileReader(new File(fileName)));
line = bufferedReaderF.readLine();
while (line != null)
{
Film tmpFilm = new Film();
switch (item_counter)
{
case 0:
{
// line = bufferedReaderF.readLine();
tmpFilm.name = line;
item_counter++;
break;
}
case 1:
{
readInt=Integer.parseInt(line);
tmpFilm.seatsTotal = readInt;
item_counter++;
break;
}
case 2:
{
readInt = Integer.parseInt(line);
tmpFilm.seatsAvailable = readInt;
item_counter++;
break;
}
case 3:
{
readFloat=Float.parseFloat(line);
tmpFilm.price = readFloat;
item_counter++;
break;
}
case 4:
{
readFloat=Float.parseFloat(line);
tmpFilm.showingTime = readFloat;
item_counter++;
break;
}
case 5:
{
line=line.replaceAll("\\D","");
readInt = Integer.parseInt(line);
tmpFilm.day = readInt;
item_counter++;
break;
}
case 6:
{
readInt = Integer.parseInt(GregorianCalendar.class.getField(line.toUpperCase()).get(line))+1;
tmpFilm.month = readInt;
item_counter++;
break;
}
case 7:
{
readInt = Integer.parseInt(line);
tmpFilm.year = readInt;
item_counter = 0;
}
}
line = bufferedReaderF.readLine();
server.filmList.add(tmpFilm);
}
你确定该文件不是空的吗?你确定该文件不是空的吗?底线不可编译,它需要是,而((line=bufferedReaderF.readLine())!=null){….}
@JimGarrison-他的变量名是“bufferedReaderF”。我已经恢复了编辑;然而,这个答案似乎并没有解决实际问题。编辑建议,如果不加上删除循环末尾的额外读取,将导致跳过备用输入行。我已尝试进行这些更改,但不幸的是,在某些情况下仍然无法工作reason@JimGarrison-在进行相关编辑之前给出了答案…同时,由于我在中的要求,进行了相关编辑回答..底线没有编译,它需要而((line=bufferedReaderF.readLine())!=null){..}
@JimGarrison-他的变量名是“bufferedReaderF”。我已经恢复了编辑;然而,这个答案似乎并没有解决实际问题。编辑建议,如果不加上删除循环末尾的额外读取,将导致跳过备用输入行。我已尝试进行这些更改,但不幸的是,在某些情况下仍然无法工作reason@JimGarrison-在进行相关编辑之前给出了答案…同时,由于我在中的要求,进行了相关编辑回答..谢谢你指出这一点-我现在已经解决了,但不是问题的根源-谢谢你指出这一点-我现在已经解决了,但不是问题的根源