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
- Java压缩JS、CSS并合并,网上收集汇总
- JS+CSS Calendar 收集汇总
- 使用gulp压缩并合并AngularJS代码
- java swing 画图并合并生成图片
- cmd复制.java并合并为.txt
- 网上收集MyEclipse优化汇总
- Java 批量导出PPT为图片,并合并生成PDF
- Java生成并合并图片以及base64转图片
- java POI excel导出,并合并单元格设置宽度高度
- shp加载并合并
- Java CSS,JS压缩和缓存
- js工具收集汇总
- JS压缩与CSS压缩
- excel 打印并合并单元格
- 导出并合并相邻单元格
- Linux比较并合并文件
- js/css压缩
- JS CSS 压缩
- 如何解决Windows下sublime text2不能运行python的问题
- javascript 学习一:js语法基础
- python之类之select
- 浅谈Erlang中最常用的编程模式--递归调用
- UVA1008 Piotr's Ants
- Java压缩JS、CSS并合并,网上收集汇总
- 含有定时器的tab栏的切换与函数封装
- String转换为boolean的三种方法
- 使用CocoaPods安装GoogleMaps库后出现的问题及解决
- 此账户无法使用谷歌即时 最简单的使用Google Now方法
- Two Sum II - Input array is sorted
- 编译php系统的一个小问题
- 微软 Hololens 技术解谜(上):如何还原三维场景
- AVL树--C语言实现