3

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

<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 测试它,这是我获得分配给“数据路径”的奇数值的地方。

提前感谢您的任何回复。

4

1 回答 1

0

getSystemResource() 返回资源的 URL。如果您的资源被压缩在一个 jar 文件中,那么 URL 将指向它(使用“!”符号)。getPath() 返回 URL 的“路径”部分,并不总是一个实际的文件路径。URL 可以是许多事物之一,而不仅仅是一个文件。

于 2013-03-10T12:04:54.327 回答