J2ME读取本地文本文件(多种编码)

import java.io.*;

import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class LoadText
   extends MIDlet implements CommandListener {
   private Display display;
   private Form mainForm;
   private TextField textField;
   public void startApp() {
      this.display = Display.getDisplay(this);
      this.mainForm = new Form("本地ANSI).编码的文本");
      this.textField = new TextField("靠自己", "hello", 10240, TextField.ANY);
      this.mainForm.addCommand(new Command("离开", Command.EXIT, 0));
      String str = loadText("/kaoziji(ANSI).txt");
      this.textField.setString(str);
      this.mainForm.append(this.textField);
      this.mainForm.setCommandListener(this);
      this.display.setCurrent(mainForm);

   }

   public void pauseApp() {
   }

   public void destroyApp(boolean unconditional) {
   }

   public void commandAction(Command c, Displayable s) {
      this.notifyDestroyed();
   }

   //读取本地ANSI编码文本(没问题)
   private String loadText(String yourfilename) {
      InputStream is = null;
      String strs = "";
      try {
         Class c = this.getClass();
         is = c.getResourceAsStream(yourfilename);
         InputStreamReader isr = new InputStreamReader(is);
         StringBuffer buffer = new StringBuffer();
         int ch;

         while ( (ch = isr.read()) > -1) {
            buffer.append( (char) ch);
         }
         strs = buffer.toString();
         if (isr != null) {
            isr.close();
         }
         if (buffer != null) {
            buffer = null;
         }

      }
      catch (IOException e) {

      }

      return strs;
   }

}

=======================================

//读取本地UTF-8编码的文本文件(没问题)
public String loadText(String name) {
   String strReturn = "";
   InputStream in = null;
   byte[] word_utf = new byte[1024];
   try {
      in = getClass().getResourceAsStream(name);
      in.read(word_utf);
      in.close();
      strReturn = new String(word_utf, "UTF-8");
   }
   catch (Exception e) {
      System.out.println("读取本地UTF-8编码的文本出错:" + e.toString());
   }
   finally {
      in = null;
   }
   return strReturn;
}

========================================

//读取本地Unicode big endian编码文本文件(没问题)
public String loadText(String name) {
   String strReturn = "";
   InputStream in = null;
   byte[] word_utf = new byte[1024];
   try {
      in = getClass().getResourceAsStream(name);
      in.read(word_utf);
      in.close();
      strReturn = new String(word_utf, "UTF-16BE"); //后一个参数改为"UTF-8"即可读取UTF-8编码的
   }
   catch (Exception e) {
      System.out.println(e.toString());
   }
   finally {
      in = null;
   }
   return strReturn;
}

================================

//读取Unicode big endian编码文本(有问题)
private String loadText(String resource) {
   char[] word_uni_b_e = new char[1024];
   String strReturn = "";
   DataInputStream dis;
   try {
      dis = new DataInputStream(getClass().getResourceAsStream(resource));
      int counter = 0;
      dis.skip(2);
      char temp;
      while (true) {
         temp = dis.readChar();
         if (temp == ') {
            break;
         }

         word_uni_b_e[counter++] = temp;
      }
      dis.close();
      strReturn = String.valueOf(word_uni_b_e, 0, counter);
   }
   catch (Exception e) {
      System.out.println("读取Unicode big endian编码文本文件出错!" + e.getMessage());
   }
   finally {
      dis = null;
   }
   return strReturn;
}
读取Unicode big endian编码文本文件出错!null
不知何因

====================================

//读取ANSI编码文本 (有问题)
private String loadText(String resource) {
   byte[] word_uni_b_e = new byte[10240];
   DataInputStream dis;
   try {
      dis = new DataInputStream(getClass().getResourceAsStream(resource));
      dis.readFully(word_uni_b_e);

   }
   catch (Exception e) {
      System.out.println("读取ANSI编码文本文件出错!" + e.getMessage());
   }
   finally {
      dis = null;
   }
   return new String(word_uni_b_e);
}

====================================

平台(Sun J2ME Wireless Toolkit2.2)下面是执行结果截图:

ANSI编码:

Unicode编码:

 

UTF-8编码:

 

Unicode Big Endian编码: