您的位置:首页 > 编程语言 > Java开发

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

2012-08-10 08:54 567 查看
有关文件的几条命令:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: