我有一个jar文件,其中包含需要在运行时加载的资源(语言模型二进制文件)。罐子内的目录结构是在一个jar中工作(在Netbeans中工作,但不在命令行中)
标记器/ app.class
标记器/模型/停止/ SentDetect.bin.gz
其中SentDetect.bin.gz是二进制卫生组织路径被装载到第三方类(SentDetector)作为字符串参数,即
URL url = this.getClass().getResource("models/stop/SentDetect.bin.gz");
SentenceDetector sdetector = new SentenceDetector(url.getPath());
虽然它运行正常在NetBeans中,当我尝试运行它作为命令行罐子,我会在构造一个FileNotFound例外。我已经仔细检查了二进制文件是否包含在已编译的Jar文件中。
我相信解决方案通常是使用getResourceAsStream()作为输入流加载数据,但这不是一个选项,因为url作为String参数传递给第三方构造函数,导致我相信问题是如何将url解析为字符串?
我曾尝试:
url.getPath();
url.getFile();
url.toURI().getPath();
url.toString();
并且都给人以文件不同的路径。
你的意思是我可以使用来自已加载jar的应用程序外部的URL访问jar中的资源? – tangens 2010-01-30 15:06:51
是的一切似乎都应该在哪里,因为我没有任何问题从Netbeans运行应用程序,它只会在我将它打包并在命令行上运行该jar时出现错误。 – pastylegs 2010-01-30 15:10:20
@tangens:如果它是另一个Java应用程序,很可能。在同一个Java应用程序中,但是不同的jar文件 - 很可能。在普通的网络浏览器中?可能性更小。 – 2010-01-30 15:10:46