读取文本文件时无限循环

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
}