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.RecordComparator;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreNotFoundException;
public class SortFieldsMIDlet 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 SortFieldsMIDlet() {
    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;
      }
      String result = "";
      aStudent = new Student();
      byte[] data;
      int number = 0;
      RecordComparator rc = new sortByAverage();
      RecordEnumeration re = rs.enumerateRecords(null, rc, 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);
      aTextBox.setString(result);
      aTextBox.addCommand(exitCommand);
      aTextBox.setCommandListener(this);
      display.setCurrent(aTextBox);
    } catch (Exception e) {
    }
  }
  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 sortByAverage implements RecordComparator {
  public int compare(byte[] rec1, byte[] rec2) {
    DataInputStream student1 = new DataInputStream(new ByteArrayInputStream(rec1));
    DataInputStream student2 = new DataInputStream(new ByteArrayInputStream(rec2));
    int average1 = 0;
    int average2 = 0;
    try {
      average1 = (student1.readInt() + student1.readInt() + student1.readInt()) / 3;
      average2 = (student2.readInt() + student2.readInt() + student2.readInt()) / 3;
    } catch (Exception e) {
    }
    if (average1 == average2)
      return RecordComparator.EQUIVALENT;
    else if (average1 < average2)
      return RecordComparator.FOLLOWS;
    else
      return RecordComparator.PRECEDES;
  }
}