问题:文件的内容都能读取到,读取之后我要存放到tm(实体类)对象里面,最后放入mlist集合,可是读文件的时候有多少行就回创建多少个对象。比如:现在Mobiles.txt文件现有8行,在读取的时候便会创建8个对象,可实际上只要2个对象,然后把这2个对象放入到mlist集合中。因为每4行为一个对象,高手解决下....万分感谢!mobile_number=13787192029
card_number=423254234512345
available=N
type=SIMmobile_number=13787192039
card_number=423254234512345
available=Y
type=UIM
。。
               读取的目标文件:D:\Mobiles.txt
public void  test(){
String lineTxt="";                  
BufferedReader bf=null;
List<TMobiles> mlist =null;        //存放实体类的集合
TMobiles tm =null;                 //自定义的实体类while((lineTxt = bf.readLine()) != null)
{
tm = new TMobiles();
if((lineTxt.substring(0,4)).equals("mobi"))
{
tm.setMobile_number(lineTxt.substring(lineTxt.indexOf("=")+1));
}
else if((lineTxt.substring(0,4)).equals("card"))
{
tm.setCard_number(lineTxt.substring(lineTxt.indexOf("=")+1));
}
else if((lineTxt.substring(0,4)).equals("avai"))
{
        tm.setIs_available(lineTxt.substring(lineTxt.indexOf("=")+1));
}
else if((lineTxt.substring(0,4)).equals("type"));
{
tm.setMobile_type(lineTxt.substring(lineTxt.indexOf("=")+1));
}

  mlist.add(tm); }
}

解决方案 »

  1.   

    public void test(){
        String lineTxt="";   
        BufferedReader bf=null;
        List<TMobiles> mlist = new ArrayList<TMobiles>; //集合要new好一个对象
        TMobiles tm =null; //自定义的实体类
        while((lineTxt = bf.readLine()) != null) {
            if((lineTxt.substring(0,4)).equals("mobi")){ //遇到TMobiles类的开头数据才new
                tm = new TMobiles();
                mlist.add(tm); //同时add到mlist
                tm.setMobile_number(lineTxt.substring(lineTxt.indexOf("=")+1));
            } else if((lineTxt.substring(0,4)).equals("card")) {
                tm.setCard_number(lineTxt.substring(lineTxt.indexOf("=")+1));
            } else if((lineTxt.substring(0,4)).equals("avai")) {
                tm.setIs_available(lineTxt.substring(lineTxt.indexOf("=")+1));
            } else if((lineTxt.substring(0,4)).equals("type")) {
                tm.setMobile_type(lineTxt.substring(lineTxt.indexOf("=")+1));
            }
        }
    }
      

  2.   

    这个问题逻辑上你的代码都不正确的!  你的实体类里面应该是包括了号码,卡号,是否过期,类型这个四个属性!  但是你读取的时候读取一行就创建个对象,因为你每读一行就new了个对象!    这里应该加个判断,因为你的最后一行是type开头的,所以在创建对象这里需要判断是否为type="",2楼说的方法怕是回取到空值的!
      

  3.   

    十一真是无聊啊……
    楼主的问题主要是逻辑没处理好,加上有语法错误,参考下,具体见注释:import java.io.*;
    import java.util.*;// 模拟这个类,为编译通过
    class TMobiles {
    void setMobile_number(String arg) {
    }
    void setCard_number(String arg) {
    }
    void setIs_available(String arg) {
    }
    void setMobile_type(String arg) {
    }
    }public class ReadFile {
    // 设置所读文件的路径,这里为当前路径下的Mobiles.txt
    private static String file2ReadPath = "./Mobiles.txt";
    public static void test() {
    String lineTxt = null; 
    BufferedReader br = null;
    // 先构造mlist
    List<TMobiles> mlist = new ArrayList<TMobiles>();;
    TMobiles tm = null; try {
    // 打开流
    br = new BufferedReader(new FileReader(file2ReadPath), 1024);
    while ((lineTxt = br.readLine()) != null) {
    // 匹配mobile_number=xxx的行,以下类似
    if (lineTxt.matches("^\\s*mobile_number=\\d+\\s*$")) {
    // 碰到以mobile_number=xxx的行就创建这个对象
    System.out.println(lineTxt);
    tm = new TMobiles();
    tm.setMobile_number(lineTxt.substring(lineTxt.indexOf("=") + 1));
    // 直接放入mlist
    mlist.add(tm);
    } else if (lineTxt.matches("^\\s*card_number=\\d+\\s*$")) {
    System.out.println(lineTxt);
    tm.setCard_number(lineTxt.substring(lineTxt.indexOf("=") + 1));
    } else if (lineTxt.matches("^\\s*available=[YN]+\\s*$")) {
    System.out.println(lineTxt);
    tm.setIs_available(lineTxt.substring(lineTxt.indexOf("=") + 1));
    } else if (lineTxt.matches("^\\s*type=.*$")) {
    System.out.println(lineTxt);
    tm.setMobile_type(lineTxt.substring(lineTxt.indexOf("=") + 1));
    }
    }
    // 输出总共构造了多少个对象
    System.out.println("mlist.size() is: " + mlist.size());
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    // 关闭流
    if (br != null) {
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }
    public static void main(String[] args) {
    test();
    }
    }Mobiles.txt内容和你提供的一样,运行下看看:
    xxx$ java ReadFile 
    mobile_number=13787192029
    card_number=423254234512345
    available=N
    type=SIM
    mobile_number=13787192039
    card_number=423254234512345
    available=Y
    type=UIM
    mlist.size() is: 2
      

  4.   

    1楼和3楼的说法都会取到空值,因为在读取第一行的时候就存放到list集合中,其余的3个属性就是空值了。
    2楼的说法 如果碰到type="" 就创建对象,请问这个对象该在哪里创建.....毕竟type是处于最后一行,那么前面几行怎么办?   在线等待.........
      

  5.   


    import java.io.BufferedReader;
    import java.util.List;
    import java.io.IOException;
    import java.io.FileReader;
    import java.util.ArrayList;public class Testhaha {
      public Testhaha() {
      }  public static void main(String[] args) throws IOException {
        String lineTxt = "";
        List mlist = new ArrayList(); //存放实体类的集合
        TMobiles tm = null; //自定义的实体类
        BufferedReader bf = new BufferedReader(new FileReader("c:/Mobiles.txt"));
        while ( (lineTxt = bf.readLine()) != null) {
          if ("".equals(lineTxt)) {//碰到空行 continue
            continue;
          }
          if ( (lineTxt.substring(0, 4)).equals("mobi")) {
            tm = new TMobiles();  //按顺序读的文件 在第一次读到 mobi 时 初始化一次
            tm.setMobile_number(lineTxt.substring(lineTxt.indexOf("=") + 1));
            mlist.add(tm);  //将该对象加入到集合中
          }
          else if ( (lineTxt.substring(0, 4)).equals("card")) {
            tm.setCard_number(lineTxt.substring(lineTxt.indexOf("=") + 1));
          }
          else if ( (lineTxt.substring(0, 4)).equals("avai")) {
            tm.setAvailable(lineTxt.substring(lineTxt.indexOf("=") + 1));
          }
          else if ( (lineTxt.substring(0, 4)).equals("type")) {
            tm.setType(lineTxt.substring(lineTxt.indexOf("=") + 1));
          }
        }    System.out.println("mlist.size()========" + mlist.size());
        System.out.println("---------------------------------------------------");
        for (int i = 0; i < mlist.size(); i++) {
          TMobiles tms = new TMobiles();
          tms = (TMobiles) mlist.get(i);
          System.out.println("mobile_number:===" + tms.getMobile_number());
          System.out.println("card_number:===" + tms.getCard_number());
          System.out.println("available:===" + tms.getAvailable());
          System.out.println("type:===" + tms.getType());
          System.out.println("---------------------------------------------------");
        }
      }
    }class TMobiles {
      String mobile_number = "";
      String card_number = "";
      String available = "";
      String type = "";  public String getCard_number() {
        return card_number;
      }  public String getMobile_number() {
        return mobile_number;
      }  public String getType() {
        return type;
      }  public String getAvailable() {
        return available;
      }  public void setAvailable(String available) {
        this.available = available;
      }  public void setCard_number(String card_number) {
        this.card_number = card_number;
      }  public void setType(String type) {
        this.type = type;
      }  public void setMobile_number(String mobile_number) {
        this.mobile_number = mobile_number;
      }
    }
    读取文件内容:mobile_number=13787192029
    card_number=423254234512345
    available=N
    type=SIMmobile_number=13787192039
    card_number=423254234512345
    available=Y
    type=UIM
    。。
      

  6.   

    符:运行结果mlist.size()========2
    ---------------------------------------------------
    mobile_number:===13787192029
    card_number:===423254234512345
    available:===N
    type:===SIM
    ---------------------------------------------------
    mobile_number:===13787192039
    card_number:===423254234512345
    available:===Y
    type:===UIM
    ---------------------------------------------------
      

  7.   

    不会取到空属性的,先给对象加入属性再加入集合和先加入集合再加入对象属性是一样的,你没理解集合list的含义,2楼的代码没问题(写的很简洁,加上continue也是多余)