问题:文件的内容都能读取到,读取之后我要存放到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); }
}
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); }
}
解决方案 »
- 亲们~现在eclipse的struts2插件用的是什么,如何下载和安装?
- 怎样变大jtable编辑状态时候的字体??高手来
- 通过路径下载txt文件韩文出现乱码问题!!!
- 点击了我的java编程练习-编程练习-第1章-第1题之后,JEditorPane怎么不显示相应的内容?
- SpringIOC中集合类型的装配问题
- 在PO 和ActionForm之间传递数据?
- Spring框架应用问题,今天有点晕.在线等待...
- 哪位高手介绍一下用JDBC2.0的REF操作数据库的知识。最好举个例子
- 谁能详细讲解一下--------web应用的目录结构------------100分!!!!
- JDK 与 J2SDK 的区别
- 怎么获取struts *.do的*?
- 怎么获取label的值呢?
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();
}
}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
2楼的说法 如果碰到type="" 就创建对象,请问这个对象该在哪里创建.....毕竟type是处于最后一行,那么前面几行怎么办? 在线等待.........
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
。。
---------------------------------------------------
mobile_number:===13787192029
card_number:===423254234512345
available:===N
type:===SIM
---------------------------------------------------
mobile_number:===13787192039
card_number:===423254234512345
available:===Y
type:===UIM
---------------------------------------------------