读取文本文件时无限循环
Infinite loop when reading a text file
我想从文本文件中读取一些数据。这是文本文件中数据的格式:
A,20, ,0
B,30, ,0
这是我的代码:
public ArrayList rechercherSalle()
{
String nom;
String ligne;
ArrayList<Salle> listeSalles = new ArrayList<Salle>();
Salle salle = new Salle();
try {
InputStream flux = new FileInputStream("salle.txt");
InputStreamReader lecture = new InputStreamReader(flux);
BufferedReader buff = new BufferedReader(lecture);
ligne = buff.readLine();
while (ligne != null) {
String[] objetSalle = ligne.split(",");
nom = objetSalle[0];
String capacite_maxString = objetSalle[1];
Integer capacite_max = Integer.parseInt(capacite_maxString);
String capacite_actuelleString = objetSalle[3];
Integer capacite_actuelle = Integer.parseInt(capacite_actuelleString);
String proprietaire = objetSalle[2];
salle = new Salle();
salle.setNom(nom);
salle.setCapacite_max(capacite_max);
salle.setCapacite_actuelle(capacite_actuelle);
if(proprietaire == null || proprietaire == "" || proprietaire == "null"){
salle.setEstReserve(Boolean.FALSE);
} else {
salle.setEstReserve(Boolean.FALSE);
}
listeSalles.add(salle);
}
buff.close();
} catch (Exception e) {
e.printStackTrace();
}
return listeSalles;
}
此代码导致 while 循环中的无限循环。并且循环只在第一行迭代"A"。不知道为什么。
有人可以帮助我吗?
您忘记阅读循环中的下一行,因此 ligne
永远不会成为循环中的 null
:
ligne = buff.readLine();
while (ligne != null) {
String[] objetSalle = ligne.split(",");
nom = objetSalle[0];
String capacite_maxString = objetSalle[1];
Integer capacite_max = Integer.parseInt(capacite_maxString);
String capacite_actuelleString = objetSalle[3];
Integer capacite_actuelle = Integer.parseInt(capacite_actuelleString);
String proprietaire = objetSalle[2];
salle = new Salle();
salle.setNom(nom);
salle.setCapacite_max(capacite_max);
salle.setCapacite_actuelle(capacite_actuelle);
if(proprietaire == null || proprietaire == "" || proprietaire.equals("null")) {
salle.setEstReserve(Boolean.FALSE);
} else {
salle.setEstReserve(Boolean.FALSE);
}
listeSalles.add(salle);
ligne = buff.readLine(); // add this
}
您的代码的另一个问题是将 String
与 ==
进行比较。将 proprietaire == "null"
更改为 proprietaire.equals("null")
。
你读取文件的方式不对。
您只读了一行,然后 ligne
对象在循环期间根本没有被修改。
所以你的代码应该是这样的:
String line;
while ((line = br.readLine()) != null) {
// process the line.
}
您所做的是:
String line = buff.readLine();
while (line != null) {
// process the line.
}
正如你所说的你是初学者,如果你发现 (line = br.readLine()) != null
条件复杂,那么你可以像这样编码:
String line = buff.readLine();
while (line != null) {
// process the line.
line = buff.readLine(); //it should last line
}
我想从文本文件中读取一些数据。这是文本文件中数据的格式:
A,20, ,0
B,30, ,0
这是我的代码:
public ArrayList rechercherSalle()
{
String nom;
String ligne;
ArrayList<Salle> listeSalles = new ArrayList<Salle>();
Salle salle = new Salle();
try {
InputStream flux = new FileInputStream("salle.txt");
InputStreamReader lecture = new InputStreamReader(flux);
BufferedReader buff = new BufferedReader(lecture);
ligne = buff.readLine();
while (ligne != null) {
String[] objetSalle = ligne.split(",");
nom = objetSalle[0];
String capacite_maxString = objetSalle[1];
Integer capacite_max = Integer.parseInt(capacite_maxString);
String capacite_actuelleString = objetSalle[3];
Integer capacite_actuelle = Integer.parseInt(capacite_actuelleString);
String proprietaire = objetSalle[2];
salle = new Salle();
salle.setNom(nom);
salle.setCapacite_max(capacite_max);
salle.setCapacite_actuelle(capacite_actuelle);
if(proprietaire == null || proprietaire == "" || proprietaire == "null"){
salle.setEstReserve(Boolean.FALSE);
} else {
salle.setEstReserve(Boolean.FALSE);
}
listeSalles.add(salle);
}
buff.close();
} catch (Exception e) {
e.printStackTrace();
}
return listeSalles;
}
此代码导致 while 循环中的无限循环。并且循环只在第一行迭代"A"。不知道为什么。
有人可以帮助我吗?
您忘记阅读循环中的下一行,因此 ligne
永远不会成为循环中的 null
:
ligne = buff.readLine();
while (ligne != null) {
String[] objetSalle = ligne.split(",");
nom = objetSalle[0];
String capacite_maxString = objetSalle[1];
Integer capacite_max = Integer.parseInt(capacite_maxString);
String capacite_actuelleString = objetSalle[3];
Integer capacite_actuelle = Integer.parseInt(capacite_actuelleString);
String proprietaire = objetSalle[2];
salle = new Salle();
salle.setNom(nom);
salle.setCapacite_max(capacite_max);
salle.setCapacite_actuelle(capacite_actuelle);
if(proprietaire == null || proprietaire == "" || proprietaire.equals("null")) {
salle.setEstReserve(Boolean.FALSE);
} else {
salle.setEstReserve(Boolean.FALSE);
}
listeSalles.add(salle);
ligne = buff.readLine(); // add this
}
您的代码的另一个问题是将 String
与 ==
进行比较。将 proprietaire == "null"
更改为 proprietaire.equals("null")
。
你读取文件的方式不对。
您只读了一行,然后 ligne
对象在循环期间根本没有被修改。
所以你的代码应该是这样的:
String line;
while ((line = br.readLine()) != null) {
// process the line.
}
您所做的是:
String line = buff.readLine();
while (line != null) {
// process the line.
}
正如你所说的你是初学者,如果你发现 (line = br.readLine()) != null
条件复杂,那么你可以像这样编码:
String line = buff.readLine();
while (line != null) {
// process the line.
line = buff.readLine(); //it should last line
}