终于实现J2ME永久存储,对上一篇文章中所说的不能永久存储的自我否定! package j2me; import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordStore; public class RMS { /** * 添加记录到RMS * * @param resourceName * @param resourceData * @return */ public static int addResource(String resourceName, byte resourceData[]) { int i1 = -1; RecordStore recordstore = null; try { recordstore = RecordStore.openRecordStore(resourceName, true); i1 = recordstore.addRecord(resourceData, 0, resourceData.length); } catch (Exception exception1) { if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception2) { } } finally { if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception4) { } } return i1; } /** * 获取RMS数据 * * @param resourceName * @param index * @return */ public static byte[] getResourceByIndex(String resourceName, int index) { byte abyte0[] = null; RecordStore recordstore = null; try { recordstore = RecordStore.openRecordStore(resourceName, true); abyte0 = recordstore.getRecord(index); } catch (Exception exception1) { if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception2) { } } finally { if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception4) { } } return abyte0; } /** * 替换 按id替换数据 * * @param resourceName * @param resourceData * @param id * @return */ public static boolean replaceResourceById(String resourceName, byte resourceData[], byte id) { RecordStore recordstore = null; boolean flag1; try { recordstore = RecordStore.openRecordStore(resourceName, true); RecordEnumeration recordenumeration = recordstore.enumerateRecords(null, null, false); int i1 = -1; do { if (!recordenumeration.hasNextElement()) break; int j1 = recordenumeration.nextRecordId(); byte abyte2[] = recordstore.getRecord(j1); if (abyte2.length <= 0 || abyte2[0] != id) continue; i1 = j1; break; } while (true); recordenumeration.destroy();// 销毁搜索机智 byte abyte1[] = new byte[resourceData.length + 1];// 替换 System.arraycopy(resourceData, 0, abyte1, 1, resourceData.length); abyte1[0] = id;// ID放前 if (i1 == -1) recordstore.addRecord(abyte1, 0, abyte1.length); else recordstore.setRecord(i1, abyte1, 0, abyte1.length); flag1 = true; if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception2) { } return flag1; } catch (Exception e) { if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception4) { } return false; } } /** * 由ID获取数据 * * @param resourceName * @param id * @return */ public static byte[] getResourceById(String resourceName, byte id) { RecordStore recordstore; byte abyte0[]; recordstore = null; abyte0 = null; byte abyte3[]; try { recordstore = RecordStore.openRecordStore(resourceName, false); RecordEnumeration recordenumeration = recordstore.enumerateRecords(null, null, false); do { if (!recordenumeration.hasNextElement()) break; byte abyte1[] = recordenumeration.nextRecord(); if (abyte1.length <= 0 || abyte1[0] != id) continue; abyte0 = abyte1; break; } while (true); recordenumeration.destroy(); if (abyte0 != null) { byte abyte2[] = new byte[abyte0.length - 1]; System.arraycopy(abyte0, 1, abyte2, 0, abyte0.length - 1); abyte0 = abyte2; } abyte3 = abyte0; if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception1) { } return abyte3; } catch (Exception e) { if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception3) { } return null; } } /** * 删除所有数据 * * @param resourceName */ public static void removeResource(String resourceName) { try { RecordStore.deleteRecordStore(resourceName); } catch (Exception exception) { } } /** * 删除RMS数据 * * @param resourceName * @param index * @return */ public static boolean removeResource(String resourceName, int index) { boolean flag = false; RecordStore recordstore = null; try { recordstore = RecordStore.openRecordStore(resourceName, true); recordstore.deleteRecord(index); flag = true; } catch (Exception exception1) { if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception2) { } } finally { if (recordstore != null) try { recordstore.closeRecordStore(); } catch (Exception exception4) { } } return flag; } }