2010-11-12 39 views
0

我正在使用QDox来解析java源代码。我有这个接口的问题:从包名中获取.java

import test.Word; 

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

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

+1

你想要当前目录还是类的包?文件系统的位置取决于它是否在jar文件中,以及类路径指向的位置。 – 2010-11-12 16:37:33

+0

我想要在文件系统中的位置,类Word不在一个罐子里。我不知道如何使用类路径来获取它。 – Federico 2010-11-12 16:39:55

回答

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))作为系统属性传入工作目录。

+0

Word的.java文件在文件系统中。我会尝试你的代码。 – Federico 2010-11-12 16:43:50

+0

你写的第二行是retuning null,我该怎么做才能在类路径中添加一些东西?在这种情况下,我是否必须将测试文件夹添加到它? – Federico 2010-11-12 16:52:54

+0

@Federico,您需要将测试文件夹的父文件夹添加到类路径中。 – rsp 2010-11-12 17:53:56