一般的json文件拥有很多的空格和注释,虽然读起来比较方便,但是在运行的时候是要占一些内存的。

于是json压缩工具就应运而生了,这个工具是用java做的,原理是:

1:在Eclipse中导出一个可运行的jar文件

2:用python运行这个jar文件,并向这个jar文件的运行程序传一些main方法的参数(一般只传路径就可以了)

//bat文件的代码如下:

set assetsAPath="..\javaOutput\assets\uijson" 原json文件路径

set assetsBPath="..\javaOutput\assets\uijson\\"  压缩后的json文件路径

set targetJar="JSONMinify.jar"

cd ./lang

java -jar lib/JSONMinify.jar

cd ..

cd ./tools

java -jar %targetJar% resVersion=%resVersion% assetsAPath=%assetsAPath% assetsBPath=%assetsBPath%

pause

//java代码如下

package com.pack;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import com.zhaohe.download.ResourceDownloader;

public class JSONMinify {

static ArrayList fileName;

public static void main(String[] args) throws Exception {

initArgs(args);

String fileData1 = assetsAPath;

String fileDatas2 = assetsBPath;

fileName = new ArrayList();

File folder = new File(fileDatas2);

List filesPath = getAllFile(fileData1, false);

System.err.println(getAllFile(fileData1, false).size());

System.err.println(fileData1);

for (int i = 0; i < getAllFile(fileData1, false).size(); i++) {

System.err.println(filesPath.get(i));

File file = new File(filesPath.get(i));// 需要读取的文件

File file1 = new File(fileDatas2, fileName.get(i));// 需要写进去的文件

String fileContext = txt2String(file);// 文件内容

file.delete();

if (!file1.exists()) {

file.createNewFile();

}

PrintWriter out1 = new PrintWriter(new BuffewedWriter(new OutputStreamWriter(new FileOutputStream(fileDatas2+fileName.get(i)),"utf-8")));

out1.write(minify(fileContext));

out.write(minify(fileContext));

out.close();

}

}

private static final String manifestFileName = "assetsManifest.txt";

private static final String remoteVersionFile = "assetsVersion.txt";

private static final String lcoalVersionFile = "localAssetsVersion.txt";

private static String version = "1.0.2";

private static String assetsAPath = "..\\android\\assets\\uiname\\";

private static String assetsBPath = "..\\android\\assets\\uijson\\";

private static String rootFolder = ".\\packages";

private static String cdnUrl = "http://www.mathmt.com";

private static String serverID = "12";

private static String resVersion = String.valueOf(ResourceDownloader.RES_TYPE_CURRENT);

public static void initArgs(String args[]) {

if (args != null) {

for (String arg : args) {

String[] keyValue = arg.split("=");

final String key = keyValue[0];

final String value = keyValue[1];

if ("targetVersion".equals(key)) {

version = value;

} else if ("assetsAPath".equals(key)) {

assetsAPath = value;

} else if ("assetsBPath".equals(key)) {

assetsBPath = value;

} else if ("cdnUrl".equals(key)) {

cdnUrl = value;

} else if ("rootFolder".equals(key)) {

rootFolder = value;

} else if ("serverID".equals(key)) {

serverID = value;

} else if ("resVersion".equals(key)) {

resVersion = value;

} else {

System.out.println("Unknown key:" + key);

}

}

}

}

public static boolean deleteDir(String path) {

File file = new File(path);

if (!file.exists()) {// 判断是否待删除目录是否存在

return false;

}

String[] content = file.list();// 取得当前目录下所有文件和文件夹

for (String name : content) {

File temp = new File(path, name);

if (temp.isDirectory()) {// 判断是否是目录

deleteDir(temp.getAbsolutePath());// 递归调用,删除目录里的内容

temp.delete();// 删除空目录

} else {

if (!temp.delete()) {// 直接删除文件

temp.delete();

System.err.println("Failed to delete " + name);

}

}

}

return true;

}

/*

* 读取txt文件的内容

*

* @param file 想要读取的文件对象

*

* @return 返回文件内容

*/

public static String txt2String(File file) {

StringBuilder result = new StringBuilder();

try {

BufferedReader br = new BufferedReader(new FileReader(file));// 构造一个BufferedReader类来读取文件

String s = null;

while ((s = br.readLine()) != null) {// 使用readLine方法,一次读一行

result.append(System.lineSeparator() + s);

}

br.close();

} catch (Exception e) {

e.printStackTrace();

}

return result.toString();

}

/**

* 以行为单位读取文件,常用于读面向行的格式化文件

*/

public static void readFileByLines(String fileName) {

File file = new File(fileName);

BufferedReader reader = null;

try {

System.out.println("以行为单位读取文件内容,一次读一整行:");

reader = new BufferedReader(new FileReader(file));

String tempString = null;

int line = 1;

// 一次读入一行,直到读入null为文件结束

while ((tempString = reader.readLine()) != null) {

// 显示行号

System.out.println("line " + line + ": " + tempString);

line++;

}

reader.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (reader != null) {

try {

reader.close();

} catch (IOException e1) {

}

}

}

}

/**

* 获取路径下的所有文件/文件夹

*

* @param directoryPath

* 需要遍历的文件夹路径

* @param isAddDirectory

* 是否将子文件夹的路径也添加到list集合中

* @return

*/

public static List getAllFile(String directoryPath, boolean isAddDirectory) {

List list = new ArrayList();

File baseFile = new File(directoryPath);

if (baseFile.isFile() || !baseFile.exists()) {

return list;

}

File[] files = baseFile.listFiles();

for (File file : files) {

if (file.isDirectory()) {

if (isAddDirectory) {

list.add(file.getAbsolutePath());

}

list.addAll(getAllFile(file.getAbsolutePath(), isAddDirectory));

} else {

list.add(file.getAbsolutePath());

fileName.add(file.getName());

}

}

return list;

}

public static String minify(String jsonString) {

boolean in_string = false;

boolean in_multiline_comment = false;

boolean in_singleline_comment = false;

char string_opener = 'x';

StringBuilder out = new StringBuilder();

for (int i = 0; i < jsonString.length(); i++) {

char c = jsonString.charAt(i);

String cc = jsonString.substring(i, Math.min(i + 2, jsonString.length()));

if (in_string) {

if (c == string_opener) {

in_string = false;

out.append(c);

} else if (c == '\\') {

out.append(cc);

++i;

} else

out.append(c);

} else if (in_singleline_comment) {

if (c == '\r' || c == '\n')

in_singleline_comment = false;

} else if (in_multiline_comment) {

if (cc.equals("*/")) {

in_multiline_comment = false;

++i;

}

} else {

if (cc.equals("/*")) {

in_multiline_comment = true;

++i;

} else if (cc.equals("//")) {

in_singleline_comment = true;

++i;

} else if (c == '"' || c == '\'') {

in_string = true;

string_opener = c;

out.append(c);

} else if (!Character.isWhitespace(c))

out.append(c);

}

}

return out.toString();

}

}

java压缩json_Json压缩工具相关推荐

  1. java 压缩技术_Java压缩技术(三) ZIP解压缩——Java原生实现

    JavaEye的朋友跟我说:"你一口气把ZIP压缩和解压缩都写到一个帖子里,我看起来很累,不如分开好阅读".ok,面向读者需求,我做调整,这里单说ZIP解压缩! 相关链接: Jav ...

  2. Java压缩技术(三) ZIP解压缩——Java原生实现

    转载自   Java压缩技术(三) ZIP解压缩--Java原生实现 解压缩与压缩运作方式相反,原理大抵相同,由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInp ...

  3. Java压缩技术(二) ZIP压缩——Java原生实现

    转载自   Java压缩技术(二) ZIP压缩--Java原生实现 查过相关资料后才知道,ZIP应该算作归档类的压缩算法,每一门学科都可深可浅! 闲言少叙,先说ZIP压缩.  zip压缩需要通过Zip ...

  4. Java 压缩/混淆 JavaScript 代码

    基本上都是自己写的工具构建前端工程,压缩/混淆 JavaScript 代码的工具必不可少.我们是 Java 平台的,就是说用 Java 去压缩 JS,这样比较方便.虽然咱们可以外部调用 node 等专 ...

  5. Zip压缩和解压缩工具类

    依赖第三方jar包:ant-1.7.1.jar /** * @Title: ZipUtils.java * @Package com.sz.mt.test.zip * @Description: TO ...

  6. java如何压缩html代码,java 压缩html文件

    java 压缩html文件 [2021-02-03 16:32:07]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  7. java 压缩字节流_java 压缩 字节流 ,C#解压的问题

    给现有的.Net项目增加安卓平台客户端, 目前使用的 ComponentAce.Compression.Libs.zlib 压缩解压字节流 C#代码片段: ... ZOutputStream outZ ...

  8. Java压缩技术(四) GZIP——Java原生实现

    转载自  Java压缩技术(四) GZIP--Java原生实现 GZIP常常用在linxu环境下,是一种非常简单的压缩算法.在Java实现API中,它仅仅包含两个实现类:GZIPInputStream ...

  9. Java压缩技术(五) GZIP相关——浏览器解析

    转载自   Java压缩技术(五) GZIP相关--浏览器解析 GZIP本身就是一种网络流压缩算法,而且应用相当广泛.如果网络访问过程中,其数据流较大,势必降低网络访问效率,此时就需要考虑使用压缩!当 ...

最新文章

  1. hadoop集群运维碰到的问题汇总
  2. 对软连接进行cp,rm
  3. 个人贷款的条件、流程和注意事项
  4. boost::fusion::result_of::as_vector用法的测试程序
  5. 【转】测试过程管理案例6---如何做项目的测试经理?
  6. linux so文件统一目录,linux加载指定目录的so文件
  7. oracle11gr2配置监听,Windows环境配置Oracle 11gR2 Listener
  8. 【不体系】布谷鸟过滤器
  9. LeetCode(872)——叶子相似的树(JavaScript)
  10. python 中读取yaml
  11. 油猴脚本插件 千图网无水印原图素材
  12. 数据库系统概论第五版 课后习题答案王珊
  13. 线性判别分析LDA算法与python实现
  14. php源码安装教程宝塔,宝塔版-源码安装教程
  15. openwrt的ipk包开发
  16. ZCMU-1345: 国际象棋
  17. Redis集群 install安装
  18. 英特尔收购网络芯片创业公司Barefoot Networks
  19. PHP 常用字符串、数组处理函数
  20. error lnk2005解决办法

热门文章

  1. 使用Nightwatch进行E2E测试
  2. Java | 图形界面中paint,repaint,paintcomponent等函数的理解
  3. COMSOL如何绘制空间某点声压级曲线
  4. npm-upgrade : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\npm-upgrade.ps1
  5. 什么是数据库?MySQL数据库是什么?
  6. 每日分享 hive hue 报错Error while compiling statement: FAILED: SemanticException Error in parsing
  7. Git(六):基本命令(3):储藏、标签、拉取、子模块
  8. 关系型数据库典型映射关系,一对多,多对多
  9. histeq matlab原理,MATLAB中histeq的原理以及自写的具体实现函数
  10. wordcloud词云图(python)