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 RetrieveAllMIDlet extends MIDlet implements CommandListener {
  private Command exitCommand = new Command("Exit", Command.EXIT, 1);
  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 RetrieveAllMIDlet() {
    display = Display.getDisplay(this);
  }
  public void startApp() {
    TextBox aTextBox = new TextBox("Main", null, 256, TextField.ANY);
    RecordStore rs = null;
    boolean existingOrNot = false;
    existingOrNot = existing("aRS3");
    if (existingOrNot) {
      try {
        rs = RecordStore.openRecordStore("aRS3", false);
      } catch (Exception e) {
      }
    } else {
      try {
        rs = RecordStore.openRecordStore("aRS3", true);
      } catch (Exception e) {
      }
    }
    Student aStudent = null;
    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("Adding done");
    } catch (Exception e) {
      aTextBox.setString("Add Falied");
    }
    String result = "";
    aStudent = new Student();
    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 + "\n";
      aTextBox.setString(result);
    } catch (Exception e) {
      aTextBox.setString("Failed!");
      try {
        rs.closeRecordStore();
        RecordStore.deleteRecordStore("aRS3");
      } 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 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;
  }
}
class averageFilter implements RecordFilter {
  public boolean matches(byte[] candidate) {
    DataInputStream student = new DataInputStream(new ByteArrayInputStream(candidate));
    int average = 0;
    try {
      average = (student.readInt() + student.readInt() + student.readInt()) / 3;
    } catch (Exception e) {
    }
    if (average >= 80)
      return true;
    else
      return false;
  }
}