0

这个问题快把我逼疯了。我有一个我想在我的 src/main/resources 文件夹中访问的文件,我正在尝试通过以下方式获取路径:

FileSystem fileSystem = FileSystems.getDefault();
Path path = fileSystem.getPath(AnalysisEngine.class.getResource("/models/10_NB_7dev_2.model").getFile());

但是,我不断收到以下错误:

索引 2 处的非法字符 <:>:/C :/Users/...(路径在这里)/models/10_NB_7dev_2.model

如您所见,返回的路径在 C: 之前有“/”,这会破坏一切。原因是什么?如何解决?java.io 包有替代方案吗?

如果有帮助,我正在使用 Windows 8 - 64 位操作系统。

4

3 回答 3

2

返回的 URLClass#getResource(String)包含前面的/.

/C:/Users/...(the path is here)/models/10_NB_7dev_2.model

这就是 URL 的工作方式。然后FileSystem尝试解析它,但是:混合中有一个字符对它没有意义,所以它抛出了一个异常。换句话说,getPath()是试图创建一个路径,而不是一个 url。Windows(也可能是 linux)路径中不能有:字符,除非它直接跟在驱动器名称后面作为路径字符串的前两个字符。

这里的解决方案是不使用类路径资源的路径。类路径资源可能不直接来自文件系统,它可能位于jar.

于 2013-09-12T15:52:45.550 回答
0

...(路径在这里)/models/10_NB_7dev.model

在您输入的代码中:

("/models/10_NB_7dev_2.model").

你的意思是放一个_2。?

于 2013-09-12T15:32:05.230 回答
0

如果您不担心使用默认文件系统(例如,如果您没有使用内存文件系统进行测试),那么您可以这样做:

URI uri = AnalysisEngine.class.getResource("/models/10_NB_7dev_2.model").toURI();
Path path = Paths.get(uri);
于 2016-02-12T21:01:45.380 回答