日期:2014-05-20  浏览次数:20712 次

小小逻辑,烦了我几个小时....求教高手!
问题:文件的内容都能读取到,读取之后我要存放到tm(实体类)对象里面,最后放入mlist集合,可是读文件的时候有多少行就回创建多少个对象。比如:现在Mobiles.txt文件现有8行,在读取的时候便会创建8个对象,可实际上只要2个对象,然后把这2个对象放入到mlist集合中。因为每4行为一个对象,高手解决下....万分感谢!

mobile_number=13787192029
card_number=423254234512345
available=N
type=SIM

mobile_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);

 }
}

------解决方案--------------------
Java code
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));
        }
    }
}

------解决方案--------------------
十一真是无聊啊……
楼主的问题主要是逻辑没处理好,加上有语法错误,参考下,具体见注释:
Java code

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();
    }
}