java - 列出当前 JAR 文件目录中的文件

标签 java class jar loading

我正在用 JAVA 制作一个游戏,我想在我的 jar 中的某个目录中列出一个文件列表,这样我就可以确保有一个要在游戏中使用的类的列表。

例如说在我​​的 jar 里我有一个目录

mtd/entity/creep/

我想获取该目录中所有 .class 文件的列表使用 jar 中另一个类的 java 代码

这样做的最佳代码是什么?

最佳答案

旧的 java1.4 代码,但这会给你一个想法:

private static List getClassesFromJARFile(String jar, String packageName) throws Error
{
    final List classes = new ArrayList();
    JarInputStream jarFile = null;
    try
    {
        jarFile = new JarInputStream(new FileInputStream(jar));
        JarEntry jarEntry;
        do 
        {       
            try
            {
                jarEntry = jarFile.getNextJarEntry();
            }
            catch(IOException ioe)
            {
                throw new CCException.Error("Unable to get next jar entry from jar file '"+jar+"'", ioe);
            }
            if (jarEntry != null) 
            {
                extractClassFromJar(jar, packageName, classes, jarEntry);
            }
        } while (jarEntry != null);
        closeJarFile(jarFile);
    }
    catch(IOException ioe)
    {
        throw new CCException.Error("Unable to get Jar input stream from '"+jar+"'", ioe);
    }
    finally
    {
        closeJarFile(jarFile);
    }
   return classes;
}
private static void extractClassFromJar(final String jar, final String packageName, final List classes, JarEntry jarEntry) throws Error
{
    String className = jarEntry.getName();
    if (className.endsWith(".class")) 
    {
        className = className.substring(0, className.length() - ".class".length());
        if (className.startsWith(packageName))
        {
            try
            {
                classes.add(Class.forName(className.replace('/', '.')));
            } catch (ClassNotFoundException cnfe)
            {
                throw new CCException.Error("unable to find class named " + className.replace('/', '.') + "' within jar '" + jar + "'", cnfe);
            }
        }
    }
}
private static void closeJarFile(final JarInputStream jarFile)
{
    if(jarFile != null) 
    { 
        try
        {
            jarFile.close(); 
        }
        catch(IOException ioe)
        {
            mockAction();
        }
    }
}

关于java - 列出当前 JAR 文件目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/346811/

相关文章:

python - pygame.event.Event().type == pygame.QUIT,困惑

java - 如何判断jedis是否被添加到类路径中?

java - 在 java 应用程序中实现自定义 jar 时出现错误

java - Spring在抽象类构造函数中 Autowiring

java - UPDATE 后 SELECT 查询的意外行为

c++ - 将大括号内的 'this' 传递给 C++ 中的类的对象

java - 如何从命令行使用 jarjar?

java - 如何为多种屏幕尺寸设置图像 - android

java - Eclipse 控制台中的 H2 数据库结果

java - ClassNotFoundException Sandwich.Java...它在哪里?