读取文本文件时无限循环

时间:2017-06-22 06:11:18

标签: 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 {
        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”上迭代。我不知道为什么。

有人可以帮助我吗?

2 个答案:

答案 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
}