MFile ... manipulação de RMS

Espero que essa classe ajude aquele que desejem manipular arquivos rms.

Claro que se alguem quiser fazer alguma alteração ou acredite que tem um método melhor … por favor publique … sempre irá ajudar a meelhorar o código … que por isnal ainda precisa de uns retoques!

[code]import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;

public class MFile
{

private RecordStore	rs;
private String		file;

public MFile(String file)
{
	this.file= file;
	this.rs = null;
}

public InputStream getInputStream()
{
	InputStream in = null;
	try
	{
		int id = getNextRecordId() - 1;
		int recordSize = rs.getRecordSize(id);
		byte[] data = new byte[recordSize];
		ByteArrayInputStream bais = new ByteArrayInputStream(data);
		DataInputStream dis = new DataInputStream(bais);
		int numBytes = rs.getRecord(id, data, 0);
		in = dis;
	}
	catch (RecordStoreException e)
	{
		if (in != null)
			in = null;
		System.out.println("-- RecordStoreException erro");
	}
	return in;
}

public void open()
{
	try
	{
		rs = RecordStore.openRecordStore(file, true);
	}
	catch (RecordStoreNotFoundException e)
	{
		System.out.println("-- (open true) RecordStore not found");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (open true) Error");
	}
}

public void open(boolean isCreated)
{
	try
	{
		rs = RecordStore.openRecordStore(file, isCreated);
	}
	catch (RecordStoreNotFoundException e)
	{
		System.out.println("-- (open) RecordStore not found");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (open) Error");
	}
}

public void deleteRecord()
{
	try
	{
		RecordStore.deleteRecordStore(file);
	}
	catch (RecordStoreNotFoundException e)
	{
		System.out.println("-- (deleteRecord) RecordStore not found");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (deleteRecord) Error");
	}
}

public boolean isSave()
{
	String[] listRecord = RecordStore.listRecordStores();
	try
	{
		for (int i = 0; i < listRecord.length; i++)
		{
			if (listRecord[i].equals(file))
				return true;
		}
	}
	catch (Exception e)
	{
		return false;
	}
	return false;
}

public void close()
{
	try
	{
		rs.closeRecordStore();
	}
	catch (RecordStoreNotOpenException e)
	{
		System.out.println("-- (close) Record Store is closed");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (close) Error");
	}
}

public void add(String text)
{
	try
	{
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		DataOutputStream dos = new DataOutputStream(baos);
		dos.writeUTF(text);
		dos.flush();
		byte[] data = baos.toByteArray();
		int id = rs.addRecord(data, 0, data.length);
		baos.close();
		dos.close();
	}
	catch (IOException e)
	{
		System.out.println("-- (add) Error IO");
	}
	catch (RecordStoreFullException e)
	{
		System.out.println("-- (add) Storage is full");
	}
	catch (RecordStoreNotOpenException e)
	{
		System.out.println("-- (add) Record Store is closed");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (add) Error");
	}
}

public int getNextRecordId()
{
	int toReturn = 0;
	try
	{
		toReturn = rs.getNextRecordID();
	}
	catch (RecordStoreFullException e)
	{
		System.out.println("-- (getNextRecordId) Storage is full");
	}
	catch (RecordStoreNotOpenException e)
	{
		System.out.println("-- (getNextRecordId) Record Store is closed");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (getNextRecordId) Error");
	}
	return toReturn;
}

public int size()
{
	int toReturn = 0;
	try
	{
		toReturn = rs.getNumRecords();
	}
	catch (RecordStoreNotOpenException e)
	{
		System.out.println("-- (size) Record Store is closed");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (size) Error");
	}
	return toReturn;
}

public void delete(int id)
{
	try
	{
		rs.deleteRecord(id);
	}
	catch (RecordStoreFullException e)
	{
		System.out.println("-- (delete) Storage is full");
	}
	catch (RecordStoreNotOpenException e)
	{
		System.out.println("-- (delete) Record Store is closed");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (delete) Error");
	}
}

public String[] getListRecord()
{
	return rs.listRecordStores();
}

public String getRecord(int id)
{
	String toReturn = "";
	try
	{
		int recordSize = rs.getRecordSize(id);
		byte[] data = new byte[recordSize];
		ByteArrayInputStream bais = new ByteArrayInputStream(data);
		DataInputStream dis = new DataInputStream(bais);
		int numBytes = rs.getRecord(id, data, 0);
		toReturn = dis.readUTF();
		bais.reset();
		bais.close();
		dis.close();
	}
	catch (IOException e)
	{
		System.out.println("-- (getRecord) Error IO");
	}
	catch (ArrayIndexOutOfBoundsException e)
	{
		System.out.println("-- (getRecord) Index out of bounds");
	}
	catch (InvalidRecordIDException e)
	{
		System.out.println("-- (getRecord) ID not found");
	}
	catch (RecordStoreNotOpenException e)
	{
		System.out.println("-- (getRecord) Record Store is closed");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (getRecord) Error");
	}
	return toReturn;
}

public void update(int id, String text)
{
	try
	{
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		DataOutputStream dos = new DataOutputStream(baos);
		dos.writeUTF(text);
		dos.flush();
		byte[] data = baos.toByteArray();
		rs.setRecord(id, data, 0, data.length);
	}
	catch (IOException e)
	{
		System.out.println("-- (update) Error IO");
	}
	catch (ArrayIndexOutOfBoundsException e)
	{
		System.out.println("-- (update) Index out of bounds");
	}
	catch (InvalidRecordIDException e)
	{
		System.out.println("-- (update) Invalid ID");
	}
	catch (RecordStoreNotOpenException e)
	{
		System.out.println("-- (update) Record Store is closed");
	}
	catch (RecordStoreException e)
	{
		System.out.println("-- (update) Error");
	}
}

}
[/code]

É possível acessar o arquivo salvo pelo RMS? Tipo, imagina que eu quero salvar uma informação e depois copiá-la em um PC. Será que dá para “ver” o arquivo do RecordStore?

cada vez que você usa um add(String text) ele consireda como um id … ai para você pegar infromações já salvas pode usar o getRecord(int id)

Instale o Oxygen Phone Manager. Acredito que ele pode fazer o backup não só do .JAR, mas também do .DB (RecordStore).
Brinquei bastante com ele e tenho uma leve lembrança de que ele conseguia acessar tais arquivos.