我有一个包含捆绑资源(语言模型二进制文件)的 jar 文件,需要在运行时加载。 jar内的目录结构是
标记器/app.class
标记器/模型/stop/SentDetect.bin.gz
其中 SentDetect.bin.gz 是一个二进制文件,其路径作为 String 参数加载到第三方类(SentDetector)中,即
URL url = this.getClass().getResource("models/stop/SentDetect.bin.gz");
SentenceDetector sdetector = new SentenceDetector(url.getPath());
虽然它在 Netbeans 中运行正常,但当我尝试从命令行将其作为 jar 运行时,我在构造函数中收到 FileNotFound 异常。我已经仔细检查过二进制文件是否包含在编译的 Jar 文件中。
我相信解决方案通常是使用 getResourceAsStream() 将数据作为输入流加载,但这不是这里的一个选项,因为 url 作为 String 参数传递给第三方构造函数,这让我相信问题是如何将 url 解析为字符串?
我努力了:
url.getPath();
url.getFile();
url.toURI().getPath();
url.toString();
并且所有人都给出了不同的文件路径。
听起来应该没问题,如果二进制文件肯定位于正确的位置并且 jar 文件肯定位于类路径中。 (我认为它可以找到类本身?我希望如此,因为你正在使用this.getClass()
).
一件事其中might引起问题的是文件名大小写 - 当它从文件系统加载文件时,如果您使用的是 Windows,则不区分大小写;在 jar 文件中,它将区分大小写。检查代码中的大小写是否与 jar 文件中的大小写匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)