首页 > 代码库 > 查找jar包中.class文件关键字(变量名,字符串)
查找jar包中.class文件关键字(变量名,字符串)
有时查看日志,常常会发现由框架底层打印的错误日志。要修改这个错误的时候,如果不是对框架特别熟悉,就需要按照可能产生这个错误日志的流程一步一步找,一时半会不一定能找到。比如本人最近对smartfoxserver搭建的服务器做压测的时候,发现最大等待线程数超过20就会打印错误日志,然后就一直在smartfoxserver接受请求的反编译代码里找该错误输出,花了很长时间一直没找到。然后我在想能否用inputstream来查询字符串,试验代码如下:
import java.io.BufferedReader;import java.io.File;import java.io.FileFilter;import java.io.IOException;import java.io.InputStreamReader;import java.util.Enumeration;import java.util.regex.Pattern;import java.util.zip.ZipEntry;import java.util.zip.ZipException;import java.util.zip.ZipFile;public class Find { public static final String path = "D:/workspace/test/"; //jar包父目录 public static final String keywords = "aaa"; //关键字 public static void main(String[] args){ File file = new File(path); final Pattern p = Pattern.compile(".+\\.jar$"); File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if(p.matcher(pathname.getPath()).matches()){ return true; }else{ return false; } } }); search(files); } private static void search(File[] files){ try{ for(File f : files){ if(f.isDirectory()){ search(f.listFiles()); }else{ ZipFile jar = new ZipFile(f); Enumeration enumration = jar.entries(); while(enumration.hasMoreElements()){ ZipEntry zipEntry = (ZipEntry)enumration.nextElement(); InputStreamReader isr = new InputStreamReader(jar.getInputStream(zipEntry)); BufferedReader br = new BufferedReader(isr); String line = br.readLine(); int line_num = 1; while(null != line){// System.out.println(line); if(line.contains(keywords)){ System.out.println(f.getPath() + "," +zipEntry.getName() + "," + "line number = " + line_num); } line = br.readLine(); line_num++; } } } } }catch(ZipException z_e){ z_e.printStackTrace(); }catch(IOException io_e){ io_e.printStackTrace(); } }}
用于测试的jar包:D:\workspace\test\test.jar 代码如下
Test.java:
public class Test { public static void main(String[] args){ System.out.print("aaa"); }}
测试结果如下:
D:\workspace\test\test.jar,com/test/Test.class,line number = 3
以上代码没有反编译相关的,所以目前只对查询字符串或者变量名有效,对方法名不一定能查出来 有时间可以研究下反编译解析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。