Запись 1
Filek
Запись n
Запись 1
File1 имя хранилища
Catch(Exception ex)
Try
Public void actionPerformed(ActionEvent e)
{
Save(); // сохранение файла
}
});
form. show ();
}
public void Load()
{
String s,s1;
s=tf1.getText(); // имяфайла в текстовомполе
try // чтение с проверкойошибок
{
Scanner sc = new Scanner(new File(s)); // сканердлячтенияфайла
Size=0;
while (sc.hasNext()) // поканеконецфайла
{
Ar[Size]=sc.nextInt(); // следующеецелое
Size++;
}
sc.close();
}
catch (FileNotFoundException e) // ошибканенайденфайл
{
tf1.setText("Файл не найден");
return;
}
catch (Exception ex) // остальныеошибки – неправильноечисло
{
s1=Integer. toString (Size);
s="Не число: "+"Size="+s1;
tf1.setText(s);
return;
}
}
public void Save()
{
String s;
int i;
s=tf1.getText(); // имяфайла записи в текстовомполе
{
FileWriter fw=new FileWriter(s,false); // true – append!
PrintWriter pw = new PrintWriter(fw);
for (i=0; i<Size; i++)
{
pw.printf("%d ",Ar[i]); // через printf
}
pw.printf("\n");
pw.close();
}
{
}
}
public static void main (String args[])
{
Prog_3_2 f;
f= new Prog_3_2();
}
}
файл inp.txt
1 2 3 4 5
файл out.txt такой же
При чтении / записи строк выполняется замена
String Ar[] = new String[30];
|
|
pw.printf("%s \n",Ar[i]);
4) Хранение данных в ME
В ME используется RecordStore – хранилище записей
Хранилище находится в javax.microedition.rms
Состоит из объектов (аналог файлов), в которых размещаются записи. Запись – массив байтов byte [].
.......
......
........
По окончанию работу midlet хранилище не стирается, также как при замене батареи. Если удалить midlet, хранилище удаляется с ним. Эмулятор не сохраняет хранилища, при повторном запуске создается новые временные файлы!
Пример работы с хранилищами
import javax.microedition.midlet.*;
import com.sun.lwuit.*;
import com.sun.lwuit.events.*;
import com.sun.lwuit.geom.*;
import com.sun.lwuit.layouts.*;
import java.lang.Math.*;
import com.sun.lwuit.list.DefaultListModel;
import com.sun.lwuit.list.DefaultListCellRenderer;
import javax.microedition.rms.*;
public class Prog_3_5 extends MIDlet
{
int Regim;
Form form;
RadioButton jr1;
RadioButton jr2;
RadioButton jr3;
ButtonGroup bg;
Button bt;
TextField tf1;
TextField tf2;
DefaultListModel lm;
DefaultListCellRenderer dl;
List jl;
RecordStore rs1; // хранилище
String [] ArS=new String[30]; // массив для записей
int nS; // число записей
public void startApp()
{
int w,h;
Dimension d=new Dimension(200,200);
Display.init(this);
Regim=1;
form = new Form();
form.setPreferredSize(d);
form.setTitle("Работа с хранилищем");
w=form.getWidth();
h=form.getHeight();
CoordinateLayout e = new CoordinateLayout(w,h);
form.setLayout(e);
jr1=new RadioButton();
jr1.setX(10);
jr1.setY(10);
jr1.setText("Создать");
jr1.setSelected(true);
jr1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Regim=1;
bt.setText("Создание");
tf1.setText(" ");
tf2.setText(" ");
lm.removeAll();
}
});
form.addComponent(jr1);
jr2=new RadioButton();
jr2.setX(10);
jr2.setY(40);
jr2.setText("Загрузить");
jr2.setSelected(false);
jr2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Regim=2;
bt.setText("Загрузка");
tf1.setText(" ");
tf2.setText(" ");
lm.removeAll();
}
});
form.addComponent(jr2);
jr3=new RadioButton();
jr3.setX(10);
jr3.setY(70);
jr3.setText("Удалить");
jr3.setSelected(false);
|
|
jr3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Regim=3;
bt.setText("Удаление");
tf1.setText(" ");
tf2.setText(" ");
lm.removeAll();
}
});
form.addComponent(jr3);
bg = new ButtonGroup();
bg.add(jr1);
bg.add(jr2);
bg.add(jr3);
bt=new Button();
bt.setX(130);
bt.setY(10);
bt.setText("Работа ");
bt.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String s;
int i,n;
if(Regim==2 || Regim==3)
{
String[] namesRec = RecordStore.listRecordStores();
n=namesRec.length;
for(i=0;i<n;i++)
{
lm.addItem(namesRec[i]);
}
}
if(Regim==1)
{
s=tf2.getText(); // имя хранилища для записи
rs1=openRecStore(s);
if(rs1!= null) // создано хранилище?
{
nS=lm.getSize(); // число строк в List
for(i=0;i<nS;i++) // строки List -> массив
{
ArS[i]=(String)lm.getItemAt(i);
}
for(i=0;i<nS;i++)
{
s=ArS[i];
writeRecord(rs1,s);
}
closeRecStore(rs1);
}
}
}
});
form.addComponent(bt);
tf1 = new TextField();
tf1.setX(130);
tf1.setY(40);
tf1.setText(" ");
tf1.addFocusListener(new FocusListener()
{
public void focusGained(Component e)
{
// при попадании в фокус
}
public void focusLost(Component e)
{
// при выходе из компоненты
String s;
if(Regim==1)
{
s=tf1.getText();
jl.addItem(s);
}
}
});
form.addComponent(tf1);
tf2 = new TextField();
tf2.setX(130);
tf2.setY(70);
tf2.setText(" ");
tf2.addFocusListener(new FocusListener()
{
public void focusGained(Component e)
{
// при попадании в фокус
}
public void focusLost(Component e)
{
int n,i;
String s;
n=0;
if(Regim==2)
{
lm.removeAll();
s=tf2.getText();
rs1=openRecStore(s);
try
{
n=rs1.getNumRecords();
}
catch (Exception ee)
{
}
for(i=1;i<=n;i++)
{
s=readRecord(rs1,i);
lm.addItem(s);
}
closeRecStore(rs1);
}
if(Regim==3)
{
s=tf2.getText();
deleteRecStore(s);
}
}
});
form.addComponent(tf2);
lm = new DefaultListModel();
lm.setSelectedIndex(-1);
dl=new DefaultListCellRenderer();
dl.setShowNumbers(false);
jl=new List(lm);
jl.setX(10);
jl.setY(140);
jl.setRenderingPrototype(" ");
jl.setListCellRenderer(dl);
jl.setMinElementHeight(5);
jl.setFixedSelection(List.FIXED_NONE_CYCLIC);
jl.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
String s,s1;
int k;
k=lm.getSelectedIndex();
s=(String)lm.getItemAt(k);
tf2.setText(s);
}
});
form.addComponent(jl);
form.show();
}
public RecordStore openRecStore(String Name)
{
RecordStore rs;
rs=null;
try
{
rs=RecordStore.openRecordStore(Name, true); // true,если его нет -создать
}
catch (Exception e)
{
}
return rs;
}
public void writeRecord(RecordStore rs,String str)
{
byte rec[]=new byte[200];
int k;
try
{
rec = str.getBytes("UTF-8");
}
catch(Exception e)
{
}
try
{
rs.addRecord(rec, 0, rec.length);
}
catch (Exception e)
{
}
}
public void closeRecStore(RecordStore rs)
{
try
{
rs.closeRecordStore();
}
catch (Exception e)
{
}
}
public String readRecord(RecordStore rs,int n)
{
byte[] recData = new byte[200];
int len;
String Rec;
Rec="";
try
{
len=rs.getRecord(n, recData, 0);
Rec=new String(recData,0,len,"UTF-8");
}
catch (Exception e)
{
}
return Rec;
}
public void deleteRecStore(String Name)
{
if (RecordStore.listRecordStores()!= null)
{
try
{
RecordStore.deleteRecordStore(Name);
}
catch (Exception e)
{
}
}
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
}
Глобальная переменная Regim (значения):
1 – создание хранилищ
2 – загрузка содержимого
3 – удаление хранилища
Радиокнопки:
Создать
Загрузить
Удалить
переключают режимы и при этом очищаются текстовые поля tf1,tf2, List jl и на кнопке bt появляется надпись Создание, Загрузка, Удаление.
Текстовое поле tf1 используется для добавления строк в List, которые сохраняются в хранилище, tf2 для записи имени хранилища.
Создание:
Regim=1
В поле tf1 вводятся строки, при выходе (focuslost) они добавляются в jl (List)
public void focusLost(Component e)
{
// при выходе из компоненты
String s;
if(Regim==1)
{
s=tf1.getText();
jl.addItem(s);
}
}
В поле tf2 водится название хранилища.
При нажатии bt создается хранилище с записями.
if(Regim==1)
{ // создание
s=tf2.getText(); // имя хранилища для записи
rs1=openRecStore(s); // открытие (имя)
if(rs1!= null) // создано хранилище?
{
nS=lm.getSize(); // число строк в List
for(i=0;i<nS;i++) // строки List -> массив
{
ArS[i]=(String)lm.getItemAt(i);
}
for(i=0;i<nS;i++)
{
s=ArS[i];
writeRecord(rs1,s); // запись строки в хранилище
}
closeRecStore(rs1); // закрытие хранилища
}
Загрузка:
Regim=2
При нажатии кнопки bt список имен всех хранилищ загружается в jl (List), при выборе одного имени, оно появляется в tf2. При выходе из tf2 строки хранилища выводятся в jl (List)
bt.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String s;
int i,n;
if(Regim==2 || Regim==3)
{
// список имен хранилищ в массив namesRec
String[] namesRec = RecordStore.listRecordStores();
n=namesRec.length;
for(i=0;i<n;i++)
{
lm.addItem(namesRec[i]); // из мссива в jl (List)
}
}
public void focusLost(Component e)
{
int n,i;
String s;
n=0;
if(Regim==2)
{
|
|
lm.removeAll();
s=tf2.getText(); // имя хранилища
rs1=openRecStore(s);
try
{
n=rs1.getNumRecords(); // количество записей в выбранном хранилище
}
catch (Exception ee)
{
}
for(i=1;i<=n;i++)
{
s=readRecord(rs1,i); // чтение i записи (с единицы!)
lm.addItem(s);
}
closeRecStore(rs1);
}