ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java搜索jar包中的指定字符串

2022-04-08 15:34:13  阅读:208  来源: 互联网

标签:包中 java String jar jarFiles import public condition


  1 package com.niu.jit;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.File;
  5 import java.io.InputStreamReader;
  6 import java.util.ArrayList;
  7 import java.util.Enumeration;
  8 import java.util.List;
  9 import java.util.zip.ZipEntry;
 10 import java.util.zip.ZipFile;
 11 
 12 /**
 13  * 寻找指定路径下jar包中含特定字符串的文件 15  */
 16 public class FindStrInJar {
 17 
 18     public String condition;  //查询的条件
 19 
 20     public ArrayList<String> jarFiles = new ArrayList<String>();
 21 
 22     public FindStrInJar() {
 23     }
 24 
 25     public FindStrInJar(String condition) {
 26         this.condition = condition;
 27     }
 28 
 29     public FindStrInJar(String condition, String exclude) {
 30         this.condition = condition;
 31     }
 32 
 33     public void setCondition(String condition) {
 34         this.condition = condition;
 35     }
 36 
 37     public List<String> find(String dir, boolean recurse) {
 38         searchDir(dir, recurse);
 39         return this.jarFiles;
 40     }
 41 
 42     public List<String> getFilenames() {
 43         return this.jarFiles;
 44     }
 45 
 46     protected String getClassName(ZipEntry entry) {
 47         StringBuffer className = new StringBuffer(entry.getName().replace("/", "."));
 48         return className.toString();
 49     }
 50 
 51     @SuppressWarnings("unchecked")
 52     protected void searchDir(String dir, boolean recurse) {
 53         try {
 54             File d = new File(dir);
 55             if (!d.isDirectory()) {
 56                 return;
 57             }
 58             File[] files = d.listFiles();
 59             for (int i = 0; i < files.length; i++) {
 60                 if (recurse && files[i].isDirectory()) {
 61                     searchDir(files[i].getAbsolutePath(), true);
 62                 } else {
 63                     String filename = files[i].getAbsolutePath();
 64                     if (filename.endsWith(".jar")||filename.endsWith(".zip")) {
 65                         ZipFile zip = new ZipFile(filename);
 66                         Enumeration entries = zip.entries();
 67                         while (entries.hasMoreElements()) {
 68                             ZipEntry entry = (ZipEntry) entries.nextElement();
 69                             String thisClassName = getClassName(entry);
 70 
 71                             //不搜索扩展名为.class的文件
 72 //                            if(thisClassName.lastIndexOf(".class")==-1){
 73                                 BufferedReader r = new BufferedReader(new InputStreamReader(zip.getInputStream(entry)));
 74                                 while(r.read()!=-1){
 75                                     String tempStr = r.readLine();
 76                                     if(null!=tempStr && tempStr.indexOf(condition)>-1){
 77                                         this.jarFiles.add(filename + "  --->  " + thisClassName);
 78                                         break;
 79                                     }
 80                                 }
 81 //                            }
 82 
 83                         }
 84                     }
 85                 }
 86             }
 87         } catch (Exception e) {
 88             e.printStackTrace();
 89         }
 90     }
 91 
 92     public static void main(String args[]) {
 93         FindStrInJar findInJar = new FindStrInJar("神秘字符串"); //要寻找的字符串
 94         List<String> jarFiles = findInJar.find("D:\\test\\lib", true);
 95         if (jarFiles.size() == 0) {
 96             System.out.println("Not Found");
 97         } else {
 98             for (int i = 0; i < jarFiles.size(); i++) {
 99                 System.out.println(jarFiles.get(i));
100             }
101         }
102     }
103 
104 }

 

标签:包中,java,String,jar,jarFiles,import,public,condition
来源: https://www.cnblogs.com/baby-dragon/p/16117326.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有