J2ME读取UTF-8编码文件方法
2006-09-11 00:19
441 查看
在进入正题前先说点别的,Polish更新到2.0 bate2了,增加了N多东西。看api学习已经变的非常繁重而且不易实现了,看来需要换个学习方法,看例子,可例子也很变态。哎。。看来学习路真难走,2.0增加了JAVA 5大包,还有一个关于mail的大包,其他还有很多,估计出到5.0,就足够和J2SE比大小了……
因为学习需要,所以做了个J2ME读取UTF-8编码文件,说实话,这不是我的成果,只能算是抄袭,但现在不都讲站在巨人的肩膀上看世界吗,这里感谢主任和giky,没有他们的帮助,我是不可能完成的。
代码如下(简略版):
private String name;
private static Font font;
private final static byte enter_1 = (byte) 0x0D; //UTF-8编码中换行字节1
private final static byte enter_2 = (byte) 0x0A; //UTF-8编码中换行字节2
private static DataInputStream dis;
private static String[] strTxt;
//类构造器,我的类名叫ExplorerScreen
public ExplorerScreen(String name) {
setFullScreenMode(true); //全屏
font = Font.getDefaultFont();
this.name = name + ".txt"; //合并文件名
dis = new DataInputStream(getClass().getResourceAsStream(this.name));
strTxt = readTextUTF8(dis); //读
addCommand(new Command("返回", Command.BACK, 1));
setCommandListener(this);
}
public void paint(Graphics g) {
clearScreen(g); //清屏
drawBackgroup(g); //画背景
g.setColor(redFont, greenFont, blueFont); //设置字体颜色
//打印文字
for (int i = 0, y = 0; i < strTxt.length; ++i) {
g.drawString(strTxt[i], 0, y, Graphics.TOP | Graphics.LEFT);
y += font.stringWidth("中");
}
}
public static String[] readTextUTF8(DataInputStream dis) {
//实际的行数
int m = 0 ;
//读取的总byte数
int total = 0;
//存放字符串数组开始下标
int iTmp = 0 ;
//存放字符串数组的byte长度
int len = 0 ;
//要跳3个字节,因为前3个字节是UTF-8特有的标记
try {
dis.skip(3);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] b = new byte[1024]; //读缓冲
try {
total = dis.read(b); //得到读了多少字节
System.out.println("total = " + total);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("total = dis.read(b);");
}
for (int i = 0; i < total; ++i) { //判断有多少行
if (enter_1 == b[i] && enter_2 == b[i + 1]) {
m++;
}
}
String[] s = new String[m]; //建立结果数组,以行数为维数。
for (int i = 0, z = 0; i < total; i++) {
//继续判断是否有空格,但这次是为了分行
if (enter_1 == b[i] && enter_2 == b[i + 1]) {
len = i - iTmp; //得到长度
try {
s[z] = new String(b, iTmp, len, "UTF-8"); //转换并保存结果
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
System.out.println("(s[z] = new String");
}
iTmp = i + 2; //后跳2个字节,因为那是换行符
if (z < s.length) {
z++;
}
}
}
return s; //返回结果
}
这样就能正确读出文件内容了,但这不是完善的,因为还不能正确读去不定长文件,也不能正确执行换行,就是当一行输出已经超过屏幕时,它不主动换行,是直接打到手机屏幕外面了,这个留着下午做,今天上午有课,先睡觉休息会……
PS:本代码用WTK2.2编译混淆,NOKIA 7610真机测试通过。
因为学习需要,所以做了个J2ME读取UTF-8编码文件,说实话,这不是我的成果,只能算是抄袭,但现在不都讲站在巨人的肩膀上看世界吗,这里感谢主任和giky,没有他们的帮助,我是不可能完成的。
代码如下(简略版):
private String name;
private static Font font;
private final static byte enter_1 = (byte) 0x0D; //UTF-8编码中换行字节1
private final static byte enter_2 = (byte) 0x0A; //UTF-8编码中换行字节2
private static DataInputStream dis;
private static String[] strTxt;
//类构造器,我的类名叫ExplorerScreen
public ExplorerScreen(String name) {
setFullScreenMode(true); //全屏
font = Font.getDefaultFont();
this.name = name + ".txt"; //合并文件名
dis = new DataInputStream(getClass().getResourceAsStream(this.name));
strTxt = readTextUTF8(dis); //读
addCommand(new Command("返回", Command.BACK, 1));
setCommandListener(this);
}
public void paint(Graphics g) {
clearScreen(g); //清屏
drawBackgroup(g); //画背景
g.setColor(redFont, greenFont, blueFont); //设置字体颜色
//打印文字
for (int i = 0, y = 0; i < strTxt.length; ++i) {
g.drawString(strTxt[i], 0, y, Graphics.TOP | Graphics.LEFT);
y += font.stringWidth("中");
}
}
public static String[] readTextUTF8(DataInputStream dis) {
//实际的行数
int m = 0 ;
//读取的总byte数
int total = 0;
//存放字符串数组开始下标
int iTmp = 0 ;
//存放字符串数组的byte长度
int len = 0 ;
//要跳3个字节,因为前3个字节是UTF-8特有的标记
try {
dis.skip(3);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] b = new byte[1024]; //读缓冲
try {
total = dis.read(b); //得到读了多少字节
System.out.println("total = " + total);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("total = dis.read(b);");
}
for (int i = 0; i < total; ++i) { //判断有多少行
if (enter_1 == b[i] && enter_2 == b[i + 1]) {
m++;
}
}
String[] s = new String[m]; //建立结果数组,以行数为维数。
for (int i = 0, z = 0; i < total; i++) {
//继续判断是否有空格,但这次是为了分行
if (enter_1 == b[i] && enter_2 == b[i + 1]) {
len = i - iTmp; //得到长度
try {
s[z] = new String(b, iTmp, len, "UTF-8"); //转换并保存结果
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
System.out.println("(s[z] = new String");
}
iTmp = i + 2; //后跳2个字节,因为那是换行符
if (z < s.length) {
z++;
}
}
}
return s; //返回结果
}
这样就能正确读出文件内容了,但这不是完善的,因为还不能正确读去不定长文件,也不能正确执行换行,就是当一行输出已经超过屏幕时,它不主动换行,是直接打到手机屏幕外面了,这个留着下午做,今天上午有课,先睡觉休息会……
PS:本代码用WTK2.2编译混淆,NOKIA 7610真机测试通过。
相关文章推荐
- J2ME读取UTF-8编码文件方法
- J2ME中读取Unicode和UTF-8编码文件的方法
- J2ME中读取Unicode和UTF-8编码文件
- J2ME中读取Unicode和UTF-8编码文件
- J2ME中读取Unicode和UTF-8编码文件
- J2ME中读取Unicode和UTF-8编码文件
- J2ME中读取Unicode和UTF-8编码文件
- J2ME中读取Unicode和UTF-8编码文件
- J2ME中读取Unicode和UTF-8编码文件
- 使用java 程序创建格式为utf-8文件的方法(写入和读取json文件)
- 关于python读取文件编码问题(作弊方法)
- java读取ANSI编码或者UTF-8编码文件乱码问题解决
- 【J2ME】J2ME下的读取文件、Base64编码、URLEncoder上传文件
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- Adodb.Stream读取和写入UTF-8编码的文件
- Python读取Unicode编码格式的文件(转换为UTF-8)
- 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
- Android studio设置文件编码方式为UTF-8方法
- J2ME 读取TXT文件的方法