import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public class FindClassFromJars
/**
* 查询格式:[查询参数] [关键字..]<br/>
* 查询参数:--help:显示"软件帮助信息";<br/>
* 查询级别{0,1}(默认为3):
* <li>0:完全匹配;</li>
* <li>1:忽略大小写的完全匹配;</li>
* <li>2:模糊匹配;</li>
* <li>3:忽略大小写的模糊匹配.</li>
* @param keys
*/
public static void findKey(String[] keys) {//未考虑将参数写在最后
int length = keys.length;
int level = 3;
File file = new File(".");
if(length == 0)
showHelp();
if(length == 1)
if("--help".equalsIgnoreCase(keys[0]) || "/?".equalsIgnoreCase(keys[0]))
showHelp();
else
findKey(keys, 3, file);
if (length > 1)
try {
level = Integer.parseInt(keys[0]);//转换搜索级别
findKey(keys, level, file);
} catch (NumberFormatException e) {//转换异常,没有输入搜索级别时
if (!"--help".equalsIgnoreCase(keys[0]) && !"/?".equalsIgnoreCase(keys[0]))
findKey(keys, level, file);
else
showHelp();
}
}
private static void showHelp() {
System.out.println("查询格式:[查询参数] [关键字..]\n查询参数:--help:显示\"软件帮助信息\";\n查询级别{0,1,2,3}(默认为3):\n0:完全匹配;\n1:忽略大小写的完全匹配;\n2:模糊匹配;\n3:忽略大小写的模糊匹配.");
}
private static void findKey(String[] keys, int level, File directory) {
for(File file : directory.listFiles()) {
String pathName = file.getName();
if(file.isDirectory())
findKey(keys, level, file);
else if(pathName.toLowerCase().endsWith(".jar"))
try {
String path = file.getPath();
Enumeration<JarEntry> enu = new JarFile(path).entries();
while (enu.hasMoreElements()) {
String fullName = enu.nextElement().getName();
String[] packages = fullName.split("/");
String[] fileName = packages[packages.length - 1].split("\\.");// 类完整名
String packageName = fullName.replace("/", ".");
for (int i = 1; i < keys.length; i++) {// 多参时分为全字匹配与部分匹配
boolean flag = false;
switch (level) {
case 0:
if (fileName[0].equals(keys[i]))// 完全匹配
flag = true;
break;
case 1:
if (fileName[0].equalsIgnoreCase(keys[i]))// 忽略大小写的完全匹配
flag = true;
break;
case 2:
if (packageName.contains(keys[i]))// 模糊匹配
flag = true;
break;
case 3:
if (packageName.toLowerCase().contains(keys[i].toLowerCase()))// 忽略大小写的模糊匹配
flag = true;
break;
}
if (flag)
System.out.println("找到文件" + packageName + ",\n\t" + path + "\n");
}
}
} catch (IOException e) {
System.out.println("error!");
//e.printStackTrace();
//System.out.println(e.getMessage());
}
}
}
public static void main(String[] args) {
findKey(args);
}
}
分享到:
相关推荐
寻找指定路径下jar包中含特定字符串的文件
JarClassSearch class 文件搜索工具,可以查找出指定名称的class出现了那些jar包中 对jar包上了数量的工程特别有用,而且是GUI界面的 真是人见人爱,见人爱人,javaer 的居家旅行必备
加载jar包中的Spring配置文件需要对Spring的类路径加载机制有深入理解。通过`ClassPathResource`,我们可以定位并加载jar包内的配置,然后应用到`ApplicationContext`。在SSM整合的项目中,正确地加载这些配置文件...
2.搜索分析指定路径下所有jar包中是否存在指定文件。譬方说要在jar包中查询目个**.class文件。用户可以不用打开Jar包,直接输入路径和要查找的文件即可搜索。 3.除了对Jar包进行搜索分析外,还可以对zip包进行分析 4...
遇到jar包冲突时,需要找某个class文件在哪几个jar包中,可以用这个工具进行查找,很快速方便的
2. **搜索功能**:内置搜索功能使得查找特定类或方法变得简单。 3. **代码高亮**:源代码显示带有语法高亮,便于阅读和理解。 4. **跨平台**:尽管示例中给出的是Windows版本,JD-GUI也有适用于Mac OS X和Linux的...
- **依赖分析**:在理解项目依赖关系时,找出所有使用特定类的`jar`包,有助于优化构建过程。 - **代码迁移**:在将代码迁移到新的项目结构时,快速找出所有相关的类文件。 - **库更新**:检查新版本的库是否包含了...
当我们的应用程序被打包成JAR文件后,有时我们需要从JAR内部读取配置文件,例如application.properties或application.yml。本文将深入探讨如何在Spring框架中实现这一功能。 首先,理解Spring的资源配置。Spring...
在这个场景中,我们关注的是"HttpClients相关jar包",它包含了对HTTP客户端操作的支持。 `httpPost` 是一个代表HTTP POST请求的类,POST是HTTP协议中的一个方法,用于向服务器发送数据,常用于提交表单或者上传文件...
在Java开发过程中,有时我们需要对已打包的JAR文件进行修改,例如修复错误、更新类或资源等。`jclasslib`是一款强大的反编译器和字节码查看器,它允许开发者查看并修改JAR文件中的`.class`文件。这篇文章将深入探讨...
1.搜索分析指定路径下所有jar包中是否存在指定文件。譬方说要在jar包中查询某个**.class文件。用户可以不用打开Jar包,直接输入路径和要查找的文件即可搜索。 2.列出指定路径下的所有Jar包文件 3.除了对Jar包进行...
1. **调试与故障排除**:当Java应用程序出现错误时,开发者可以通过查看JAR包中的类文件和资源来找出问题所在。 2. **学习库的内部工作原理**:对于开源库,虽然可以获取源代码,但如果只有JAR包,使用查看器可以...
在Java项目中,有时我们需要知道某个类或接口存在于哪个jar包中,这个脚本就能帮助我们快速定位。它通过遍历jar包中的所有class文件,检查它们的字节码来查找目标字段。这对于解决“类找不到”或者确认依赖是否正确...
然而,可以通过替换`jar`包或改变类加载器的策略来达到类似的效果。例如,使用模块系统(Java 9及以上版本的Jigsaw模块系统)可以更好地管理类的加载和卸载。 `jdgui_0.3.6`是一个实用的`jar`包解析工具,它提供了...
在使用这个jar包时,首先需要将其添加到项目构建路径中,然后配置对应的规则文件(通常是web.xml或Spring的配置文件),定义URL匹配模式和重写规则。例如,使用正则表达式定义何时以及如何重写URL。最后,通过测试...
在jieba的JAR包中,可能包含了关于库的版本信息、版权信息、依赖库列表等。例如,MANIFEST.MF文件是JAR包的清单,记录了类路径、主类以及其他元数据,有助于运行时环境正确加载和执行库中的代码。 jieba分词库不仅...
在jar包中,你会看到如`solr-cell.jar`(用于处理PDF、Word等非文本内容)和`solr-velocity.jar`(支持Velocity模板引擎)等插件。 8. **配置文件**:虽然不是jar包,但Solr的配置文件如`solrconfig.xml`和`schema....
4. 在源代码查看区,你可以浏览和搜索jar包中的类文件源代码,无需手动保存,直接查看即可。 值得注意的是,反编译Java代码可能会涉及到版权问题,因此在未获得版权所有者许可的情况下,不应随意反编译和使用他人的...
3. **类加载器**:Java的类加载器机制使得不同的jar包中的同名类可以共存,但这也可能导致版本冲突,需要合理配置类加载策略。 4. **IDE集成**:像Eclipse、IntelliJ IDEA等集成开发环境提供了直观的jar包管理界面,...