ClassLoader.getSystemResource(...)。getPath()似乎返回了错误的路径

时间:2012-10-30 14:02:27

标签: resources classloader

我正在尝试将需要两个* .db4o数据文件的代码包装起来以方便使用。我已将数据文件添加到我的eclipse .classpath中,方法是将文件放在$ {project_dir} / res /中并添加以下行:

<classpathentry kind="src" path="res"/>

到我的.classpath。

然后我为我的包装器类定义了一个默认构造函数,该构造函数不带参数,但是找到了* .db4o文件的路径(这些路径是我用来设置的编译代码所必需的)。我获取路径的方法是:

String datapath = ClassLoader.getSystemResource("resource_name").getPath();

当我在eclipse中调试/运行代码时,这很有用。但是当我将它作为jar导出时,我可以看到* .db4o文件在jar中,以及我的编译代码,但返回到“datapath”的路径的形式如下:

datapath = ${pwd}/file:${absolute_path_to_jar}!/{resource_name}

是否有一些资源在jar内部阻止绝对路径工作?另外,为什么行为不同只是因为代码和资源存在于jar文件中?最后一点需要注意的是,虽然我的应用程序是为了更广泛的使用(来自PIG,python等代码),但我正在从Matlab进行测试,这是我将奇数值分配给“datapath”的地方。

提前感谢您的回复。

1 个答案:

答案 0 :(得分:0)

getSystemResource()返回资源的URL。如果您的资源是压缩在一个jar文件中,那么URL将指向它(使用&#34;!&#34;表示法)。 getPath()返回&#34;路径&#34; URL的一部分,并不总是实际的文件路径。 URL可以是众多内容之一,而不仅仅是文件。