出于工作中方便偷懒的原因,写了个很简单的小工具,用来把asp,html文件转换成jsp文件,并把编码转换成UTF-8。
package com.javaeye.sun2009.aspconvertjsp;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 把ASP文件扩展名转换成JSP扩展名,并把编码转换成UTF-8
* 把HTML文件编码转换成UTF-8
* @author sun2009
*/
public class ConvertFile {
private final Logger logger = LoggerFactory.getLogger(ConvertFile.class);
/**
* 缓存区大小
*/
private static final int BUFFER_SIZE = 1024 * 30;
/**
* 文件目录
*/
private File fileDirectory;
/**
* 输入流
*/
private InputStreamReader in;
/**
* 输出流
*/
private OutputStreamWriter out;
/**
* 文件过滤器
*/
private MyFileFilter myFileFilter = new MyFileFilter();
/**
* 构造一个File对象,指向文件目录
* @param filePath 文件目录
*/
public void init(String filePath) throws NullPointerException {
try {
fileDirectory = new File(filePath);
} catch (NullPointerException e) {
logger.error("文件目录不能为空!", e);
throw new NullPointerException("文件目录不能为空!");
}
}
/**
* 执行转换
*/
public void convert() {
List<File> files = listFiles(fileDirectory);
for (File file : files) {
try {
in = new InputStreamReader(new FileInputStream(file), "GB2312");
StringBuilder builder = new StringBuilder();
char[] buffer = new char[BUFFER_SIZE];
int len = -1;
while ((len = in.read(buffer)) != -1) {
builder.append(new String(buffer, 0, len));
}
String extendName = file.getName().substring(file.getName().lastIndexOf("."));
String fileContent = builder.toString();
Pattern p = null;
Matcher matcher = null;
//如果不是html文件的话,就加个JSP头
if (!"html".equalsIgnoreCase(extendName) || !"htm".equalsIgnoreCase(extendName)) {
p = Pattern.compile("^<%\\s*@\\s*page.*contentType=.*%>", Pattern.CASE_INSENSITIVE);
matcher = p.matcher(fileContent);
if (!matcher.find()) {
String header = "<%@ page contentType=\"text/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%>";
fileContent = header + fileContent;
}
}
p = Pattern.compile("gb2312", Pattern.CASE_INSENSITIVE);
matcher = p.matcher(fileContent);
fileContent = matcher.replaceAll("UTF-8");
p = Pattern.compile("gbk", Pattern.CASE_INSENSITIVE);
matcher = p.matcher(fileContent);
fileContent = matcher.replaceAll("UTF-8");
String fileName = file.getPath();
if (fileName.toLowerCase().endsWith(".asp")) {
fileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".jsp";
}
out = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
out.write(fileContent);
} catch (FileNotFoundException e) {
logger.error("{}文件没有找到!", e);
} catch (IOException e) {
logger.error("IO异常!");
System.exit(1);
} finally {
try {
out.close();
in.close();
} catch (Exception e) {
}
}
}
}
/**
* 列出所有符合要求的文件
* @param directory 目录
* @return List<File>
*/
protected List<File> listFiles(File directory) {
List<File> allFiles = new ArrayList<File>();
File[] files = directory.listFiles(myFileFilter);
if (files != null && files.length > 0) {
for (File file : files) {
if (file.isDirectory()) {
listFiles(file);
} else {
allFiles.add(file);
}
}
}
return allFiles;
}
/**
* 文件过滤器<br/>
* 只允许.asp、.html、.htm或.jsp结尾的文件
*/
public class MyFileFilter implements FileFilter {
public boolean accept(File pathName) {
String fileName = pathName.getName().toLowerCase();
if (fileName.endsWith(".asp") || fileName.endsWith(".html") || fileName.endsWith(".htm") || fileName.endsWith(".jsp")) {
return true;
} else {
return false;
}
}
}
}
调用文件
package com.javaeye.sun2009.aspconvertjsp;
/**
*
* @author sun2009
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ConvertFile cf = new ConvertFile();
cf.init("C:/Documents and Settings/Administrator/桌面/service_mbm/service");
cf.convert();
}
}