当前位置: 首页 > 面试题库 >

在当前JAR文件的目录中列出文件

马淇
2023-03-14
问题内容

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

例如说我的罐子里有一个目录

mtd/entity/creep/

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

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


问题答案:

旧的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();
        }
    }
}


 类似资料:
  • 问题内容: 在Python中,我只想列出当前目录中的所有文件。我不希望从任何子目录或父目录中列出文件。 似乎确实有类似的解决方案,但它们似乎对我不起作用。这是我的代码段: 假设我在当前目录中有2个文件holygrail.py和Tim。我也有一个文件夹,其中包含两个文件- 我们称它们为Arthur和Lancelot。当我运行脚本时,这就是我得到的: 我对holygrail.py和Tim感到满意。但是

  • 在Python中,我只想列出当前目录中的所有文件。我不想从任何子目录或父目录中列出文件。 似乎也有类似的解决方案,但它们似乎不适合我。以下是我的代码片段: 假设我有两个文件,holygrail.py和蒂姆在我的当前目录。我也有一个文件夹,里面有两个文件——让我们称之为亚瑟和兰斯洛特。当我运行脚本时,这是我得到的: 我对holygrail.py和蒂姆很满意。但是亚瑟和兰斯洛特这两个文件,我不想列出来

  • 问题内容: 如何在当前目录及其子目录中显示所有大于10k字节的文件。 尝试过,但是没有用。 问题答案: 第一部分与@sputnicks答案相同,并成功查找目录中超过10k的所有文件(不要将k与K混淆),我的补充是,第二部分然后执行或ls列出(-l)文件通过人类可读的大小(-h)。如果愿意,可以取反h。当然是文件本身,而仅仅是文件的替代 在实践中会重复或: 将其显示为一条语句或: 更多\; vs +

  • 问题内容: “ java”如何知道要执行的类文件而不设置类路径。即,默认情况下它是否签入当前目录,或者我们也需要为当前目录设置类路径。 问题答案: 它首先检查当前目录。如果找不到该类,它将在类路径中搜索该类。 默认的类路径是当前目录。设置变量或使用命令行选项将覆盖默认值,因此,如果要在搜索路径中包括当前目录,则必须将其包括在新设置中。[ 来源 ]

  • 问题内容: 我有一个具有以下结构的文件夹 我只对rootDir中的xml文件感兴趣。如果我使用JDOM读取XML,则以下代码还将考虑“ testDirectory”中的文件并吐出“内容不允许异常” 如何在使用listFiles方法时排除子目录?以下代码可以工作吗? 问题答案: 使用a 代替,因为它将使您能够访问实际文件,然后包括对

  • 问题内容: 如何在Clojure特定目录中的所有文件中创建一个列表?我必须求助于Java还是Clojure可以本地处理? 问题答案: 使用功能。 用法示例: