2014-03-06 54 views
0

我有一个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("\\","/"); 
     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中搜索文件?

+0

澄清 - 您知道要搜索的文件的名称(Bind.class),但不知道它将在哪个目录中? –

+1

为什么你不能遍历jar中的每个条目?如果班级出现在两个不同的包中,你希望发生什么? –

+0

@mattb是的..那里有emany目录搜索.. – user2133404

回答

2
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/ 

我试图更简单地理解

顺便说一句引入数组列表是完全未必要

Enumeration<JarEntry> myEntry = jar.entries(); 
      while(myEntry.hasMoreElements()) 
      { 
System.out.println(myEntry.nextElement().toString().equals("org/apache/poi/hssf/record/aggregates/")); 
      } 
+0

谢谢你..它为我工作 – user2133404

+0

@ user2133404:看到编辑 –

0

使用JarFile.entries()并遍历它们。

0

您可以使用下面的Linux命令在一个jar文件搜索类:

的jar -tvf myjar.jar | grep的com.sun.xml.ws.binding.Bind.class