我想从文本文件中读取一些数据。这就是文本文件中数据的格式:
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”上迭代。我不知道为什么。
有人可以帮助我吗?
答案 0 :(得分:5)
您忘记阅读循环中的下一行,因此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")
。
答案 1 :(得分:4)
您阅读文件的方式是错误的
你读取了一次行,然后在循环期间根本没有修改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
}