从包名中获取.java

时间:2010-11-12 16:31:06

标签: java parsing classpath qdox

我正在使用QDox来解析java源代码。我的界面有问题:

import test.Word;

public interface Spellable {
    /**
    * Checks the spell of the word in a given language
    */
    public boolean checkSpell (Word word);  
}

在解析Word类型的那一刻,我需要知道文件系统中的路径在哪里。 那么,有没有办法知道?,也许使用类路径?

1 个答案:

答案 0 :(得分:0)

我认为不可能以一种不错的,100% - 无限期兼容的方式做到这一点。 Java实际上试图通过类路径机制将您从文件系统中抽象出来。

尽管如此,您通常可以通过类加载器获取文件路径。第一步是获取对类加载器的引用,该类加载器可以找到您感兴趣的任何资源(通常,您自己的任何类的类加载器都可以正常工作;如果您有更复杂的场景,您应该知道要使用哪个类加载器)

然后,您可以向类加载器请求给定资源的位置作为URL,例如:

final ClassLoader loader = getClass().getClassLoader();
final URL resourceLocation = loader.getResource("com/mycomp/coolapp/checkthis.doc");

现在,如果幸运的话,URL将使用file:/协议,并将描述本地文件系统上的位置。如果是这样,您可以提取此路径并将其用作您刚刚查找的任何类路径资源的文件系统位置。如果它不是file:/资源,则该类可能甚至不存在于您的本地计算机上(例如,它是通过RMI远程加载的),所以在任何情况下你都运气不好。

如果这听起来很复杂 - 也许您可以从Java启动脚本(例如java ... -Dworking.dir=$(pwd))作为系统属性传入工作目录。