J2ME读取各种格式的文本文件

本文介绍在J2ME环境中读取Unicode、UTF-8及Unicode Big Endian格式文本文件的方法,通过示例代码展示了如何正确解析不同编码格式的中文和英文字符。

J2ME读取各种格式的文本文件

Java代码 复制代码
  1. 在J2ME中读取各种格式的文本文件   
  2.   在J2ME开发过程中,我们经常会把一个文字信息保存在txt格式的文本文件中做为资源.这样便于修改和管理.那么读取它们对于一些刚接触j2me的朋友会有些困难.前几天研究了下,看了一些兄弟的文章和代码,总结出3种方法分别读取Unicode,UTF-8,Unicode big endian格式的文件...本文没考虑读取的效率问题.   
  3.   这三种方法都能读取中文和英文字符.用来存放的数组长度视文本长度而定....   
  4.   另外还有一些只能读取英文字符的方法就不列举出来了.   
  5.   一,读取Unicode格式   
  6.    private String read_Uni(String resource)   
  7.    {   
  8.    byte word_uni[]=new byte[1024];   
  9.    String strReturn="";   
  10.    InputStream is;   
  11.    try  
  12.    {   
  13.    is=getClass().getResourceAsStream(resource);   
  14.    is.read(word_uni);   
  15.    is.close();   
  16.    StringBuffer stringbuffer = new StringBuffer("");   
  17.    for (int j = 0; j < word_uni.length; )   
  18.    {   
  19.    int k = word_uni[j++]; //注意在这个地方进行了码制的转换   
  20.    if (k < 0)   
  21.    k += 256;   
  22.    int l = word_uni[j++];   
  23.    if (l < 0)   
  24.    l += 256;   
  25.    char c = (char) (k + (l << 8)); //把高位和低位数组装起来   
  26.    stringbuffer.append(c);   
  27.    }   
  28.    strReturn=stringbuffer.toString();   
  29.    }   
  30.    catch(IOException e)   
  31.    {   
  32.    e.printStackTrace();   
  33.    }   
  34.    finally  
  35.    {   
  36.    is=null;   
  37.    }   
  38.    return strReturn;   
  39.    }   
  40.   二,读取UTF-8格式   
  41.    public String read_UTF(String name)   
  42.    {   
  43.    String strReturn = "";   
  44.    InputStream in = null;   
  45.    byte[] word_utf= new byte[1024];   
  46.    try  
  47.    {   
  48.    in = getClass().getResourceAsStream(name);   
  49.    in.read(word_utf);   
  50.    in.close();   
  51.    strReturn=new String(word_utf,"UTF-8");   
  52.    }   
  53.    catch(Exception e)   
  54.    {   
  55.    System.out.println("readUTF Error:"+e.toString());   
  56.    }   
  57.    finally  
  58.    {   
  59.    in = null;   
  60.    }   
  61.    return strReturn;   
  62.    }   
  63.   三,读取Unicode big endian格式   
  64.   读取Unicode big endian格式时,采用readChar()方法读取,所以存放时使用char数组存放.   
  65.   注意:在文本的末尾加上'$'表示文本的结束.   
  66.   另外代码第10行dis.skip(2)是略过文件头2个字符,如果用microsoft notepad保存的一定存在这两个头字符.   
  67.   当然,可以使用UltraEdit可以先删掉这两个头字符,然后使用新建文件,复制粘贴,保存为其它格式.这样两个头字符就没了..   
  68.    private String read_Uni_b_e(String resource)   
  69.    {   
  70.    char word_uni_b_e[]=new char[1024];   
  71.    String strReturn="";   
  72.    DataInputStream dis;   
  73.    try  
  74.    {   
  75.    dis=new DataInputStream(getClass().getResourceAsStream(resource));   
  76.    int counter=0;   
  77.    dis.skip(2);   
  78.    char temp;   
  79.    while(true)   
  80.    {   
  81.    temp=dis.readChar();   
  82.    if(temp=='$')   
  83.    break;   
  84.    word_uni_b_e[counter++]=temp;   
  85.    }   
  86.    dis.close();   
  87.    strReturn=String.valueOf(word_uni_b_e,0,counter);   
  88.    }   
  89.    catch(Exception e)   
  90.    {   
  91.    System.out.println("read_Uni_b_e error!"+e.getMessage());   
  92.    }   
  93.    finally  
  94.    {   
  95.    dis=null;   
  96.    }   
  97.    return strReturn;   
  98.    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值