小小逻辑,烦了我几个小时....求教高手!
问题:文件的内容都能读取到,读取之后我要存放到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);
}
}
[解决办法]
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)); } }}
[解决办法]
十一真是无聊啊……
楼主的问题主要是逻辑没处理好,加上有语法错误,参考下,具体见注释:
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(); }}
[解决办法]
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。。。。。