论坛首页 Java企业应用论坛

Jar中Class文件搜索器

浏览 14870 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2009-08-13   最后修改:2010-03-12
  曾有一个名为“jarsearch”的Eclipse插件,可惜只支持3.2.x,之后就再也没有消息了。
现在要在众多的Jar包中,查找一个不熟悉的类名,通常只能凭经验或Google,亦或者胡乱的
将可能的Jar包一并导入,这样有时候也无法立竿见影的找到。

  我自制了一个在Jar中搜索Class文件的小工具(如下图),并与大家一起分享。其中可能存
在一些Bug,请不吝指出。
 
  修正了5楼朋友所提出的2个Bug,并在Rar包中附上了源码。

  PS:其中的两个匹配方式,如查找“File”,用前者只能查到“java.io.File”,而用后者
就可以查到“java.io.FileWriter”等。

  注意:这个小工具只能在“JDK1.6”以上版本运行

  • 大小: 68.4 KB
   发表时间:2009-08-19  
需要这样么?
你用Ctrl+Shift+T,打开Type,不就能看到某个类在哪个jar包李曼了么?
不要只用navigator,还要用一下package explorer。
呵呵。
0 请登录后投票
   发表时间:2009-08-19   最后修改:2009-08-19
用Ctrl+Shift+T,打开Type,的确是一个在现存已知的Jar中进行寻找的好办法,但是有很多情况下还是需要在未知的Jar中进行探索的。我的硬盘中至少有15~20G(应该有重复的可能)的Jar文件,有时候为了找一个适合的Jar还得凭记忆加搜索工具,所以想偷个懒,就以练练Swing开始而写的这个小工具。这若有一天也能帮到您那就太好了。
0 请登录后投票
   发表时间:2009-08-19  
太吝啬了,居然封装成exe,不如用c++做了
0 请登录后投票
   发表时间:2009-08-20   最后修改:2009-08-20
做成EXE的话也是没有用的。要看源码也是很方便的。
0 请登录后投票
   发表时间:2009-08-20  
楼主的程序是用exe4j打包的吧,JAR文件被我找到了。反编译看了一下,发现有两个地方存在BUG:

1,JAR的后缀名应该是大小写无关的。而楼主的代码里面只考虑到了小写的JAR文件名。
2,楼主打开JAR文件后,构造JarFile后,遍历完条目没有关闭JarFile对象,导致JarFile对象被独占,使用完后即时关闭流是一个好的习惯。

  public void treeDir(File searchDir)
  {
    File rootDir = searchDir;
    if (!(rootDir.isDirectory())) {
      return;
    }

    String[] fileArr = rootDir.list();
    if ((fileArr == null) || (fileArr.length == 0)) {
      return;
    }

    String regexStr = "^.*\\.jar$";

    for (String str : fileArr) {
      File chargeFile = new File(searchDir + "/" + str);
      if (chargeFile.isDirectory()) {
        treeDir(chargeFile);
      }
      if ((chargeFile.isFile()) && (Pattern.matches(regexStr, str)) && (chargeFile.length() != 0L)) {
        this.jarFileList.add(chargeFile.getAbsolutePath());
        searchClassFileNameToList(chargeFile.getAbsolutePath());
      }
    }
  }


  public void searchClassFileNameToList(String jarFileName) {
    JarFile jarFile = null;
    try {
      File testFile = new File(jarFileName);
      if ((testFile.exists()) && (testFile.canRead()) && (testFile.canExecute()))
        jarFile = new JarFile(jarFileName);
      else
        this.errorFileList.add(jarFileName);
    }
    catch (IOException e) {
      e.printStackTrace();
    }
    searchClassFileNameToList(jarFile);
  }

既然楼主不喜欢把源代码附上,那我也不太好附上代码了。我觉得如何楼主是真心想交流的话,应该直接把源码附上。
0 请登录后投票
   发表时间:2009-08-21  
楼上的朋友,很感谢您的指点。关于exe,我看了一篇exe4j可以将java本地化的文章,就试用了一下,为了能让没有jvm的朋友也可以使用,之后第二天就有朋友告诉我:无法在没有jre的机器上运行,故而又添上了“这个小工具只能在“JDK1.6”以上版本运行 ”一句。

2个Bug我完全接受,谢谢!顺便说一下,第一个Bug是由于“JAR的后缀名应该是大小写关的”吧。
0 请登录后投票
   发表时间:2009-08-21  
findjar.com比你本地的jar要全的多
0 请登录后投票
   发表时间:2009-08-21  
usherlight 写道
findjar.com比你本地的jar要全的多

我也经常用这个网站的,但是先在本地先找一下,若没有再上去搜岂不更好。
0 请登录后投票
   发表时间:2009-08-21  
何必这么麻烦,用rar打开jar,按F3就可以搜索了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics