Java批量完成对文件夹下全部的css与js压缩,利用yuicompressor

大部分代码我是从网上找的,
只有对文件的遍历是我自己写的;

其实原理十分简单

利用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();
		}
	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值