2011-07-29 92 views
2

我试图从公共类中访问数据文件,这两个文件都位于JAR文件中。但是,当我在Hadoop集群上执行jar时,系统会抛出FileNotFoundException。底线是:在群集上运行应用程序时是否可以访问Jar内的资源,或者是否需要单独将资源复制到HDFS,对于上述任何一种情况,您将如何去实现它?从Jar文件中访问.dat文件

谢谢!

回答

1

是的,如果JAR位于CLASSPATH中,则可以使用类加载器或servlet上下文来调用getResourceAsStream()以获取对该文件的InputStream的引用。

您将无权访问文件路径。您提供了一个相对于CLASSPATH的路径,类加载器找到该文件。你可以得到内容,但不是绝对的位置。

你不应该要绝对的位置。你会用它做什么?

您无法写入文件。你不能改变任何东西。如果您的应用程序打包在WAR文件中,则无法更改其内容。

+0

因此,InputStream是否将JAR中的文件路径作为字符串传递给程序,还是将它作为流在整个文件中读取,因为我需要字符串作为文件所在的位置。 –

+0

由于OP实际上以“或/或”格式提出了两个问题,所以'是'有点混淆。其余的答案很明显。 –

+0

*“我需要该文件所在的字符串”* 1)它不是文件,而是档案中的资源。 2)几乎从来没有**将'File'或'URL'对象转换为'String'的好主意。你为什么认为你需要这个? –