最近因为项目的国际化的需要,需要对整个项目的100来个插件做国际化,这是一件痛苦的事情,因为纯体力劳动。为了省点工作量,想着能不能写个程序批处理了,减少点工作量,于是就有了下面的代码。 
1.读取指定的(.java)文件: 
 
public static String readFile(String path) throws IOException { 
File f = new File(path); 
StringBuffer res = new StringBuffer(); 
String filePathStr = f.getPath(); 
System.out.println("获取文件的路径:::::::"+filePathStr); 
FileInputStream fis = new FileInputStream(f); 
InputStreamReader isr = new InputStreamReader(fis,Charset.forName("GBK")); //以gbk编码打开文本文件 
BufferedReader br = new BufferedReader(isr, 8192 * 8); 
String line = null; 
int linenum = 0; 
while((line=br.readLine())!=null) { 
linenum ++; 
res.append(line+"此处可以添加你自己的字符串处理逻辑"+"\r\n"); 
} 
br.close(); 
return res.toString(); 
} 
 2.读取的文件内容信息写到指定的(.java)文件  
public static boolean writeFile(String cont, String path) { 
try { 
File dist = new File(path); 
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(dist),"GBK"); 
writer.write(cont); 
writer.flush(); 
writer.close(); 
return true; 
} catch (IOException e) { 
e.printStackTrace(); 
return false; 
} 
} 
 3.查找指定目录下所有符合条件的.java文件,并更新文件信息  
/** 
* 查找文件 
* @param f 
* @throws IOException 
*/ 
public static void findFile(File f) throws IOException { 
if(f.exists()) { 
if(f.isDirectory()) { 
for(File fs:f.listFiles(ff)) { 
findFile(fs); 
} 
} else { 
updateFile(f); 
} 
} 
} 
/** 
* 逐行读java文件 
* @param f 
* @throws IOException 
*/ 
private static void updateFile(File f) throws IOException { 
String filePathStr = f.getPath(); 
System.out.println("开始读取文件的路径:::::::"+filePathStr); 
FileInputStream fis = new FileInputStream(f); 
InputStreamReader isr = new InputStreamReader(fis,Charset.forName("GBK")); //以gbk编码打开文本文件 
BufferedReader br = new BufferedReader(isr, 8192 * 8); 
String line = null; 
int linenum = 0; 
StringBuffer res = new StringBuffer(); 
while((line=br.readLine())!=null) { 
String updateStr= updateStr(line); 
res.append(updateStr+"\r\n"); 
if(!line.trim().equals(updateStr.trim())) { 
linenum ++; 
} 
} 
br.close(); 
//如果文件有修改,则修改后的文件,覆盖原有文件 
if(linenum>0) { 
System.out.println("============================="); 
System.out.println("filePathStr:"+filePathStr); 
System.out.println("文件修改了:"+linenum+"处。"); 
System.out.println("============================="); 
String cont = res.toString(); 
ReadWriteFile.write(cont, filePathStr); 
} 
} 
/** 
* 验证读取的字符串信息 
* 和更新字符串信息 
* @param str 
*/ 
private static String updateStr(String str) { 
//判断字符串是否是需要更新的字符串 
boolean isok = filterStr(str); 
int strNum = StringValidation.strNum(str, StringValidation.ch); 
if(isok || strNum == 0) { 
return str; 
} else { 
String temp = ""; 
for(int i=1;i<=strNum/2;i++) { 
temp += " //$NON-NLS-"+i+"$"; //需要添加的字符 
} 
str = str+temp; 
} 
return str; 
} 
//过滤文件类型 
private static FileFilter ff = new FileFilter() { 
public boolean accept(File pathname) { 
String path = pathname.getName().toLowerCase(); 
logger.info("FileFilter path::::"+path); 
//只匹配 .java 结尾的文件 
if (pathname.isDirectory() || path.endsWith(".java")) { 
return true; 
} 
return false; 
} 
}; 
/** 
* 过滤掉不需要处理的字符串 
* @param str 
* @return 
*/ 
public static boolean filterStr(String str) { 
boolean isok = false; 
//过滤字符串 
isok = (str.indexOf("import ")>=0) 
|| (str.indexOf("package ")>=0) 
|| (str.indexOf(" class ")>=0) 
|| (str.indexOf("//$NON-NLS")>=0) 
|| (str.indexOf("//")==0) 
|| (str.indexOf("/*")>=0) 
|| (str.indexOf("*")>=0) 
|| (str.trim().indexOf("@")==0) 
|| (str.indexOf("\"")==-1) 
|| ("".equals(str)) 
|| isCh(str); 
return isok; 
} 
/** 
* 验证字符串是否含有中文字符 
* @param str 
* @return 
*/ 
public static boolean isCh(String str) { 
Pattern pa = Pattern.compile("[\u4E00-\u9FA0]"); 
Matcher m = pa.matcher(str); 
boolean isok = m.find(); 
return isok; 
} 
 总结:当我们拿到一个别人给的需求,先不要急于去处理,先分析,再分析,然后做出最优的解决方案,处理好这项工作。