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
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
相关文章推荐
- Java Web项目中利用FreeMarker模板生成的word文档,其它格式文档同理,如pdf,txt,java,xml等等
- 【笔记】利用java进行xml编程(IBM developerworks )
- Java 利用DOM读取XML文档的例子
- 利用Dom4j操作XML文档,Demo笔记
- java 利用DOM写入XML文档
- Java Web项目中利用FreeMarker模板生成的word文档,其它格式文档同理,如pdf,txt,java,xml等等
- java 导出word 利用freemarker指令更改xml 导出word docx文档 (3)
- java怎么制作api文档(下一个笔记里面有,但是感觉比较有用,所以单独提出来)
- JavaEE中利用JAXB来实现Java对象和XML文档进行相互转换
- Java 解析xml文档笔记(SAX,DOM,DOM4J)
- 利用java处理XML文档
- XML学习---利用Java对XML文档的增、删、改、查
- java中利用Dom4j解析和生成XML文档
- Java学习之路——利用JDOM对xml文档进行解析等操作实例
- Java利用freemaker和(excelXML表格或wordXML表格),导出自己任何想要格式的文档
- java中利用dom4j对XML文档的创建、解析、查找、修改、保存等操作。
- java中利用dom4j对XML文档的创建、解析、查找、修改、保存等操作。
- Java解析XML的笔记
- Java学习笔记XML(3)
- Android(java)学习笔记139:在TextView组件中利用Html插入文字或图片