其实这是实验课的一个课程设计,我把功能完善了一下,并强化了防错功能,于是就写成了下面这个程序。
想要做一个翻译软件的话,本文只是一个入门参考,这里面只给出一个简单的功能,即把一个纯英文的文件 翻译成相应的中文文件,并另外保存成一个新的文件。
笔者不想花费时间去写华丽的界面,只是简单地弹出一些输入框,有兴趣的朋友可以自己去美化或完善一下该软件。
?
package cn.ling.TestTranslate; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.HashMap; import java.util.Map; /** * * 模拟文本翻译软件 * 注意:操作的源文件必须只由英文单词构成,否则会得到意想不到的结果 * @author lingyibin * */ public class TestTranslate { /** * @param args */ public static void main(String[] args) { translate(); } /** * 翻译的主要实现函数 */ public static void translate(){ //得到源文件路径 String srcFileName = ""; srcFileName = javax.swing.JOptionPane.showInputDialog("请您 输入源文件路径!"); File srcFile = new File(srcFileName); //源文件路径不合法 if(!srcFile.exists() || !srcFile.isFile()){ javax.swing.JOptionPane.showMessageDialog(null, "对不起,你输入的源文件路径不合法!"); } //翻译后的文件名,首先得到新文件名,即在原文件名的后面加上"_translated",保留后缀名 int index = srcFileName.lastIndexOf("."); String newFileName = srcFileName.substring(0,index) + "_translated" + srcFileName.substring(index); //得到词库文件路径 String cikuFileName = ""; cikuFileName = javax.swing.JOptionPane.showInputDialog("请您 输入词库文件路径!"); File cikuFile = new File(cikuFileName); //词库文件路径不合法 if(!cikuFile.exists() || !cikuFile.isFile()){ javax.swing.JOptionPane.showMessageDialog(null, "对不起,你输入的词库文件路径不合法!"); } try { String tmpStr = null; String[] strs; //新建一个缓冲流来读取词库文件 BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream(cikuFile))); //用一个MAP来存放键值对 Map<String, String> mapTrn = new HashMap<String, String>(); while((tmpStr = br.readLine()) != null){ //如果未到末尾 且 读到的不是空行 if(!tmpStr.equals("")){ strs = tmpStr.split("="); mapTrn.put(strs[0].toLowerCase(), strs[1]); } } //新建一个字节流来读取源文件 FileInputStream fis = new FileInputStream(srcFile); //新建一个Writer来写入翻译后的字符 OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream(newFileName)); int c; tmpStr = ""; while((c = fis.read()) != -1){ if(!((c>='a' && c<='z') || (c>='A' && c<='Z'))){ if(mapTrn.get(tmpStr.toLowerCase()) != null){ osw.write(mapTrn.get(tmpStr.toLowerCase()).toCharArray()); tmpStr = ""; } if(c != 32) osw.write(c); } else{ tmpStr += (char)c; } } if(mapTrn.get(tmpStr.toLowerCase()) != null){ osw.write(mapTrn.get(tmpStr.toLowerCase()).toCharArray()); tmpStr = ""; } osw.flush(); osw.close(); } catch (Exception e) { //e.printStackTrace(); javax.swing.JOptionPane.showMessageDialog(null, "对不起,源文件读取时出错!"); } } }
?
?然后得自己建一个词库,格式如下:
Love=爱 I=我 China=中国
?
我把这个程序相关的文件都上传到附件中了,有兴趣的朋友可以去测试测试!