RecordStore的问题:在netbean里面运行和在外面用 手机顽童运行结果不一样...
读取file.txt和JavaPowered.png这两个文件然后显示
第一次运行正常,然后我手动修改了这两个文件,在运行,结果竟然还是一样的
但是退出netbeans之后用手机顽童去运行那个jar,结果就是改变后的txt文本和图片了
why????????
- Java code
package com.j2medev.chapter4;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import javax.microedition.lcdui.Image;import javax.microedition.rms.*;public class Database { public static final String DATABASE_NAME = "database"; private RecordStore rs = null; private boolean empty = true; public Database() { openDatabase(); } private void openDatabase(){ try{ rs = RecordStore.openRecordStore(DATABASE_NAME,true); if(rs.getNumRecords() > 0){ //记录存储中已经有数据 empty = false; populateDatabase(); }else{ //初始化数据内容,向RecordStore中写入图片和文本 populateDatabase(); } }catch(RecordStoreException e){ e.printStackTrace(); } } //向记录存储中写入图片和文本数据 private void populateDatabase(){ try{ initFile("file.txt"); initFile("JavaPowered.png"); }catch(IOException e){ e.printStackTrace(); }catch(RecordStoreException ex){ ex.printStackTrace(); } } private void initFile(String fileName) throws IOException,RecordStoreException{ InputStream is = this.getClass().getResourceAsStream("/"+fileName); if(is != null){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); //创建缓冲区用于读取数据,如果一个字节一个字节读取效率很低。 byte[] data = new byte[1024]; int ch = 0; while((ch = is.read(data, 0,data.length))!=-1){ baos.write(data, 0, ch); } byte[] array = baos.toByteArray(); //添加记录 rs.addRecord(array, 0, array.length); is.close(); baos.close(); } } public boolean isEmpty(){ return this.empty; } public Image getImage(){ try{ //这里硬编码,我们已知图片记录的recordId是2 byte[] img = rs.getRecord(2); return Image.createImage(img, 0,img.length); }catch(RecordStoreException e){ e.printStackTrace(); } return null; } public String getText(){ try{ //这里硬编码,我们已知文本记录的recordId是1 byte[] text = rs.getRecord(1); //解决中文问题,使用UTF-8编码 return new String(text,"UTF-8" ); }catch(RecordStoreException e){ e.printStackTrace(); }catch(IOException ex){ ex.printStackTrace(); } return null; }}
------解决方案--------------------------------------------------------
是不是编码格式的问题?
------解决方案--------------------------------------------------------
addRecord的问题,每次调用,recordId加1,不可逆,删掉这个记录,id号仍然存在,于是
你第一次的时候写入的是1、2,这时你改了图片和txt,再次add写入的是3、4号,但你取的仍然是1、2。
放到另外一个编译模拟环境的时候初始RecordStore是没有内容,你第一次添加东西是可以取到正确的值的,再来一次就不行了。
------解决方案--------------------------------------------------------
setRecord
记录号可以用RecordEnumeration接口得到
------解决方案--------------------------------------------------------
学习了