基于MIDP实现ResourceBundle类 (转J2meDev.com)

原创 2004年08月29日 13:09:00
  在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

基于J2EE实现Webservice项目实战ATM

本课程主要基于J2EE实现Webservice项目实战ATM,通过本课程的学习,学员能开发Webservice应用
  • 2015年04月21日 10:56

基于MIDP实现ResourceBundle类

作者:mingjava  文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=20在MIDP中没有提供J2SE平台的Resour...
  • mobilechannel
  • mobilechannel
  • 2005-12-01 14:23:00
  • 594

自己动手实现基于MIDP的ResourceBundle类

  • zgqtxwd
  • zgqtxwd
  • 2008-04-25 06:02:00
  • 71

Android下实现的J2ME API类库[完全支持MIDP2.0]

  • 2011年08月21日 21:07
  • 2.03MB
  • 下载

Java中ResourceBundle类的使用

原文地址:http://tutorials.jenkov.com/java-internationalization/resourcebundle.html java.util.ResourceB...
  • Revivedsun
  • Revivedsun
  • 2016-05-06 14:15:04
  • 4632

ResourceBundle 类介绍 (一)使用场景

java.util 类 ResourceBundlejava.lang.Objectjava.util.ResourceBundle直接已知子类:ListResourceBundle , Prop...
  • lxzo123
  • lxzo123
  • 2011-05-23 13:46:00
  • 4139

JAVA中ResourceBundle和Properties类的区别

一般来说,ResourceBundle类通常是用于针对不同的语言来使用的属性文件。 而如果你的应用程序中的属性文件只是一些配置,并不是针对多国语言的目的。那么使用Properties类就可以了。...
  • chengly0129
  • chengly0129
  • 2015-10-09 14:23:46
  • 307

java.util.ResourceBundle用法详解

java.util.ResourceBundle用法详解
  • u012345283
  • u012345283
  • 2014-12-23 15:11:01
  • 8756

java实现对属性文件的增删改查以及ResourceBundle使用详解

java实现对属性文件的增删改查以及ResourceBundle使用详解
  • mine_song
  • mine_song
  • 2017-06-01 10:18:07
  • 1117

ResourceBundle和properties 读取配置文件区别

java.util.ResourceBundle 和java.util.properties 读取配置文件区别   这两个类都是读取properties格式的文件的,而Properties...
  • conolan
  • conolan
  • 2014-11-10 10:11:45
  • 2169
收藏助手
不良信息举报
您举报文章:基于MIDP实现ResourceBundle类 (转J2meDev.com)
举报原因:
原因补充:

(最多只允许输入30个字)