当前位置: 首页 > news >正文

基于MIDP实现ResourceBundle类

作者:mingjava 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=20

在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

相关文章:

  • Node.js 基础-01
  • vscode保存代码,自动按照eslint规范格式化代码设置(vscode最新版配置)
  • 关注J2ME WTK2.2新特性
  • 高级前端面试题
  • 介绍MIDP的属性问题
  • 破解 vue3.x 新特性
  • UniJa2.1声音播放问题(MIDI格式)
  • 在MIDP2.0中调用平台服务
  • 前端模块化
  • 搭建OTA下载服务器
  • Promise的理解
  • 介绍J2ME的安全结构
  • react面试总结
  • 使用Proguard混淆J2ME应用程序
  • VUE面试题总结
  • 3.7、@ResponseBody 和 @RestController
  • 30秒的PHP代码片段(1)数组 - Array
  • Create React App 使用
  • Java编程基础24——递归练习
  • Java应用性能调优
  • JDK 6和JDK 7中的substring()方法
  • jquery ajax学习笔记
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Selenium实战教程系列(二)---元素定位
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring Boot MyBatis配置多种数据库
  • webpack入门学习手记(二)
  • Yeoman_Bower_Grunt
  • 分布式事物理论与实践
  • 工作手记之html2canvas使用概述
  • 深度学习在携程攻略社区的应用
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 探索 JS 中的模块化
  • 写给高年级小学生看的《Bash 指南》
  • 一天一个设计模式之JS实现——适配器模式
  • python最赚钱的4个方向,你最心动的是哪个?
  • 容器镜像
  • 如何在招聘中考核.NET架构师
  • (52)只出现一次的数字III
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (四) Graphivz 颜色选择
  • (四)Android布局类型(线性布局LinearLayout)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)ABI是什么
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)Linux网络编程入门
  • (转载)利用webkit抓取动态网页和链接
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】