WEB开发网      婵犵數濮烽弫鍛婄箾閳ь剚绻涙担鍐叉搐绾剧懓鈹戦悩瀹犲闁汇倗鍋撻妵鍕箛閸洘顎嶉梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě浣插亾閹烘鈷掗柛鏇ㄥ亜椤忣參鏌″畝瀣暠閾伙絽銆掑鐓庣仭缁楁垿姊绘担绛嬪殭婵﹫绠撻、姘愁樄婵犫偓娴g硶鏀介柣妯款嚋瀹搞儱螖閻樺弶鍟炵紒鍌氱Ч瀹曟粏顦寸痪鎯с偢瀵爼宕煎☉妯侯瀳缂備焦顨嗗畝鎼佸蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮⒑鐠団€虫灀闁哄懐濮撮悾鐤亹閹烘繃鏅濋梺闈涚墕濡瑩顢欒箛鏃傜瘈闁汇垽娼ф禒锕傛煕閵娿儳鍩f鐐村姍楠炴﹢顢欓懖鈺嬬幢闂備浇顫夊畷妯肩矓椤旇¥浜归柟鐑樻尭娴滃綊姊虹紒妯虹仸闁挎洍鏅涜灋闁告洦鍨遍埛鎴︽煙閼测晛浠滃┑鈥炽偢閹鈽夐幒鎾寸彇缂備緡鍠栭鍛搭敇閸忕厧绶炴俊顖滅帛濞呭洭姊绘担鐟邦嚋缂佽鍊垮缁樼節閸ャ劍娅囬梺绋挎湰缁嬫捇宕㈤悽鍛婄厽閹兼番鍨婚埊鏇㈡煥濮樿埖鐓熼煫鍥ュ劤缁嬭崵绱掔紒妯肩畺缂佺粯绻堝畷姗€濡歌缁辨繈姊绘担绛嬪殐闁搞劋鍗冲畷顖炲级閹寸姵娈鹃梺缁樻⒒閳峰牓寮崒鐐寸厱闁抽敮鍋撻柡鍛懅濡叉劕螣鐞涒剝鏂€闂佺粯鍔曞Ο濠囧吹閻斿皝鏀芥い鏃囨閸斻倝鎽堕悙鐑樼厱闁哄洢鍔屾晶顖炴煕濞嗗繒绠婚柡灞界Ч瀹曨偊宕熼鈧▍锝囩磽娴f彃浜炬繝銏f硾椤戝洨绮绘ィ鍐╃厵閻庢稒岣跨粻姗€鏌ㄥ☉妯夹fい銊e劦閹瑩顢旈崟顓濈礄闂備浇顕栭崰鏍礊婵犲倻鏆﹂柟顖炲亰濡茶鈹戦埄鍐ㄧ祷妞ゎ厾鍏樺璇测槈閵忕姈鈺呮煏婢跺牆鍔撮柛鏂款槺缁辨挻鎷呯粙搴撳亾閸濄儳鐭撶憸鐗堝笒閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓 ---闂傚倸鍊搁崐鐑芥倿閿旈敮鍋撶粭娑樺幘濞差亜鐓涢柛娑卞幘椤斿棝姊虹捄銊ユ珢闁瑰嚖鎷�
开发学院软件开发Java 基于MIDP实现ResourceBundle类 阅读

基于MIDP实现ResourceBundle类

 2007-12-23 12:36:24 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫嶅銈嗗姉閸樠囧煡婢跺á鐔兼煥鐎n兘鍋撴繝姘拺鐟滅増甯掓禍浼存煕閹惧鈽夐柍缁樻煥椤繈鎳滅喊妯诲闂備礁鎲$粙鎴︺偑閺夋垟鏋旈柡鍐e亾缂佺粯绋撴禒锕傚磼濮橆剦鐎抽梻浣哥-缁垶骞戦崶顒傚祦閻庯綆浜栭弨浠嬫煙闁箑澧い鏂垮€规穱濠囨倷椤忓嫧鍋撻弽褜娼栧┑鐘宠壘閸屻劎鎲歌箛娑樼疅闁圭虎鍠楅弲鎼佹煥閻曞倹瀚�
核心提示:在MIDP中没有提供J2SE平台的ResourceBundle类,因此我自己写了一个,基于MIDP实现ResourceBundle类,并通过简单的MIDlet程序测试成功,主要的目的是为了解决常量定义的问题,我写了一个简单的MIDlet程序测试成功,注意我是用的Eclipse因此把文件index.properties是
  在MIDP中没有提供J2SE平台的ResourceBundle类,因此我自己写了一个。并通过简单的MIDlet程序测试成功。主要的目的是为了解决常量定义的问题,如果把GUI中组件的title的等常量放到一个文件里面调试起来会更方便,本文更重要的目的是告诉读着如何实现在J2ME中遗失的J2SE的类。

通常我们可以在代码中直接使用常量值或者是专门定义一个放常量的类,例如下面的样子:
Form mianForm = new Form("最差"); Form mainForm = new Form(Title.FORMTITLE);第一种情况是最不可取的,如果修改起来很麻烦。下面我提供了一个 ResourceBundle类,它有一个构造器是
public ResourceBundle(String fileName,int size)第一个参数来指定文件的名字,第二个参数是文件中准备存储多少个选项,一般可以设置的比实际大一些。文件的格式应该是严格按照这样的样子。
0=ming
1=java
2=hello
3=world
4=digital
5=hahaha

把文件的内容进行分析并读取到Vector里面的关键部分是这样实现的:
PRivate void readToVector() throws IOException
   {
     InputStream is = this.getInputStreamFromFile();
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     int c = 0;
     int index = 0;
     while ((c = is.read()) != -1)
     {
       if (c == '\n' c == '\r')
       {
         String s = baos.toString();
         int i = s.indexOf('=');
         if (i != -1)
         {
           if (s.substring(0, i).endsWith(String.valueOf(index)))
           {
             indexVector.addElement(s.substring(i + 1).trim());
             index++;
           } else
           {
             throw new IOException("index error");
           }
         }
         baos.reset();
       } else
       {
         baos.write(c);
       }
     }
具体的使用方法是这样的
try
{
  ResourceBundle indexBundle = new ResourceBundle("/index.properties",20);
}
catch(IOException e)
{}
String s = indexBundle.getString(3);//任何你想得到的在index.properties中可以找到的title
为了测试这个类的正确性,我写了一个简单的MIDlet程序测试成功。注意我是用的Eclipse因此把文件index.properties是放在res目录里面(如果没有可以自己新建)下面是代码,运行结果是最终在textbox里面显示hello。这是正确的

import java.io.IOException;


import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class IndexMIDlet extends MIDlet
{
   private ResourceBundle indexBundle;
   private Display display;
   private TextBox box;
  
  
   protected void startApp() throws MIDletStateChangeException
   {
     display = Display.getDisplay(this);
     try
     {
       indexBundle = new ResourceBundle("/index.properties",15);
     }
     catch(IOException e)
     {
       e.printStackTrace();
     }
     box = new TextBox("IndexBundle",null,256,TextField.ANY);
     box.setString(indexBundle.getString(2));
     display.setCurrent(box);
    
   }

  
   protected void pauseApp()
   {
  }

 
   protected void destroyApp(boolean arg0) throws MIDletStateChangeException
   {
   }

}

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Vector;


public class ResourceBundle
{
   private Vector indexVector;
   private String fileName;
 
   private ResourceBundle()
   {
   }

   public ResourceBundle(String fileName, int size) throws IOException
   {
     this.fileName = fileName;
     indexVector = new Vector(size);
     init();
   }

   private InputStream getInputStreamFromFile()
   {
     return new ResourceBundle().getClass().getResourceAsStream(
         fileName);
   }


   private void init() throws IOException
   {
     readToVector();
   }

   public String getString(int indexID)
   {
     if (indexID < 0 indexID > indexVector.size())
     {
       return null;
     } else
     {
       return (String) indexVector.elementAt(indexID);
     }
   }

   private void readToVector() throws IOException
   {
     InputStream is = this.getInputStreamFromFile();
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     int c = 0;
     int index = 0;
     while ((c = is.read()) != -1)
     {
       if (c == '\n' c == '\r')
       {
         String s = baos.toString();
         int i = s.indexOf('=');
         if (i != -1)
         {
           if (s.substring(0, i).endsWith(String.valueOf(index)))
           {
             indexVector.addElement(s.substring(i + 1).trim());
             index++;
           } else
           {
             throw new IOException("index error");
           }
         }
         baos.reset();
       } else
       {
         baos.write(c);
       }
     }
   }


}
index.properties文件内容
0=ming
1=java
2=hello
3=world
4=digital
5=hahaha

(出处:http://www.cncms.com)


Tags:基于 MIDP 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接