Java 笔记 --利用xml文档制作二进制字典.dict

有关文件的几条命令:

System.getProperty("user.dir")

tempOutputFile.getAbsolutePath(); 获得绝对路径;
tempOutputFile.exists() ; 判断文件是否存在;
this.getFileStreamPath(path).exists() ; path 是文件名;
tempOutputFile.deleteOnExit() ; 虚拟机终止时,删除此文件;

tempOutputFile.delete ; 删除此文件;


final File inputFile = new File(currentFolder, "dict/words.xml");
System.out.println("Reading words from input "+inputFile.getAbsolutePath());
File[] dictFiles = outputFolder.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File arg0, String arg1) {
                return arg1.contains(".dict");
            }
        });
outputFolder 目录;
outputFolder.listFiles 获得该目录下面的所有文件 ;new FilenameFilter()获得该文件目录下面的特定文件,重写函数accept


SAXParser 解析XML文件:SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
 parser.parse(new File(filename), new DefaultHandler() {

 public void startElement(String uri, String localName,String qName, Attributes attributes)

 public void characters(char[] data, int offset, int length)

 public void endElement(String uri, String localName, String qName)
});


读取XML文件
http://blog.csdn.net/kmyhy/article/details/6439794 ;
http://blog.csdn.net/zzp16/article/details/7795410 ;
XmlResourceParser继承了2个接口:AttributeSet和XmlPullParser
获得处理 android 中 xml 文件的 XmlResourceParser 对象
XmlResourceParser xrp = context.getResources().getXml(R.xml.extended_dict_list);
或者 XmlResourceParser xml = ctx .getResources().getXml(getResIDFromXmlFile(filename)); filename是对应的xml文件名;

切换到下一个状态,并获得当前状态的类型
int eventType = xml.next();
一共有5中状态类型:
XmlResourceParer是XmlPullParser的子类
XmlPullParser. START_DOCUMENT(文档开始状态) ,
XmlPullParser. START_TAG(标签开始状态) ,将标签名称和当前标签的深度(根节点的depth 是 1 ,第 2 层节点的 depth 是 2 ,类推) 深度由xml.getDepth()获得;
XmlPullParser. END_TAG(标签结束状态) ,
XmlPullParser. TEXT(读取标签内容状态),
XmlPullParser. END_DOCUMENT(文档结束状态)

获得当前内容:
xrp.getText(); 返回类型string ,当value是数值,用Integer.parseInt()进行转化;
Integer.parseInt: parseInt()是integer类的一个静态变量;不需要实例化可以直接使用;
作用: 将获得对象类型转成int 类型;
freq = Integer.parseInt(attributes.getValue(0));     


keySet: 将map(mExtSettingMap)中的键存放到set集合中,因为set中存有迭代器,通过迭代器方法将数据取出;
Set<String> mapSet = mExtSettingMap.keySet();
可以根据返回类型需求,将返回类型进行转变;
CharSequence[] player_names = players.keySet().toArray(new CharSequence[players.size()]);
entrySet():执行数据操作相比keySet()的效率较高;

关于String.indexof(int ch, int offset)命令,解释来源于MSDN
ch: the character to search the String for;
offset: the position within the string to begin searching for the character, the value cannot be greater than the length of the string.
return value: The index of the first occurrence of ch in the String after the offset, or -1 if ch is not exist within string or it is a invalid offset.

String.substring(int index);
index: the index of the first character within the current string to copy into the new string.

return value: a new string.


String.substring(int offset, int end);
return value: a new string object containing the contents of the existing string between offset and endindex.






字典制作思路:

roots 是一个Charnode 类型的链表;

从xml逐句读取字串,每个字串中的字符以首字符为节点,逐个添加进去;当遇到相同的首字符,重新创建一条链表添加进去;形成树形链表;
将链表数据写入byte[]数组(以圈式写入),该数组包含字符,频率,子链表节点位置等信息;再将数据写入.dict文件中;根据大小判断是否需要将词典分段;


源码分析:http://code.google.com/p/softkeyboard/downloads/list  源码由此链接提供;





                                                                                           fmoonstar   更新至2012.08.16





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值