我们有一个maven项目,其中resources dir中的一些文件被复制到jar文件的根目录中。我有以下代码,在junit测试期间可以很好地工作,但是一旦我尝试从jar执行它,就会停止工作
Configuration configuration = new Configuration();
String pathString = MainClass.class.getClassLoader().getResource("dir").getPath();
Path path = new Path(pathString);
logger.debug(path);
FileSystem fs = path.getFileSystem(configuration);
if (fs.exists(path)) {
logger.debug("WOOOOO");
} else {
logger.debug("BOOOOO");
}
测试时,输出为:
DEBUG: /path/to/project/target/test-classes/dir
DEBUG: WOOOOO
从jar里跑出来的时候我得到:
DEBUG file:/path/to/jar/project.jar!/dir
DEBUG BOOOOO
不用说,jar文件位于正确的位置,dir位于jar的根目录中。
如果您想知道我们为什么要这样做,那么下半部分是小测试摘录,它模仿了mahout中naivebayesmodel.materialize()的功能。我们只需要能够创建一条mahout能够理解的路径。
1条答案
按热度按时间l0oc07j21#
例外
java.io.IOException: No FileSystem for scheme: jar
意味着你不能创建一个File
对象或打开FSDataInputStream
(驯兽师做的事)用URI
它引用了jar
对象。计划
file
以及hdfs
有FileSystem
实现,因此,我想唯一的解决方案为您的情况,因为您想调用NaiveBayesModel.materialize()
,是将文件转储到dir
您的目录jar
变成两个人中的一个FileSystem
我提到的,然后创建一个Path
从它那里。另一方面,您可以尝试重现mahout所做的事情,这是
NaiveBayesModel
.我没有使用mahout的经验,但我想这是一个很好的开始,希望能有所帮助。