Java 汉字转换为中文拼音的研究一:读取.db文件

14 篇文章 0 订阅

最近好奇,中文汉字怎么转换为中文拼音,在开源中国找到源码后,便开始了研究。

源码参考地址:http://www.oschina.net/p/jpinyin, 谢谢这位作者。

下载好源码后,调用它的API进行测试,可以实现我要的功能。但是,很好奇,其数据来源于何处。打开源文件后,发现有三个db文件.如图


把jar包后缀名修改为zip后,尝试打开该.db文件,试了很多方法都没有,有通过sqlite打开,通过excel打开,都未能成功。

最后自己写程序,读取该文件内容,然后写入txt文件,终于看到了改文件的庐山真面。代码如下

资源读取类

package org.lor.pinyin;

import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.ZipInputStream;

/**
 * 资源文件加载类
 * 
 * @author Lor
 * @date 2014-8-12
 * @version 1.0
 *
 */
public class PinyinResource {

	// 日志对象
	protected static final Logger logger = Logger.getLogger(PinyinResource.class
			.getName());

	/**
	 * 获取资源属性
	 * 
	 * @param resourceName
	 *            资源文件
	 * @return 属性对象
	 */
	private static Properties getResource(String resourceName) {

		ZipInputStream zip = new ZipInputStream(
				PinyinResource.class.getResourceAsStream(resourceName));

		try {
			zip.getNextEntry();
			Properties p = new Properties();
			p.load(zip);
			zip.close();
			return p;

		} catch (IOException e) {
			logger.log(Level.WARNING, "IOException in loading PinyinResource", e);
		}
		return null;
	}
	
	/**
	 * 获取拼音表属性
	 * @return
	 */
	protected static Properties getPinyinTable() {
		String resourceName = "/data/pinyin.db";
		return getResource(resourceName);
	}
	
	/**
	 * 获取多音字表属性
	 * @return
	 */
	protected static Properties getMultiPinyinTable() {
		String resourceName = "/data/mutil_pinyin.db";
		return getResource(resourceName);
	}
	/**
	 * 获取繁体简体字属性
	 * @return
	 */
	protected static Properties getChineseTable() {
		String resourceName = "/data/chinese.db";
		return getResource(resourceName);
	}
	
}

文件写入测试类

package test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Properties;

import org.lor.pinyin.PinyinResource;

public class ReadPropertiesTest extends PinyinResource {

	public static void main(String[] args) throws IOException {

		Properties p = getChineseTable();//getMultiPinyinTable();//getPinyinTable()
		StringBuffer buffer = new StringBuffer(p.toString());

		String charset = "UTF-8";
		String file = "F:/chinese.txt";
		FileOutputStream outputStream = new FileOutputStream(file);
		OutputStreamWriter writer = new OutputStreamWriter(outputStream,charset);
		try {
			writer.write(buffer.toString());
		} finally {
			writer.close();
		}

	}
}

最后可以看到三个文件的内容了。

截图如下



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值