大部分代码我是从网上找的,
只有对文件的遍历是我自己写的;
其实原理十分简单
利用yuicompressor已经编好的方法,我们写一个Java程序来调用即可;
yuicompressor-2.4.8.jar封装好的两个类:
JavaScriptCompressor;
CssCompressor;
然后就是底下的程序了:
提醒一句最好把项目插件去掉再来,毕竟那不是自己写的,压缩可能出毛病。
里面的filepath变量是你要执行的目录
另外自己需要new一个新的下面这个类,并执行压缩方法;
ready perfectly!
--------》
package com.cmd;
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 java.util.Arrays;
import java.util.Date;
import java.util.List;
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 ZipJs {
private static final String encoding = "utf-8";
private static final String[] suffixArray = { ".js", ".css" };
// 需要压缩的文件夹(会压缩此文件夹下的所有js、css文件)
private String filePath = "D:\\myfront";
static int linebreakpos = 1000;// -1;换行:负数表示不换行
static boolean munge = true;
static boolean verbose = false;
static boolean preserveAllSemiColons = false;
static boolean disableOptimizations = false;
static Long count = 0L;
/**
* 压缩方法
*/
public void compress() {
init(filePath);
}
// 递归遍历文件夹
public static File[] getAllFile(File f) {
File[] files = null;
if (f.isDirectory()) {
files = f.listFiles();
for (File fx : files) {
if (fx.isDirectory()) {
getAllFile(fx);
continue;
}
compress(fx);
count++;
System.out.println(fx.getName() + "====\n");
}
}
return files;
}
// 初始化,获取文件目录下的所有需要压缩的文件 js css
public static void init(String filePath) {
Date startTime = new Date();
File file = new File(filePath);
getAllFile(file);
Date endTime = new Date();
Long cost = endTime.getTime() - startTime.getTime();
System.out.println("压缩完成,耗时:" + cost + "ms,共压缩文件个数:" + count);
}
// 压缩
public static void compress(File file) {
try {
String fileName = file.getName();
String suffix = fileName.substring(fileName.lastIndexOf("."), fileName.length());
System.out.println(fileName + "======\n" + suffix);
List<String> suffixList = Arrays.asList(suffixArray);
if (suffixList.contains(suffix) && !fileName.endsWith("-min" + suffix)) {
Reader in = new InputStreamReader(new FileInputStream(file), encoding);// 以UTF-8格式读取,否则压缩出来会乱码
String filePath = file.getAbsolutePath();
File tempFile = new File(filePath + ".tempFile");
Writer out = new OutputStreamWriter(new FileOutputStream(tempFile), encoding);
if (fileName.endsWith(".js")) {
// js compressor
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] " + sourceName + "-" + message);
} else {
System.err.println(
"\n[ERROR] " + line + ':' + lineOffset + ':' + sourceName + "-" + 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")) {
// css compressor
CssCompressor csscompressor = new CssCompressor(in);
csscompressor.compress(out, linebreakpos);
}
in.close();
out.close();
file.delete();
tempFile.renameTo(file);
tempFile.delete();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}