Java壓縮JS、CSS併合並,網上收集彙總

代碼一:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章