刚来公司实习,接到的第一个任务,是把一个项目中的中文,全部换成英文。这个项目是公司几年前做的,没有用到国际化,换起来相当麻烦。本来我想手工改改算了,改了一个半小时,才发现项目之巨大,JSP页面共有几百个,手工不可能完成任务。于是想到写个程序来做,毕竟曾经也学过一天的I/O。
于是就有了以下代码。我用的JDK是1.6的,1.5的应该也没问题,再低了就跑不起来了
主要是这个工具类:
Java代码
1 package com.hc;
2
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.FileFilter;
6 import java.io.FileInputStream;
7 import java.io.FileNotFoundException;
8 import java.io.InputStreamReader;
9 import java.io.UnsupportedEncodingException;
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.List;
13
14 public class Util {
15
16 // 判断一个unicode码是不是中文
17 public static boolean isChinese(int charInt) {
18 if (charInt > 19967 && charInt < 40870) {
19 return true;
20 } else {
21 return false;
22 }
23 }
24
25 // 字节流转换成字符流,同时转换编码
26 public static BufferedReader changeEncoding(File file)
27 throws FileNotFoundException, UnsupportedEncodingException {
28 FileInputStream fin = new FileInputStream(file);
29 InputStreamReader in = new InputStreamReader(fin, "gb2312");
30 BufferedReader br = new BufferedReader(in);
31 return br;
32 }
33
34 // 得到该文件夹,及其所有子文件夹下的所有目标文件
35 public static List<File> getAllFiles(File file) {
36 List<File> valueFiles = new ArrayList<File>();
37 File[] fs = file.listFiles();
38 for (int i = 0; i < fs.length; i++) {
39 if (fs[i].isDirectory()) {
40 // 递归得到每个子文件夹下的目标文件
41 valueFiles.addAll(getAllFiles(fs[i]));
42 }
43 }
44 // 把file文件夹下的目标文件放进去
45 valueFiles.addAll(Arrays.asList(getFiles(file)));
46 return valueFiles;
47 }
48
49 // 得到一个文件夹下的目标文件,不包括子文件夹
50 private static File[] getFiles(File file) {
51 // 图个方便,用匿名类了
52 FileFilter filter = new FileFilter() {
53 String regex = "//w*//.jsp";
54
55 public boolean accept(File pathname) {
56 return pathname.getName().matches(regex);// 文件后缀为.jsp
57 }
58 };
59 File[] fs = file.listFiles(filter);
60 return fs;
61 }
62
63 // 提取某一文件中的所有中文
64 public static List<String> getChinese(File file) {
65 try {
66 List<String> valueList = new ArrayList<String>();
67 BufferedReader charArrayReader = Util.changeEncoding(file);
68 int i = -1;
69 StringBuilder sBuilder = new StringBuilder();
70 do {
71 i = charArrayReader.read();
72 // System.out.print((char)i);
73
74 // 如果是中文
75 if (Util.isChinese(i)) {
76 sBuilder.append((char) i);
77 }
78 // 如果不是中 文
79 else {
80 // 如果是中文 后的第一个
81 if (sBuilder.length() > 0) {
82 // 把中文加进去
83 valueList.add(sBuilder.toString());
84
85 // 清除Builder里面的中文
86 sBuilder.delete(0, sBuilder.length());
87 }
88 // 如果不是中文的结束,什么都不用做
89 }
90 } while (i != -1);
91 System.out.println(valueList.size());
92 return valueList;
93 } catch (Exception e) {
94 // 不做异常处理
95 return null;
96 }
97
98 }
99
100 }
下面是调用:
Java代码
101 package com.hc;
102
103 import java.io.File;
104 import java.util.ArrayList;
105 import java.util.List;
106
107 public class Test {
108
109 public static void main(String[] args) {
110 // 该文件夹下的所有目标文件
111 File file = new File("E:/FirstWork/rgsZS/webcontext/");
112
113 // 得到所有目标文件
114 List<File> fileList = Util.getAllFiles(file);
115 System.out.println("共有JSP文件:" + fileList.size() + "个");
116
117 // 提取所有文件中的中文
118 List<String> strList = new ArrayList<String>();
119 for (File file2 : fileList) {
120 strList.addAll(Util.getChinese(file2));
121 }
122
123 //把提取出来的中文打出来
124 for (String string : strList) {
125 System.out.println(string);
126 }
127
128 }
129
130 }