【问题标题】:Infinite loop when reading a text file [closed]读取文本文件时的无限循环[关闭]
【发布时间】:2017-11-25 06:20:18
【问题描述】:

我想从文本文件中读取一些数据。这是文本文件中数据的格式:

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

有人可以帮我吗?

【问题讨论】:

    标签: java buffer inputstream outputstream


    【解决方案1】:

    您忘记阅读循环内的下一行,因此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
            }
    

    您的代码的另一个问题是将Strings 与== 进行比较。将proprietaire == "null" 更改为proprietaire.equals("null")

    【讨论】:

      【解决方案2】:

      你读取文件的方式不对。
      您读了一次,然后 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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-27
        • 2013-08-07
        • 1970-01-01
        相关资源
        最近更新 更多