Java 压缩Html、Css、Javascript

文章描述了一个Java工具类,使用不同版本的库(如ClosureCompiler、HTMLcompressor和yuicompressor)进行JavaScript、HTML和CSS的内容压缩。代码示例展示了如何压缩内容并处理临时文件的创建和清理。
摘要由CSDN通过智能技术生成
<!--jdk8最多支持到这个版本,在以上版本就是需要jdk11才行-->
<!-- https://mvnrepository.com/artifact/com.google.javascript/closure-compiler -->
<dependency>
    <groupId>com.google.javascript</groupId>
    <artifactId>closure-compiler</artifactId>
    <version>v20220502</version>
</dependency>
public class ContentConverUtil {
    private static File tempJavascriptDir = FileUtil.mkdir("temp/generateCode/javascript");

    /**
     * Javascript压缩
     *
     * @param javascriptCotnent 待压缩的javascript内容
     * @return
     */
    @SneakyThrows
    public static String javascriptCompressor(String javascriptCotnent) {
        String result = javascriptCotnent;
        if (StrUtil.isNotBlank(javascriptCotnent)) {
            File rowjavascriptCotnentTempFile = FileUtil.createTempFile(tempJavascriptDir);
            File compressorjavascriptCotnentTempFile = FileUtil.file(tempJavascriptDir, StrUtil.format("{}.min.js", IdUtil.getSnowflakeNextIdStr()));
            try {
                FileUtil.writeUtf8String(javascriptCotnent,rowjavascriptCotnentTempFile);
                String[] args = new String[]{"--js", FileUtil.getAbsolutePath(rowjavascriptCotnentTempFile), "--js_output_file", FileUtil.getAbsolutePath(compressorjavascriptCotnentTempFile), "--warning_level", "QUIET"};
                Constructor<CommandLineRunner> constructor = ReflectUtil.getConstructor(CommandLineRunner.class, String[].class);
                CommandLineRunner commandLineRunner = constructor.newInstance((Object)args);
                ReflectUtil.invoke(commandLineRunner, "doRun", new Object[0]);
                result = FileUtil.readString(compressorjavascriptCotnentTempFile, StandardCharsets.UTF_8);
            } finally {
                FileUtil.del(rowjavascriptCotnentTempFile);
                FileUtil.del(compressorjavascriptCotnentTempFile);
            }
        }
        return result;
    }

}    
<!-- https://mvnrepository.com/artifact/com.googlecode.htmlcompressor/htmlcompressor -->
<dependency>
    <groupId>com.googlecode.htmlcompressor</groupId>
    <artifactId>htmlcompressor</artifactId>
    <version>1.5.2</version>
</dependency>
public class ContentConverUtil {
    /**
     * HTML压缩
     * @param htmlCotnent
     * @return
     */
    @SneakyThrows
    public static String htmlCompressor(String htmlCotnent) {
        if(StrUtil.isNotBlank(htmlCotnent)) {
            HtmlCompressor htmlCompressor = new HtmlCompressor();
            return htmlCompressor.compress(htmlCotnent);
        }
        return htmlCotnent;
    }
}    
        <!-- 当前仅用于css压缩,里面的js压缩工具已经没啥作用 https://mvnrepository.com/artifact/com.yahoo.platform.yui/yuicompressor -->
        <dependency>
            <groupId>com.yahoo.platform.yui</groupId>
            <artifactId>yuicompressor</artifactId>
            <version>2.4.8</version>
        </dependency>
public class ContentConverUtil {

    /**
     * CSS压缩
     *
     * @param cssCotnent 待压缩的css内容
     * @return
     */
    @SneakyThrows
    public static String cssCompressor(String cssCotnent) {
        if (StrUtil.isNotBlank(cssCotnent)) {
            BufferedReader reader = null;
            ByteArrayOutputStream resultOutputStream = null;
            Writer writer = null;
            try {
                reader = IoUtil.getReader(new ByteArrayInputStream(cssCotnent.getBytes()), StandardCharsets.UTF_8);
                CssCompressor cssCompressor = new CssCompressor(reader);
                resultOutputStream = new ByteArrayOutputStream();
                writer = new OutputStreamWriter(resultOutputStream, StandardCharsets.UTF_8);
                cssCompressor.compress(writer, -1);
            } finally {
                IoUtil.close(reader);
                IoUtil.close(writer);  // 必须先关闭流,字符数组才有数据
            }
            cssCotnent = IoUtil.toStr(resultOutputStream, StandardCharsets.UTF_8);
        }
        return cssCotnent;
    }

}    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值