zoukankan      html  css  js  c++  java
  • IOS 文件解析

      1 import java.io.BufferedInputStream;
      2 import java.io.File;
      3 import java.io.FileInputStream;
      4 import java.io.IOException;
      5 import java.io.InputStream;
      6 import java.io.StringReader;
      7 import java.util.ArrayList;
      8 import java.util.HashMap;
      9 import java.util.List;
     10 import java.util.zip.ZipEntry;
     11 import java.util.zip.ZipFile;
     12 import java.util.zip.ZipInputStream;
     13 
     14 import org.apache.commons.lang.StringUtils;
     15 import org.apache.poi.util.IOUtils;
     16 import org.dom4j.Document;
     17 import org.dom4j.DocumentException;
     18 import org.dom4j.Element;
     19 import org.dom4j.io.SAXReader;
     20 import org.w3c.dom.Node;
     21 import org.xml.sax.InputSource;
     22 
     23 
     24 /**
     25  * IOS文件解析
     26  * 
     27  * @author     dKF63325
     28  * @version    ONIP BME V300R001 2014-6-9
     29  * @since      ONIP BME V300R001C00
     30  */
     31 public class IosInfoUtils
     32 {
     33 
     34     
     35     public static HashMap<String, Object> getIosInfo(String filePath, String fileName) throws Exception
     36     {
     37         // 获得二级目录名称
     38         String appName = getAppName(filePath);
     39         
     40         // 解析文件
     41         HashMap<String, Object> infoMap = parseXml(filePath, appName);
     42         
     43         File file = new File(filePath);
     44         // 文件名称
     45         infoMap.put("fileName", file.getName());
     46         // 文件大小
     47         infoMap.put("fileSize", convertFileSize(file.length()));
     48         // 文件大小(单位:字节)
     49         infoMap.put("fileByteSize", file.length());
     50         // 是否存在SDK
     51         infoMap.put("isSDK", AXMLPrinter2.isExistsSdkFromIOS(filePath, appName));
     52         // SDK版本号
     53         infoMap.put("sdkVersion", AXMLPrinter2.getSdkVersionFromIOS(filePath, appName));
     54 
     55         return infoMap;
     56     }
     57     
     58     private static String getAppName(String filePath)
     59     {
     60         ZipFile file = null;
     61         InputStream in = null;
     62         String name = StringUtils.EMPTY;
     63         try
     64         {
     65             in = new BufferedInputStream(new FileInputStream(filePath));
     66             ZipInputStream zip = new ZipInputStream(in);
     67             ZipEntry zp = null;
     68             while ((zp = zip.getNextEntry()) != null)
     69             {
     70                 name = zp.getName();
     71                 if (name.indexOf(".app") != -1)
     72                 {
     73                     name = name.substring(name.indexOf("Payload/")+"Payload/".length(), name.indexOf(".app") + ".app".length());
     74                     break;
     75                 }
     76             }
     77         }
     78         catch (IOException e)
     79         {
     80             DEBUGGER.error("Failed to getAppName", e);
     81         }
     82         finally
     83         {
     84             IOUtils.closeQuietly(in);
     85             AXMLPrinter2.closeZipFile(file);
     86         }
     87         return name;
     88     }
     89 
     90     private static HashMap<String, Object> parseXml(String filePath, String projectName) throws IOException, Exception, DocumentException
     91     {
     92         String xml = AXMLPrinter2.getXmlFromIOS(filePath, projectName);
     93         StringReader read = new StringReader(xml);
     94         InputSource scource = new InputSource(read);
     95         SAXReader sax = new SAXReader();
     96         sax.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
     97         Document root = sax.read(scource);
     98         Element dictElement = (Element) root.selectSingleNode("//dict");
     99         List<Element> children = filterElement(dictElement.elements());
    100         HashMap<String, Object> infoMap = new HashMap<String, Object>();
    101         for (int i = 0; i < children.size(); i+=2)
    102         {
    103             Element key = children.get(i);
    104             Element val = children.get(i+1);
    105             if ("array".equals(val.getName()))
    106             {
    107                 List<Element> arrayList = filterElement(val.elements());
    108                 String values = StringUtils.EMPTY;
    109                 for (Element element : arrayList)
    110                 {
    111                     values += element.getStringValue() + ",";
    112                 }
    113                 infoMap.put(key.getStringValue(), StringUtils.removeEnd(values, ","));
    114             } else if ("true".equals(val.getName())) {
    115                 infoMap.put(key.getStringValue(), true);
    116             } else if ("false".equals(val.getName())) {
    117                 infoMap.put(key.getStringValue(), false);
    118             } else {
    119                 infoMap.put(key.getStringValue(), val.getStringValue());
    120             }
    121         }
    122         return infoMap;
    123     }
    124     
    125     private static List<Element> filterElement(List<?> elements) {
    126         List<Element> result = new ArrayList<Element>(elements.size());
    127         for (Object object : elements)
    128         {
    129             Element element = (Element)object;
    130             if (element.getNodeType() == Node.ELEMENT_NODE)
    131             {
    132                 result.add(element);
    133             }
    134         }
    135         return result;
    136     }
    137     
    138     public static String convertFileSize(long filesize)
    139     {
    140         String strUnit = "Bytes";
    141         String strAfterComma = "";
    142         int intDivisor = 1;
    143         if (filesize >= 1024 * 1024)
    144         {
    145             strUnit = "MB";
    146             intDivisor = 1024 * 1024;
    147         } else if (filesize >= 1024)
    148         {
    149             strUnit = "KB";
    150             intDivisor = 1024;
    151         }
    152         if (intDivisor == 1){
    153             return filesize + " " + strUnit;
    154         }
    155 
    156         strAfterComma = "" + 100 * (filesize % intDivisor) / intDivisor;
    157         if (strAfterComma.equals(""))
    158             strAfterComma = ".0";
    159         
    160         return filesize / intDivisor + "." + strAfterComma + " " + strUnit;
    161     }
    162 }
  • 相关阅读:
    离开APM的弹性云还是真弹性吗
    系统性能工程师
    How the performance impacts your revenue-性能影响营收
    The Performance Manifesto
    APM系列-国外新兴厂商New Relic vs. AppDynamics
    Performance testing architecture
    Does Little'law really applicable to apply performance model now?
    Load average in Linux的精确含义
    Eric's并发用户数估算与Little定律的等价性
    Sublime Text 3 插件安装及Vim 模式设置
  • 原文地址:https://www.cnblogs.com/XQiu/p/5282658.html
Copyright © 2011-2022 走看看