Java 如何在JAR中搜索文件?
我有一个JAR文件,我想搜索其中是否存在类文件Java 如何在JAR中搜索文件?,java,jar,executable-jar,Java,Jar,Executable Jar,我有一个JAR文件,我想搜索其中是否存在类文件 import java.util.jar.*; public class Check { public static void main(String args[]) throws Exception { String path="C:\\workspace\\Project\\sun\\tools\\jam-dt.jar"; path=path.replace("\\","/");
import java.util.jar.*;
public class Check
{
public static void main(String args[]) throws Exception
{
String path="C:\\workspace\\Project\\sun\\tools\\jam-dt.jar";
path=path.replace("\\","/");
JarFile jar=new JarFile(path);
JarEntryentry=jar.getJarEntry("com/sun/xml/ws/binding/Bind.class");
if(entry!=null)
{
System.out.println(" Entry present");
}
else
{
System.out.println("No Entry");
}
}
}
但是,JAR文件中有许多目录。我无法在getJarEntry函数中手动输入它们并进行检查。如何检查是否存在类。如何在JAR中搜索文件?使用JarFile.entries()并对其进行迭代。您可以使用下面的linux命令在JAR文件中搜索类: jar-tvf myjar.jar | grep com.sun.xml.ws.binding.Bind.class
String path=“C:/Users/hussain.wahid/Desktop/hussain back-up/hussain/Eclipse WorkSpace/SO/poi.jar”;
String path="C:/Users/hussain.wahid/Desktop/hussain back up/Hussain/Eclipse WorkSpace/SO/poi.jar";
path=path.replace("\\","/");
JarFile jar=new JarFile(path);
ArrayList<String> fileNameList = new ArrayList<String>();
Enumeration<JarEntry> myEntry = jar.entries();
while(myEntry.hasMoreElements())
{
//System.out.println(myEntry.nextElement().toString());
fileNameList.add(myEntry.nextElement().toString());
}
System.out.println(fileNameList.contains("com/sun/xml/ws/binding/Bind.class"));
//org/apache/poi/hssf/record/aggregates/
路径=路径。替换(“\\”,“/”;
JarFile jar=新的JarFile(路径);
ArrayList fileNameList=新的ArrayList();
枚举myEntry=jar.entries();
while(myEntry.hasMoreElements())
{
//System.out.println(myEntry.nextElement().toString());
添加(myEntry.nextElement().toString());
}
println(fileNameList.contains(“com/sun/xml/ws/binding/Bind.class”);
//org/apache/poi/hssf/record/aggregates/
我试图使它更容易理解
顺便说一句,引入arraylist是完全没有必要的
Enumeration<JarEntry> myEntry = jar.entries();
while(myEntry.hasMoreElements())
{
System.out.println(myEntry.nextElement().toString().equals("org/apache/poi/hssf/record/aggregates/"));
}
枚举myEntry=jar.entries();
while(myEntry.hasMoreElements())
{
System.out.println(myEntry.nextElement().toString().equals(“org/apache/poi/hssf/record/aggregates/”);
}
几年前,我在Windows上使用命令行运行此命令:
for /R %G in (*.jar) do @jar -tvf "%G" | find "someFileNameNoExtension" > NUL && echo "%G"
为了澄清,您知道要搜索的文件名(Bind.class),但不知道它将位于哪个目录中?为什么不能迭代jar中的每个条目?如果该类存在于两个不同的包中,您希望发生什么?@mattb yes。。有很多目录要搜索..然后我想知道这两个目录@KevinWorkmanOkay,那么你为什么不能迭代jar中的每个条目,并将匹配项添加到列表中呢?