返回类名称在Jar中不起作用

时间:2014-03-21 10:11:08

标签: java

我已经使用此代码从包中获取类名列表:

private List<String> getClasses()
{
    List<String> classes = new ArrayList<String>();
    String packageName = "algorithm/impl";

    URL directoryUrl = Thread.currentThread().getContextClassLoader().
                        getResource(packageName);

    File directory = new File(directoryUrl.getFile());

    if(directory.exists())
    {
    String [] files = directory.list();
    for(String filename : files)
    {
        classes.add(filename.substring(0, filename.lastIndexOf(".")));
    }
    }
    return classes;
}

但是当应用程序打包为可执行jar文件时,这不起作用。为什么呢?

1 个答案:

答案 0 :(得分:0)

您可以使用此课程JarFile

JarFile file = new JarFile("YourFileName.jar");   
for (Enumeration<JarEntry> enum = file.entries(); enum.hasMoreElements();) {   
    JarEntry entry = enum.next();   
    System.out.println(entry.getName());   
}

或者,如果您想在jar中搜索特定的类,可以使用ZipFile类。

                JarFile jar = new JarFile(YourJarFile);
                ZipEntry e = jar.getEntry(CLASS_FILE_TO_FIND);
                if (e == null) {
                    e = jar.getJarEntry(CLASS_FILE_TO_FIND);
                    if (e != null) {
                        foundIn.add(f.getPath());
                    }
                } else {
                    foundIn.add(f.getPath());
                }