大家在做J2EE开发时数据存储一般是放在数据库中进行,在开发手机应用时用J2ME技术存储数据的方式便会用到RMS,RMS具体细节在网上GOOGLE下.这里直接贴代码.
RMS存储数据方式是以字节流形式实现的,这里进行封装,使其操作像数据库表形式一样.
建立一个包含以下字段的表
int index;
String name;
String fileUrl;
int picSize;
int textSize;
String other;
第一步:TextResBean 类封装我用到的字段数据
public class TextResBean {
private int index;
private String name;
private String fileUrl;
private int picSize;
private int textSize;
private String other;
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFileUrl() {
return fileUrl;
}
public void setFileUrl(String fileUrl) {
this.fileUrl = fileUrl;
}
public int getPicSize() {
return picSize;
}
public void setPicSize(int picSize) {
this.picSize = picSize;
}
public int getTextSize() {
return textSize;
}
public void setTextSize(int textSize) {
this.textSize = textSize;
}
public String getOther() {
return other;
}
public void setOther(String other) {
this.other = other;
}
public TextResBean() {
}
public TextResBean(int index, String name, String fileUrl, int picSize,
int textSize, String other) {
super();
this.index = index;
this.name = name;
this.fileUrl = fileUrl;
this.picSize = picSize;
this.textSize = textSize;
this.other = other;
}
public TextResBean(byte[] rec) {
initPlayListBean(rec); // 读取RMS内容的构造函数
}
public byte[] toBytes() { // 写成字节
byte[] data = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(index);
dos.writeUTF(name);
dos.writeUTF(fileUrl);
dos.writeInt(picSize);
dos.writeInt(textSize);
dos.writeUTF(other);
data = baos.toByteArray();
baos.close();
dos.close();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
public void initPlayListBean(byte[] rec) { // 从字节读取内容
ByteArrayInputStream bais = new ByteArrayInputStream(rec);
DataInputStream dis = new DataInputStream(bais);
try {
index = dis.readInt();
name = dis.readUTF();
fileUrl = dis.readUTF();
picSize = dis.readInt();
textSize = dis.readInt();
other = dis.readUTF();
} catch (Exception e) {
e.printStackTrace();
}
}
}
第二步:TextMusicResRMS类RMS操作封装
public class TextMusicResRMS {
private static TextMusicResRMS PLRMS = new TextMusicResRMS();
private RecordStore rs;
public static TextMusicResRMS getInstance() {
if (PLRMS == null) {
PLRMS = new TextMusicResRMS();
}
return PLRMS;
}
private TextMusicResRMS() {
}
public void openRS(String rsname) {
try {
rs = RecordStore.openRecordStore(rsname, true);
} catch (Exception e) {
System.out.println("打开记录异常");
}
}
public void closeRS() {
try {
rs.closeRecordStore();
} catch (Exception e) {
System.out.println("关闭记录异常");
}
}
public boolean addRecord(String rsname, String name, String fileUrl,
int picSize, int textSize, String other) {
boolean success = false;
openRS(rsname);
try {
int index = rs.getNumRecords() + 1;
TextResBean plb = new TextResBean(index, name, fileUrl, picSize,
textSize, other);
byte[] data = plb.toBytes();
rs.addRecord(data, 0, data.length);
success = true;
} catch (Exception e) {
e.printStackTrace();
System.out.println("添加记录异常");
}
closeRS();
return success;
}
public int getNumOfRecords() {// 得到RMS中记录的条数
try {
int x = rs.getNumRecords();
return x;
} catch (Exception e) {
System.out.println("获取记录总数异常");
return 0;
}
}
public TextResBean[] getRecords(String rsname) {// 取得RMS中的所有记录
openRS(rsname);
TextResBean[] result = {};
try {
rs.enumerateRecords(null, null, false);
result = new TextResBean[rs.getNumRecords()];
for (int i = 0; i < result.length; i++) {
TextResBean plb = new TextResBean(rs.getRecord(getId(i + 1)));
result[i] = plb;
}
} catch (Exception e) {
System.out.println("取得所有记录异常" + e.getMessage());
}
closeRS();
return result;
}
public TextResBean getRecord(int j) {// 根据记录编号(参数 int j)取得一条记录
TextResBean result = new TextResBean();
try {
rs.enumerateRecords(null, null, false);
result = new TextResBean(rs.getRecord(getId(j)));
} catch (Exception e) {
e.printStackTrace();
System.out.println("根据编号取记录异常" + e.getMessage());
}
return result;
}
public int getId(int index) {// 得到记录号int j
RecordEnumeration re = null;
int x = 1;
try {
re = rs.enumerateRecords(null, null, false); // enumeration
int sum = getNumOfRecords();
for (int i = 0; i < sum; i++) {
int j = re.nextRecordId();
TextResBean plb = new TextResBean(rs.getRecord(j));
if (plb.getIndex() == index) {
x = j;
}
}
} catch (Exception e) {
System.out.println("得到记录号异常");
}
return x;
}
public boolean setRecord(int id, int index, String name, String fileUrl,
int picSize, int textSize, String other) {
boolean success = false;
try {
rs.enumerateRecords(null, null, false);
TextResBean plb = new TextResBean(index, name, fileUrl, picSize,
textSize, other);
byte[] data = plb.toBytes();
rs.setRecord(id, data, 0, data.length);
success = true;
} catch (Exception e) {
System.out.println("修改记录异常");
e.printStackTrace();
}
return success;
}
public void deleteRecord(int id) {
try {
rs.deleteRecord(id);
} catch (Exception e) {
System.out.println("删除记录异常");
e.printStackTrace();
}
}
public void deletePlAllRecord(String rsname) {
openRS(rsname);
try {
int reccount = rs.getNumRecords();
for (int i = 1; i <= reccount; i++) {
deleteRecord(i);
}
} catch (Exception e) {
System.out.println("删除记录异常");
e.printStackTrace();
}
closeRS();
}
public void deletePlRecordStore(String rsname) {
// openRS(rsname);
try {
RecordStore.deleteRecordStore(rsname);
} catch (Exception e) {
System.out.println("清空异常");
}
// closeRS();
}
public void deleteRecord(String rsname, int index) {
openRS(rsname);
int SourceRecordId = getId(index);
deleteRecord(SourceRecordId);
int sum = getNumOfRecords();
for (int i = index; i <= sum; i++) {
int sRecordId = getId(i + 1);
TextResBean plb = getRecord(i + 1);
setRecord(sRecordId, i, plb.getName(), plb.getFileUrl(), plb
.getPicSize(), plb.getTextSize(), plb.getOther());
}
closeRS();
}
}
第三步 如何调用
TextMusicResRMS resrms = TextMusicResRMS.getInstance();
resrms.addRecord(String rsname, String name, String fileUrl,
int picSize, int textSize, String other);
resrms.deleteRecord(String rsname, int index) {
resrms.getRecords(resname);