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
}