.jar 中的 WordNet 数据库目录相对路径
WordNet Database Directory Relative Path in .jar
要使用 JAWS,需要在应用程序中指定 WordNet 数据库目录,如下所述:http://lyle.smu.edu/~tspell/jaws/。
System.setProperty("wordnet.database.dir", "resources/WordNet-3.0/dict/");
这在 IDE 中运行良好。但未编译为 .jar 文件。因此,需要 .jar 文件中 WordNet 目录的相对路径。已经尝试了各种方法。最后是:
String url = this.getClass().getClassLoader()
.getResource("resources/WordNet-3.0/dict/index.sense").toExternalForm();
url = url.substring(0, url.length() - 12);
从 .jar 文件测试的结果:
jar:file:/C:/file/path/jar.jar!/resources/WordNet-3.0/dict/
以为这就是解决方案,但当 .jar 为 运行 时,仍然找不到目录或 index.sense。 index.sense 应该通过以下方式加载:
WordNetDatabase database = WordNetDatabase.getFileInstance();
使用指定的目录。找到了几个线程,但没有任何建议有效。例如:
How to get the path of a running JAR file?
How to get a path to a resource in a Java JAR file
Loading a file relative to the executing jar file
您不能进入 JAR 文件的路径,WordNet API 没有使用虚拟文件系统。因此它无法查看您尝试生成的资源 URL 内部。 WordNet API 使用 File
和 FileReader
包装在 BufferedReader
none 中,其中可以打开文件名,例如 file:///some/dir/to/file.jar!something/in/a/jar
.
您可以做的是让您的程序首先使用上述方法找到正确的 JAR,以便在某个 jar XYZ 中定位资源,然后将 XYZ JAR 文件的相关内容解压缩到临时缓存中目录,然后将 WordNet wordnet.database.dir
System 属性 指向该缓存目录。
取决于您使用的 JDK 版本,取决于从 Java 中解压缩 JAR 的最佳方法,但是有很多这样做的示例。
另一种方法是修改您正在使用的代码(JAWS 库),如果您提供类似 wordnet.database.dir
属性 的 classpath:relative/path/in/jars
格式,则从流而不是文件加载资源。否则你会把它当作一个文件。只需在该库中找到所有文件读取事件,并用 returns 一个 BufferedReader
包装正确类型的输入流的通用实用函数替换流的创建。
要使用 JAWS,需要在应用程序中指定 WordNet 数据库目录,如下所述:http://lyle.smu.edu/~tspell/jaws/。
System.setProperty("wordnet.database.dir", "resources/WordNet-3.0/dict/");
这在 IDE 中运行良好。但未编译为 .jar 文件。因此,需要 .jar 文件中 WordNet 目录的相对路径。已经尝试了各种方法。最后是:
String url = this.getClass().getClassLoader()
.getResource("resources/WordNet-3.0/dict/index.sense").toExternalForm();
url = url.substring(0, url.length() - 12);
从 .jar 文件测试的结果:
jar:file:/C:/file/path/jar.jar!/resources/WordNet-3.0/dict/
以为这就是解决方案,但当 .jar 为 运行 时,仍然找不到目录或 index.sense。 index.sense 应该通过以下方式加载:
WordNetDatabase database = WordNetDatabase.getFileInstance();
使用指定的目录。找到了几个线程,但没有任何建议有效。例如:
How to get the path of a running JAR file? How to get a path to a resource in a Java JAR file Loading a file relative to the executing jar file
您不能进入 JAR 文件的路径,WordNet API 没有使用虚拟文件系统。因此它无法查看您尝试生成的资源 URL 内部。 WordNet API 使用 File
和 FileReader
包装在 BufferedReader
none 中,其中可以打开文件名,例如 file:///some/dir/to/file.jar!something/in/a/jar
.
您可以做的是让您的程序首先使用上述方法找到正确的 JAR,以便在某个 jar XYZ 中定位资源,然后将 XYZ JAR 文件的相关内容解压缩到临时缓存中目录,然后将 WordNet wordnet.database.dir
System 属性 指向该缓存目录。
取决于您使用的 JDK 版本,取决于从 Java 中解压缩 JAR 的最佳方法,但是有很多这样做的示例。
另一种方法是修改您正在使用的代码(JAWS 库),如果您提供类似 wordnet.database.dir
属性 的 classpath:relative/path/in/jars
格式,则从流而不是文件加载资源。否则你会把它当作一个文件。只需在该库中找到所有文件读取事件,并用 returns 一个 BufferedReader
包装正确类型的输入流的通用实用函数替换流的创建。