`

j2me实现类似j2se中类Properties.java

    博客分类:
  • j2me
阅读更多
实现了J2SE的java.util.Properties类,可以用来读取内容类似下面这样的配置文件:
===============================================
# 这是注释
screen_width=240
screen_height=238
myname = rocks
mybirth = \u00d7\u00f7\u00d5\u00df\u00c9\u00fa\u00c8\u00d5
===============================================
这样使用:
Properties prop = new Properties();
InputStream is = this.getClass().getResourceAsStream("conf.prop");
prop.load(is);
is.close();
String name = prop.getProperty("myname");
...
为了省空间和提高性能我把解析unicode的那部分注释起来了,如果你需要支持中文(就像上面的mybirth那样的),把那些注释起来的代码恢复就可以了。

代码:
--------------------------------------------------------------------------------
package com.joyamigo.util;
import java.io.*;
import java.util.Hashtable;
import java.util.Enumeration;
public class Properties extends java.util.Hashtable {
   
   public Properties() {
       super();
   }
   
 public String getProperty(String key) {
       return (String)this.get(key);
   }
   
   public String getProperty(String key, String defaultValue) {
       Object ret = this.get(key);
       return ret == null ? defaultValue : (String)ret;
   }
           
 public Object setProperty(String key, String value) {
       return this.put(key, value);
   }
   
   public void list(PrintStream out) {
       Enumeration e = this.keys();
       while (e.hasMoreElements()) {
           Object key = e.nextElement();
           Object value = this.get(key);
           out.println(key+"="+value);
       }
   }
   
   public void load(InputStream is) throws IOException {
       this.load(is, "ISO8859_1");
  }
   
   public void load(InputStream is, String enc) throws IOException {
       Reader reader = new InputStreamReader(is, enc);
      boolean reading = true;
       StringBuffer buf = new StringBuffer();
       while (reading) {
           int c = reader.read();
           switch (c) {
           case -1:
              reading = false;
               break;
          case (int)'\r':
               break;
          case (int)'\n':
               Object[] pair = parseLine(buf.toString());
               if (pair != null) {
                   this.put(pair[0], pair[1]);
               }
              buf.setLength(0);
               break;
           default:
               buf.append((char)c);
           }
       }
       Object[] pair = parseLine(buf.toString());
       if (pair != null) {
           this.put(pair[0], pair[1]);
       }
   }
       
   public void store(OutputStream out, String header) throws IOException {
       this.store(out, "ISO8859_1", header);
   }
   
   public void store(OutputStream out, String enc, String header) throws IOException {
       Writer writer = new OutputStreamWriter(out, enc);
       if (header != null) {
           writer.write("#"+header+"\n");
       }
       Enumeration e = this.keys();
       while (e.hasMoreElements()) {
           Object key = e.nextElement();
           String value = (String)this.get(key);
           //writer.write(key+"="+rconvUnicode(value)+"\n");
           writer.write(key+"="+value+"\n");
      }
   }
   private Object[] parseLine(String line) {
       if (line == null || line.trim().length() == 0) {
           return null;
       }
       line = line.trim();
       if (line.startsWith("#") || line.startsWith("!")) { // is comment line
          return null;
       }
       int idx = line.indexOf("=");
       if (idx == -1) {
          //return new String[] { convUnicode(line), "" };
           return new String[] { line, "" };
      } else {
           //return new String[] { convUnicode(line.substring(0, idx).trim()), 
          //                      convUnicode(line.substring(idx+1).trim()) };
           return new String[] { line.substring(0, idx).trim(), 
                                 line.substring(idx+1).trim() };
       }
   }
   /*/
   private static final String convUnicode(String s) {
       int idx = 0;
       int len = s.length();
       StringBuffer buf = new StringBuffer();
       try {
           while (idx < len) {
               char c = s.charAt(idx++);
               if (c == '\\') {
                   c = s.charAt(idx++);
                   if (c == 'u') {
                       StringBuffer tmp = new StringBuffer(4);
                       for (int i = 0; i < 4; i++) {
                           tmp.append(s.charAt(idx++));
                       }
                       buf.append((char)Integer.parseInt(tmp.toString(), 16));
                   } else {
                       buf.append("\\"+c);
                   }
               } else {
                   buf.append(c);
               }
           }
       } catch (StringIndexOutOfBoundsException ex) {
           ;
       }
       return buf.toString();
   }
       
   private static final String rconvUnicode(String s) {
      StringBuffer buf = new StringBuffer();
       for (int i = 0; i < s.length(); i++) {
           char c = s.charAt(i);
           if ((int)c > 127) {
               buf.append("\\u");
               String ss = Integer.toHexString((int)c);
              for (int j = 0; j < 4 - ss.length(); j++) {
                   buf.append('0');
               }
               buf.append(ss);
           } else {
               buf.append(c);
           }
       }
       return buf.toString();
   }
   //*/
}
分享到:
评论

相关推荐

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

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

    j2se j2ee j2me区别.txt

    j2se j2ee j2me区别.txt

    浅析J2EE,J2SE,J2ME

    分析对比J2EE,J2SE,J2ME,比较简单移动,挺不错一个期刊

    funambol-j2me-api-6.5.1000.zip_PIM_phone_pim java

    对于Java Micro Edition(J2ME)平台,开发者可以利用特定的API来实现PIM数据的处理。"funambol-j2me-api-6.5.1000.zip"是一个专门针对这一需求的库,旨在帮助开发者在J2ME环境中有效地管理和同步手机上的PIM数据。 ...

    J2SE.rar_j2me_j2se

    J2SE是Java技术的基础,为其他两个版本——Java 2 Platform, Micro Edition (J2ME) 和 Java 2 Platform, Enterprise Edition (J2EE) 提供了基础。J2SE提供了丰富的类库,包括集合框架、网络编程、多线程、I/O流、...

    提供j2me使用的优化过的Properties源码

    描述中指出,这个自写的Properties类实现了与J2SE中Properties类类似的功能。这可能包括读取和写入配置文件,支持键值对的存取,以及可能的编码转换等功能。开发者可能还考虑到了J2ME的特殊环境,例如文件I/O操作的...

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

    3. **图形与动画**:在J2ME中,游戏画面的绘制通常依赖于Graphics类,开发者需要掌握如何在低分辨率的移动设备上创建和更新游戏画面,以及实现动态效果。 4. **事件处理**:了解如何处理键盘输入和触摸屏事件,这是...

    解析J2EE、J2SE、J2ME、JDK的区别

    本文向大家简单介绍一下JDK、J2EE、J2SE、J2ME概念及区别,J2EE,J2SE,J2ME是java针对不同的的使用来提供不同的服务,也就是提供不同类型的类库。

    J2ME模拟器 KEmulator Lite V0.9.8 免安装.zip

    3. **用户友好**:通过将Java游戏或应用程序直接拖入模拟器窗口,用户可以快速方便地启动它们,类似于在媒体播放器中拖放视频。 4. **性能优化**:KEmulator Lite经过优化,能够在PC上流畅运行J2ME应用,提供接近...

    [OpenGL编程指南(第四版)].(Ebook.-.Pdf.-.Java).O&#39;Reilly.-.j2Me.In.A.Nutshell.pdf

    套接字是实现网络通信的基础,这部分讲解了如何使用Java中的Socket类进行TCP/IP通信。 #### 6.3 数据报 数据报是一种基于UDP协议的网络通信方式,适用于对实时性要求较高的应用场景。 #### 6.4 HTTP连接 HTTP是...

    j2me-step-by-step.rar_java programming

    2. **基础语法**:了解Java的基础语法,包括数据类型、控制结构、类与对象等,因为J2ME是基于Java的。 3. **MIDP API**:学习MIDP API,它是J2ME中最常用的应用程序接口,包含了用户界面组件、网络连接、数据存储等...

    archive_J2me手机游戏飞机射击完整源码.zip.zip

    5. **图形和音频处理**:游戏源码中会包含使用J2ME的Graphics类进行图像绘制和更新的代码,以及AudioPlayer或MidiPlayer类进行音效播放的代码。 6. **游戏循环**:游戏通常有一个主循环,用于处理用户输入、更新...

    【Java项目开源源码】贪吃蛇游戏(源代码+基于J2ME的手机游戏开发定稿).zip

    以J2ME为开发平台,利用Java提供强大工具,不但可以在手机上实现静态HTML技术所无法实现的计算处理、数据存储、与服务器的通信等功能,而且能够开发各种手机游戏。本文在介绍J2ME及其体系结构的基础上,以贪吃蛇游戏...

    J2ME手机游戏坦克大战Java源码.rar

    描述中提到,“J2ME手机游戏坦克大战Java源码”实现了游戏的基本功能,尽管相对简单,但非常适合初学者学习Java游戏编程。这表明源码设计可能相对基础,没有过于复杂的算法或图形处理,适合初学者理解和借鉴。通过这...

    编写Palm J2ME红外线“聊天”程序.doc

    编写Palm J2ME红外线“聊天”程序.doc 编写Palm J2ME红外线“聊天”程序.doc

    J2ME 2D小游戏入门之旅.rar_j2me_j2me小游戏_java 2d_小游戏_小游戏 java

    Java Micro Edition(J2ME)是Java平台的一个子集,主要设计用于嵌入式设备和移动设备,如手机和智能手表。在这个“J2ME 2D小游戏入门之旅”资料中,你将深入学习如何使用J2ME开发2D游戏。J2ME以其轻量级和跨平台的...

    收集几个常用的JAVA J2ME类库.rar

    LVector.java:Vector实现类;  2. StringTokenizer.java:StringTokenizer类;  3. SimpleCache.java:Cache类;  4. MD5Digest.java:J2ME MD5算法类;  5. Blowfish.java:J2ME的Blowfish加密类;  ...

    在J2ME程序中制作Splash画面效果.zip

    下面将详细介绍如何在J2ME程序中实现这一效果。 首先,理解J2ME的基础。J2ME是Java平台的一个子集,专门设计用于嵌入式设备,如移动电话和PDA。它由配置(Configurations)和 profiles(Profiles)组成,如MIDP...

    J2ME入门-(6)CLDCAPI.doc

    在Java.lang包中,CLDC版本剔除了J2SE v1.3 API中的一些类,如ClassLoader、Compiler等,以减少内存占用和提高性能。然而,它仍保留了像Class、Object、Runtime、System、Thread和Throwable等核心运行时类,以及...

Global site tag (gtag.js) - Google Analytics