Java 读取文本文件时的无限循环
我想从文本文件中读取一些数据。以下是文本文件中数据的格式:Java 读取文本文件时的无限循环,java,buffer,inputstream,outputstream,Java,Buffer,Inputstream,Outputstream,我想从文本文件中读取一些数据。以下是文本文件中数据的格式: A,20, ,0 B,30, ,0 这是我的代码: public ArrayList rechercherSalle() { String nom; String ligne; ArrayList<Salle> listeSalles = new ArrayList<Salle>(); Salle salle = new Salle(); try { I
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;
}
public ArrayList rechercherSalle()
{
字符串名称;
弦线;
ArrayList ListSalles=新建ArrayList();
Salle Salle=新Salle();
试一试{
InputStream流量=新文件InputStream(“salle.txt”);
InputStreamReader讲座=新的InputStreamReader(流量);
BufferedReader buff=新的BufferedReader(讲座);
ligne=buff.readLine();
while(ligne!=null){
字符串[]objetSalle=ligne.split(“,”);
nom=objetSalle[0];
串电容_maxString=objetSalle[1];
整数capacity_max=Integer.parseInt(capacity_maxString);
串电容_actuelleString=objetSalle[3];
整数capacity_actuelle=Integer.parseInt(capacity_actuelleString);
字符串proprietaire=objetSalle[2];
salle=新salle();
赛特诺姆(诺姆);
所有设置电容最大值(电容最大值);
所有。设置电容器(电容器);
如果(proprietaire==null | | proprietaire==“”| | proprietaire==“null”){
salle.setEstReserve(Boolean.FALSE);
}否则{
salle.setEstReserve(Boolean.FALSE);
}
添加(salle);
}
buff.close();
}捕获(例外e){
e、 printStackTrace();
}
返回列表;
}
此代码在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
}
代码的另一个问题是将
字符串
与=
进行比较。将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())!=空
条件复杂,然后您可以编写如下代码:
String line = buff.readLine();
while (line != null) {
// process the line.
line = buff.readLine(); //it should last line
}