Java压缩JS、CSS并合并,网上收集汇总

来源:互联网 发布:实况足球2016捏脸数据 编辑:程序博客网 时间:2024/06/02 03:53

代码一:

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


1 0
原创粉丝点击