问题:文件的内容都能读取到,读取之后我要存放到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(); }}