J2ME Java Tutorial

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordFilter;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreNotFoundException;
public class FilterFieldsMIDlet extends MIDlet implements CommandListener {
  private Command exitCommand;
  private Display display;
  private String[] names = { "A", "B", "C", "D" };
  private int[] chineseScore = { 74, 98, 89, 76 };
  private int[] englishScore = { 67, 89, 89, 78 };
  private int[] mathScore = { 80, 76, 80, 78 };
  public FilterFieldsMIDlet() {
    display = Display.getDisplay(this);
    exitCommand = new Command("Exit", Command.EXIT, 1);
  }
  public void startApp() {
    TextBox aTextBox = new TextBox("Main", null, 256, TextField.ANY);
    RecordStore rs = null;
    byte[] nameEmail = null;
    boolean existingOrNot = false;
    boolean OK = true;
    existingOrNot = existing("aRS3");
    if (existingOrNot) {
      try {
        rs = RecordStore.openRecordStore("aRS3", false);
      } catch (Exception e) {
        OK = false;
      } finally {
        if (OK) {
          aTextBox.setString("Ok");
        } else {
          aTextBox.setString("not tOk");
        }
      }
    } else {
      try {
        rs = RecordStore.openRecordStore("aRS3", true);
      } catch (Exception e) {
        OK = false;
      } finally {
        if (OK) {
          aTextBox.setString("Ok");
        } else {
          aTextBox.setString("Not Ok");
        }
      }
    }
    Student aStudent = null;
    if (OK)
      try {
        for (int i = 0; i < names.length; i++) {
          aStudent = new Student();
          aStudent.write(names[i], chineseScore[i], englishScore[i], mathScore[i]);
          byte[] data = aStudent.changeToByteArray();
          int recordID = aStudent.getRecordID();
          if (recordID != -1) {
            rs.setRecord(recordID, data, 0, data.length);
          } else {
            recordID = rs.addRecord(data, 0, data.length);
            aStudent.setRecordID(recordID);
          }
          aStudent = null;
        }
        aTextBox.setString("Added");
      } catch (Exception e) {
        aTextBox.setString("Failed");
      }
    String result = "";
    aStudent = new Student();
    if (OK)
      try {
        byte[] data;
        int number = 0;
        RecordFilter rf = new averageFilter();
        RecordEnumeration re = rs.enumerateRecords(rf, null, false);
        while (re.hasNextElement()) {
          int recordID = re.nextRecordId();
          data = rs.getRecord(recordID);
          aStudent.changeFromByteArray(data);
          result += recordID + "\n" + "Name:" + aStudent.getName() + "\n"
              + aStudent.getChineseScore() + "\n" + aStudent.getEnglishScore() + "\n"
              + aStudent.getMathScore() + "\n";
          number++;
        }
        result += number;
        aTextBox.setString(result);
      } catch (Exception e) {
        aTextBox.setString("Failed");
        try {
          rs.closeRecordStore();
          System.out.println("1.Closed.");
          RecordStore.deleteRecordStore("aRS3");
          System.out.println("delete OK");
        } catch (Exception x) {
        }
      } finally {
        try {
          if (rs != null)
            rs.closeRecordStore();
          rs.deleteRecordStore("aRS3");
        } catch (Exception e) {
        }
      }
    aTextBox.setString(result);
    aTextBox.addCommand(exitCommand);
    aTextBox.setCommandListener(this);
    display.setCurrent(aTextBox);
  }
  public void pauseApp() {
  }
  public void destroyApp(boolean unconditional) {
  }
  public boolean existing(String recordStoreName) {
    boolean existingOrNot = false;
    RecordStore rs = null;
    if (recordStoreName.length() > 32)
      return false;
    try {
      rs = RecordStore.openRecordStore(recordStoreName, false);
    } catch (RecordStoreNotFoundException e) {
      existingOrNot = false;
    } catch (Exception e) {
    } finally {
      try {
        rs.closeRecordStore();
      } catch (Exception e) {
      }
    }
    return existingOrNot;
  }
  public void commandAction(Command c, Displayable s) {
    destroyApp(false);
    notifyDestroyed();
  }
}
class averageFilter implements RecordFilter {
  public boolean matches(byte[] candidate) {
    DataInputStream student = new DataInputStream(new ByteArrayInputStream(candidate));
    int average = 0;
    try {
      String dummy = student.readUTF();
      average = (student.readInt() + student.readInt() + student.readInt()) / 3;
    } catch (Exception e) {
    }
    if (average >= 80)
      return true;
    else
      return false;
  }
}
class Student {
  private int ID = -1;
  private String name;
  private int chineseScore;
  private int englishScore;
  private int mathScore;
  public void write(String name, int chineseScore, int englishScore, int mathScore) {
    this.name = name;
    this.chineseScore = chineseScore;
    this.englishScore = englishScore;
    this.mathScore = mathScore;
  }
  public void setRecordID(int ID) {
    this.ID = ID;
  }
  public int getRecordID() {
    return ID;
  }
  public byte[] changeToByteArray() {
    byte[] data = null;
    try {
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      DataOutputStream dos = new DataOutputStream(baos);
      dos.writeUTF(name);
      dos.writeInt(chineseScore);
      dos.writeInt(englishScore);
      dos.writeInt(mathScore);
      data = baos.toByteArray();
      baos.close();
      dos.close();
    } catch (Exception e) {
    }
    return data;
  }
  public void changeFromByteArray(byte[] data) {
    try {
      ByteArrayInputStream bais = new ByteArrayInputStream(data);
      DataInputStream dis = new DataInputStream(bais);
      name = dis.readUTF();
      chineseScore = dis.readInt();
      englishScore = dis.readInt();
      mathScore = dis.readInt();
      bais.close();
      dis.close();
    } catch (Exception e) {
    }
  }
  public String getName() {
    return name;
  }
  public int getChineseScore() {
    return chineseScore;
  }
  public int getEnglishScore() {
    return englishScore;
  }
  public int getMathScore() {
    return mathScore;
  }
}