首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

小小逻辑,烦了小弟我几个小时.求教高手

2012-01-26 
小小逻辑,烦了我几个小时....求教高手!问题:文件的内容都能读取到,读取之后我要存放到tm(实体类)对象里面,

小小逻辑,烦了我几个小时....求教高手!
问题:文件的内容都能读取到,读取之后我要存放到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();    }} 


[解决办法]

Java code
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=13787192029card_number=423254234512345available=Ntype=SIMmobile_number=13787192039card_number=423254234512345available=Ytype=UIM。。。。。 

热点排行