`

j2me工具类:ReadFromFile.java

    博客分类:
  • j2me
阅读更多
import java.io.*;
import java.util.Vector;

/*
 * 用法:
 *  	ReadFromFile rf = new ReadFromFile("/res/A.txt");
	    Vector v = rf.parseFile();
	    String temp=null;
	    String[] annonce=new String[v.size()];
	    for(int i=0;i<v.size();i++){
	    	temp = (String) v.elementAt(i);//tmp为16进制的字符串(UTF8)
	    	annonce[i] = TypeConvert.gb2utf(TypeConvert.toHex(temp));
	    	 System.out.println("annonce="+annonce[i]);//中文
	    }
 */


public class ReadFromFile {
	public InputStream in;

	public ReadFromFile(String file_path) throws IOException {
		in = this.getClass().getResourceAsStream(file_path);
	}

	//读取所有行,存入Vector
	public Vector parseFile() throws IOException {
		Vector vec = new Vector();
		String line = null;
		while ((line = this.readLine()) != null && line.length() > 0) {
			if (line.startsWith("#")) {//#注释
			} else {
				vec.addElement(line);
			}
		}
		return vec;
	}

	private String readLine() throws IOException {
		StringBuffer buffer = new StringBuffer();
		boolean isEndOfFile = false;
		if (in != null) {
			while (true) {
				int ch = in.read() & 0xFF;
				if (ch == 0xD) { // '13' '\n'
				} else if (ch == 0xA) {
					break;
				} else if (ch == 0xFF) {
					isEndOfFile = true;
					break;
				} else {
					buffer.append((char) ch);
				}
			}
		}
		if (isEndOfFile) {
			if (buffer.length() > 0) {
				return buffer.toString();
			} else {
				return null;
			}
		}
		return buffer.toString();
	}
	
	
	/////////////////////////////////////////////////////////////////////////////////
	
	
	//一,读取Unicode格式

    private String read_Uni(String resource)
    {
        byte word_uni[]=new byte[1024];
        String strReturn="";
        InputStream is;
        try
        {
            is=getClass().getResourceAsStream(resource);
            is.read(word_uni);
            is.close();
            StringBuffer stringbuffer = new StringBuffer("");
            for (int j = 0; j < word_uni.length; )
            {
              int k = word_uni[j++]; //注意在这个地方进行了码制的转换
              if (k < 0)
                k += 256;
              int l = word_uni[j++];
              if (l < 0)
                l += 256;
              char c = (char) (k + (l << 8)); //把高位和低位数组装起来
              stringbuffer.append(c);
            }
            strReturn=stringbuffer.toString();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            is=null;
        }
        return strReturn;
    }


//二,读取UTF-8格式

    public String read_UTF(String name)
    {
        String strReturn = "";
        InputStream in = null;
        byte[] word_utf= new byte[1024];
        try
        {
          in = getClass().getResourceAsStream(name);
          in.read(word_utf);
          in.close();
          strReturn=new String(word_utf,"UTF-8");
        }
        catch(Exception e)
        {
          System.out.println("readUTF Error:"+e.toString());
        }
        finally
        {
          in = null;
        }
        return strReturn;
    }

/*三,读取Unicode big endian格式

读取Unicode big endian格式时,采用readChar()方法读取,所以存放时使用char数组存放.

注意:在文本的末尾加上'$'表示文本的结束.

另外代码第10行dis.skip(2)是略过文件头2个字符,如果用microsoft notepad保存的一定存在这两个头字符.

当然,可以使用UltraEdit可以先删掉这两个头字符,然后使用新建文件,复制粘贴,保存为其它格式.这样两个头字符就没了..
*/

    private String read_Uni_b_e(String resource)
    {
        char word_uni_b_e[]=new char[1024];
        String strReturn="";
        DataInputStream dis;
        try
        {
            dis=new DataInputStream(getClass().getResourceAsStream(resource));
            int counter=0;
            dis.skip(2);
            char temp;
            while(true)
            {
                temp=dis.readChar();
                if(temp=='$')
                    break;
                word_uni_b_e[counter++]=temp;
            }
            dis.close();
            strReturn=String.valueOf(word_uni_b_e,0,counter);
        }
        catch(Exception e)
        {
            System.out.println("read_Uni_b_e error!"+e.getMessage());
        }
        finally
        {
            dis=null;
        }
        return strReturn;
    }


	////////////////////////////////////////////////////////////////////////////////
    
    
    /**
    *
    * @todo 一定要确定读取的文件为utf-8格式要不然会出错,用ue可以转换成utf-8
    * @param name
    *            String
    * @return String
    */
   public String readUTF(String path) {
    String strReturn = "";
    int ic;
    InputStream in = null;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    byte[] myData;
    byte[] buffer = new byte[1024];
    try {
     in = getClass().getResourceAsStream(path);
     if (in != null) {
      while ((ic = in.read(buffer)) > 0) {
       dos.write(buffer, 0, ic);
      }
      myData = baos.toByteArray();
      strReturn = new String(myData, "UTF-8");
      in.close();
     }
     dos.close();
     baos.close();
    } catch (Exception e) {
     System.out.println("readUTF Error:" + e.toString());
    } finally {
     in = null;
     dos = null;
     baos = null;
    }
    return strReturn;
   } 
}


/*用法:
TypeConvert.gb2utf(TypeConvert.toHex(tmp));
其中tmp如E6ACA2E8BF8EE682A8E4BDBFE794A8E4BFA1E794A8E58DA1E4BCB4E4BEA3E8BDAFE4BBB6EFBC8CE5BD93E5898DE78988E69CACE58FB7E4B8BA56322E38E38082E69CACE8BDAFE4BBB6E698AFE5858DE8B4B9E8BDAFE4BBB6EFBC8CE68891E4BBACE4B88DE4BC9AE59091E682A8E694B6E58F96E8BDAFE4BBB6E4BDBFE794A8E8B4B9EFBC8CE8AFB7E694BEE5BF83E4BDBFE794A8E38082
形式。
*/

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2008</p>
 *
 * <p>Company: WorthTech</p>
 *
 * @author bruce
 * @version 1.0
 */
import java.io.UnsupportedEncodingException;

public class TypeConvert {

    public static String toHexString(byte[] value) {
        String newString = "";
        for (int i = 0; i < value.length; i++) {
            byte b = value[i];
            String str = Integer.toHexString(b);
            if (str.length() > 2) {
                str = str.substring(str.length() - 2);
            }
            if (str.length() < 2) {
                str = "0" + str;
            }
            newString += str;
        }
        return newString.toUpperCase();
    }

    public static byte[] toHex(String hexString) {
        int len = hexString.length() / 2;
        byte[] newByte = new byte[len];
        for (int i = 0; i < len; i++) {
            newByte[i] = toByte(hexString.substring(i * 2, (i + 1) * 2));
        }
        return newByte;
    }

    public static byte toByte(String data) {
        return (byte) Integer.parseInt(data, 16);
    }

    public static int toInt(String data) {
        return Integer.parseInt(data, 16);
    }

    public static int hex2int(byte[] data) {
        return toInt(toHexString(data));
    }

    public static byte[] int2byte(int n) {
        byte[] b = new byte[4];
        b[0] = (byte) (n >> 24);
        b[1] = (byte) (n >> 16);
        b[2] = (byte) (n >> 8);
        b[3] = (byte) n;
        return b;
    }
    /*使用指定字符填充字符串
     * 需要格式化的字符串:strSrc
     * 需要填充的字符:chFormat
     * 需要填充的长度:nFormatLen
     */
    public static String leftFormatString(String strSrc, char chFormat, int nFormatLen) {
        if (strSrc == null) {
            strSrc = "";
        }
        int nLen = strSrc.length();
        if (nLen < nFormatLen) {
            String strNum = "";
            for (int i = 0; i < nFormatLen - nLen; i++) {
                strNum = strNum + chFormat;
            }
            return strNum + strSrc;
        } else {
            return strSrc;
        }
    }

    public static String rightFormatString(String strSrc, char chFormat, int nFormatLen) {
        if (strSrc == null) {
            strSrc = "";
        }
        int nLen = strSrc.getBytes().length;
        if (nLen < nFormatLen) {
            String strNum = "";
            for (int i = 0; i < nFormatLen - nLen; i++) {
                strNum = strNum + chFormat;
            }
            return strSrc + strNum;
        } else {
            return strSrc;
        }
    }

    public static String byte2hexBcd(byte[] b) {
        if (b == null) {
            return "字节数组为空";
        }
        String hs = "";
        String stmp = "";
        for (int n = 0; n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0xFF);
            if (stmp.length() == 1) {
                hs = hs + "0" + stmp;
            } else {
                hs = hs + stmp;
            }
        }
        return hs.toUpperCase();
    }

    public static byte[] str2bcd(String asc) {
        int len = asc.length();
        int mod = len % 2;

        if (mod != 0) {
            asc = "0" + asc;
            len = asc.length();
        }

        byte abt[] = new byte[len];
        if (len >= 2) {
            len = len / 2;
        }

        byte bbt[] = new byte[len];
        abt = asc.getBytes();
        int j, k;

        for (int p = 0; p < asc.length() / 2; p++) {
            if ((abt[2 * p] >= '0') && (abt[2 * p] <= '9')) {
                j = abt[2 * p] - '0';
            } else if ((abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) {
                j = abt[2 * p] - 'a' + 0x0a;
            } else {
                j = abt[2 * p] - 'A' + 0x0a;
            }

            if ((abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) {
                k = abt[2 * p + 1] - '0';
            } else if ((abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) {
                k = abt[2 * p + 1] - 'a' + 0x0a;
            } else {
                k = abt[2 * p + 1] - 'A' + 0x0a;
            }

            int a = (j << 4) + k;
            byte b = (byte) a;
            bbt[p] = b;
        }
        return bbt;
    }

    public static String gb2utf(byte[] gbString) throws UnsupportedEncodingException {
        return new String(gbString, "UTF-8");
    }
}
分享到:
评论

相关推荐

    Android-development.rar_android_game android J2ME_site:en.pudn.c

    "android_game android J2ME site:en.pudn.c"这部分标签揭示了该资源可能包含的内容,即关于Android游戏开发的知识,以及可能与J2ME(Java 2 Micro Edition)平台的迁移或转换相关的指导。 【描述】提到的“$兩小時...

    基于java的开发源码-J2ME优化压缩PNG文件.zip

    基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化...

    基于java的开发源码-J2me月光战机游戏源码.zip

    基于java的开发源码-J2me月光战机游戏源码.zip 基于java的开发源码-J2me月光战机游戏源码.zip 基于java的开发源码-J2me月光战机游戏源码.zip 基于java的开发源码-J2me月光战机游戏源码.zip 基于java的开发源码-J2me...

    基于java的开发源码-简单模拟的J2ME潜艇大战源代码.zip

    基于java的开发源码-简单模拟的J2ME潜艇大战源代码.zip 基于java的开发源码-简单模拟的J2ME潜艇大战源代码.zip 基于java的开发源码-简单模拟的J2ME潜艇大战源代码.zip 基于java的开发源码-简单模拟的J2ME潜艇大战源...

    基于java的开发源码-蜀山剑侠传游戏J2ME手机版源代码.zip

    基于java的开发源码-蜀山剑侠传游戏J2ME手机版源代码.zip 基于java的开发源码-蜀山剑侠传游戏J2ME手机版源代码.zip 基于java的开发源码-蜀山剑侠传游戏J2ME手机版源代码.zip 基于java的开发源码-蜀山剑侠传游戏J2ME...

    [J2ME编程].(Manning).J2ME.-.Java.in.small.things.(2002)

    对于想学习J2ME的开发者,"[J2ME编程].(Manning).J2ME.-.Java.in.small.things.(2002)"这本书是一个很好的起点,它详细介绍了J2ME的基础知识、开发技巧和实际案例,帮助读者掌握J2ME编程技能。 总结,J2ME是Java在...

    j2me 手机 电话本 *..java

    这是个人用j2me写的简单手机电话本,实现了以下功能: 1.查找 2.添加 3.删除 4.查看

    jbuilder 2006 j2me ALERT: java/lang/ClassFormatError: Bad version information.

    这个错误表明Java虚拟机(JVM)遇到了一个它无法识别或者处理的类文件版本。在JBuilder 2006环境下开发J2ME应用时,如果你遇到了这个错误,可能是由于以下原因导致的: 1. **JDK版本不匹配**:JBuilder 2006可能与...

    archive_j2me游戏俄罗斯方块源码.zip.zip

    1. J2ME:Java 2 Micro Edition开发 2. 游戏开发:涉及游戏编程和设计 3. 俄罗斯方块:游戏类型 4. 源码:代码可读性与学习资源 【压缩包子文件的文件名称列表】: 1. output.txt:这可能是一个日志文件,记录了程序...

    基于Java的J2me月光战机游戏源码.zip

    【标题】"基于Java的J2me月光战机游戏源码.zip" 提供的是一个使用Java编程语言开发的J2ME(Java 2 Micro Edition)平台上的游戏项目,名为“月光战机”。J2ME是Java的一个子集,主要用于移动设备、嵌入式系统和智能...

    funambol-j2me-api-6.5.1000.zip_PIM_phone_pim java

    1. "funambol-j2me-common-6.5.10.zip":这是Funambol J2ME平台的通用组件,包含了各种基础类和工具,它们为PIM数据处理提供了一般性的支持。这些通用组件可能包括网络通信、数据编码解码、错误处理等功能,为整个...

    开发中j2me与android的比较.pdf

    在过去的几十年里,多种移动开发平台和技术相继涌现,其中包括Java 2 Micro Edition (J2ME) 和 Android。这两种平台分别代表了不同阶段的移动开发历史,各有特色与优势。本文将从多个角度对J2ME和Android进行比较...

    huoying.rar_j2me_www.huoying .c

    10. **调试与测试**:Eclipse 和 NetBeans 等 IDE 提供了 J2ME 开发支持,包括模拟器和设备调试工具,帮助开发者在不同平台上测试和调试应用程序。 总结来说,"huoying.rar" 可能是一个包含 J2ME 游戏源码的压缩包...

    j2ME MMS彩信开发API .zip

    - **j2ME**:Java Micro Edition是一种轻量级的Java平台,主要用于嵌入式设备和移动设备,如手机。它包括一套精简的Java虚拟机和一些特定于设备的API。 - **MMS**:多媒体消息服务允许用户在移动设备间发送和接收...

    java源码:J2ME优化压缩PNG文件.rar

    标题 "java源码:J2ME优化压缩PNG文件.rar" 提供了我们即将探讨的核心主题——使用Java语言在J2ME(Java 2 Micro Edition)平台上优化和压缩PNG(Portable Network Graphics)图像文件。J2ME是Java的一个子集,主要...

    java源码:J2me月光战机游戏源码.rar

    Java源码:J2ME月光战机游戏源码是一个经典的编程学习资源,它展示了如何使用Java语言和J2ME(Java 2 Micro Edition)平台来开发一款简单的移动游戏。J2ME是Java的一个子集,专门用于嵌入式设备和移动设备,如早期的...

    J2ME手机游戏编程入门.iso

    J2ME手机游戏编程入门.iso J2ME手机游戏编程入门.iso

    j2me satas-crypto.rar

    标题中的"j2me satas-crypto.rar"表明这是一个与Java 2 Micro Edition(J2ME)相关的压缩文件,其中包含的"satas-crypto"可能是指某种特定的加密或安全相关的技术。J2ME是Java平台的一个子集,主要用于嵌入式系统,...

    基于Java的简单模拟的J2ME潜艇大战源代码.zip

    【标题】: "基于Java的简单模拟的J2ME潜艇大战源代码.zip" 涉及的主要知识点是Java编程语言以及Java Micro Edition (J2ME) 平台的应用开发。J2ME是一种针对嵌入式设备和移动设备的Java平台,它允许开发者创建可以在...

    Java J2ME学习实例源码集.rar

    - **字符串操作**:Java的`String`类提供了各种字符串操作方法,如`concat()`、`substring()`、`indexOf()`等,用于拼接、截取和查找文本。 - **格式化**:J2ME可能需要对数字、日期等进行格式化显示,这可以通过`...

Global site tag (gtag.js) - Google Analytics