代碼一:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.List;
import java.util.StringTokenizer;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.mozilla.javascript.ErrorReporter;
import org.mozilla.javascript.EvaluatorException;
import com.yahoo.platform.yui.compressor.JavaScriptCompressor;
public class JSControl extends HttpServlet {
String alljs;
String jsPath = "js";
public JSControl() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String allPath = getWebrootPath() + jsPath + File.separator; //獲取JS存放目錄的絕對路徑
String minFilePath = allPath + alljs + ".min.js"; //生成的壓縮文件名字
File minFile = new File(minFilePath);
if (!minFile.exists()) {//判斷是否已經生成了,如沒有這個文件既生成
Long startTime = System.currentTimeMillis();
String tempFilePath = allPath + alljs + ".js"; //先合併再壓縮,所以這個是合併時的臨時文件名
StringBuffer mergeNr = new StringBuffer();
alljs = request.getParameter("alljs");
StringTokenizer st = new StringTokenizer(alljs, ",");
File tempFile = new File(tempFilePath);
while (st.hasMoreTokens()) {
String jsName = st.nextToken();
File tempJsFile = new File(allPath + jsName + ".js");
if (tempJsFile.exists()) {
List<String> stList = FileUtils.readLines(tempJsFile,
"UTF-8");
for (String str : stList) {
mergeNr.append(str).append("\\n"); //這裏之前我沒加\\n丫的我知道錯了,居然都被註釋了.哈哈!
}
}
}
FileUtils.writeStringToFile(tempFile, mergeNr.toString(), "UTF-8",
false);
Reader reader = new InputStreamReader(new FileInputStream(tempFile),
"UTF-8");
Writer writer = new OutputStreamWriter(new FileOutputStream(minFilePath),
"UTF-8");
//這個是YUI Compressor的壓縮方法.
JavaScriptCompressor compressor = new JavaScriptCompressor(reader,
new ErrorReporter() {
public void warning(String message, String sourceName,
int line, String lineSource, int lineOffset) {
if (line < 0) {
System.err.println("\\n[WARNING] " + message);
} else {
System.err.println("\\n[WARNING] " + line + ':'
+ lineOffset + ':' + message);
}
}
public void error(String message, String sourceName,
int line, String lineSource, int lineOffset) {
if (line < 0) {
System.err.println("\\n[ERROR] " + message);
} else {
System.err.println("\\n[ERROR] " + line + ':'
+ lineOffset + ':' + message);
}
}
public EvaluatorException runtimeError(String message,
String sourceName, int line, String lineSource,
int lineOffset) {
error(message, sourceName, line, lineSource,
lineOffset);
return new EvaluatorException(message);
}
});
compressor.compress(writer, -1, true, false, false, false);
reader.close();
writer.close();
tempFile.delete();
System.out.println("壓縮時間>>>>>>>>>"
+ (System.currentTimeMillis() - startTime));
}
// response.sendRedirect(request.getContextPath() + "/js/" + alljs
// + ".min.js");
getServletContext().getRequestDispatcher(
request.getContextPath() + "/js/" + alljs + ".min.js").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
public void init() throws ServletException {
}
private final static String getWebrootPath() {
String root = JSControl.class.getResource("/").getFile();
try {
root = new File(root).getParentFile().getParentFile()
.getCanonicalPath();
root += File.separator;
} catch (IOException e) {
throw new RuntimeException(e);
}
return root;
}
}
代碼二:
package app.user.model;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;
import org.junit.Test;
import org.mozilla.javascript.ErrorReporter;
import org.mozilla.javascript.EvaluatorException;
import com.yahoo.platform.yui.compressor.CssCompressor;
import com.yahoo.platform.yui.compressor.JavaScriptCompressor;
public class TestJsZip{
File dir=new File("E:\\workspace\\JSCompress\\test.js");
int linebreakpos = -1;
boolean munge=true;
boolean verbose=false;
boolean preserveAllSemiColons=false;
boolean disableOptimizations=false;
@Test
public void testMain() throws Exception{
checkFile(dir);
}
public void checkFile(File file) throws Exception{
if(file.getName().endsWith(".svn"))
return;
if(file.isFile()){
jsZip(file);
return;
}
File[] files=file.listFiles();
if(files==null||files.length==0)
return;
for(File f:files){
if(file.getName().endsWith(".svn"))
return;
if(file.isFile()){
jsZip(file);
continue;
}
checkFile(f);
}
}
public void jsZip(File file) throws Exception{
String fileName=file.getName();
System.out.println(fileName);
if(fileName.endsWith(".js")==false&&fileName.endsWith(".css")==false){
return;
}
Reader in=new FileReader(file);
String filePath=file.getAbsolutePath();
File tempFile=new File(filePath+".tempFile");
Writer out=new FileWriter(tempFile);
if(fileName.endsWith(".js")){
JavaScriptCompressor jscompressor=new JavaScriptCompressor(in, new ErrorReporter() {
public void warning(String message, String sourceName,
int line, String lineSource, int lineOffset) {
if (line < 0) {
System.err.println("\n[WARNING] " + message);
} else {
System.err.println("\n[WARNING] " + line + ':' + lineOffset + ':' + message);
}
}
public void error(String message, String sourceName,
int line, String lineSource, int lineOffset) {
if (line < 0) {
System.err.println("\n[ERROR] " + message);
} else {
System.err.println("\n[ERROR] " + line + ':' + lineOffset + ':' + message);
}
}
public EvaluatorException runtimeError(String message, String sourceName,
int line, String lineSource, int lineOffset) {
error(message, sourceName, line, lineSource, lineOffset);
return new EvaluatorException(message);
}
});
jscompressor.compress(out, linebreakpos, munge, verbose, preserveAllSemiColons, disableOptimizations);
}else if(fileName.endsWith(".css")){
CssCompressor csscompressor = new CssCompressor(in);
csscompressor.compress(out, linebreakpos);
}
out.close();
in.close();
file.delete();
tempFile.renameTo(file);
tempFile.delete();
}
}
該程序使用了yahoo的YUI組件,下載地址:http://yuilibrary.com/downloads/#yuicompressor,英文幫助文檔地址:http://developer.yahoo.com/yui/compressor/,所以測試該代碼的時候請先去下載該組件
代碼三:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import org.mozilla.javascript.ErrorReporter;
import org.mozilla.javascript.EvaluatorException;
import com.yahopressor.CssCompressor;
import com.yahopressor.JavaScriptCompressor;
public class TestJsZip {
//要處理的目錄
static File dir=new File("E:\\js");
static int linebreakpos = -1;
static boolean munge=true;
static boolean verbose=false;
static boolean preserveAllSemiColons=false;
static boolean disableOptimizations=false;
public static void main(String[] args) throws Exception{
checkFile(dir);
}
public static void checkFile(File file) throws Exception{
File[] files=file.listFiles();
if(files==null||files.length==0) return;
for(File f:files){
if(f.getName().endsWith(".svn")){ continue; }
if(f.isFile()){
jsZip(f);
System.out.println("文件==="+f.getName());
continue;
}else{
System.out.println("目錄=="+f.getName()); checkFile(f);
}
}
}
public static void jsZip(File file) throws Exception{
String fileName=file.getName();
if(!fileName.endsWith(".js")&&!fileName.endsWith(".css")){
return;
}
Reader in = new InputStreamReader(new FileInputStream(file),"utf-8");
String filePath=file.getAbsolutePath();
File tempFile=new File(filePath+".tempFile");
Writer out = new OutputStreamWriter(new FileOutputStream(tempFile),"utf-8");
if(fileName.endsWith(".js")){
JavaScriptCompressor jscompressor=new JavaScriptCompressor(in, new ErrorReporter() {
public void warning(String message, String sourceName, int line, String lineSource, int lineOffset) {
if (line < 0) {
System.err.println("\n[WARNING] " + message);
} else {
System.err.println("\n[WARNING] " + line + ':' + lineOffset + ':' + message);
}
}
public void error(String message, String sourceName, int line, String lineSource, int lineOffset) {
if (line < 0) {
System.err.println("\n[ERROR] " + message);
} else {
System.err.println("\n[ERROR] " + line + ':' + lineOffset + ':' + message);
}
}
public EvaluatorException runtimeError(String message, String sourceName, int line, String lineSource, int lineOffset) {
error(message, sourceName, line, lineSource, lineOffset);
return new EvaluatorException(message);
}
});
jscompressor.compress(out, linebreakpos, munge, verbose, preserveAllSemiColons, disableOptimizations);
}else if(fileName.endsWith(".css")){
CssCompressor csscompressor = new CssCompressor(in);
csscompressor.compress(out, linebreakpos);
}
out.close();
in.close();
file.delete();
tempFile.renameTo(file);
tempFile.delete();
}
}
附件:http://download.csdn.net/detail/maci_hotesion/9383003
Eclipse插件壓縮JS、CSS,詳情關注:http://jscompressor.oncereply.me