2017-01-23 41 views
2

我试图访问从我的项目的目录中的文件,让我们把它空指针获得资源时,如流

src/main/project/foo/bar.txt 

在课堂MyClass

但是当我做:

InputStream is = MyClass.class.getResourceAsStream("bar.txt"); 

并且用InputStream做任何事情,例如

is.toString(); 

我得到了NullPointerException

我也曾尝试:

MyClass.class.getResourceAsStream("/bar.txt"); 

MyClass.class.getResourceAsStream("./bar.txt"); 

是否有额外的东西,我需要做的文件不在与我打电话的课程相同的包?此应用程序部署在TomCat上,因此对文件路径的绝对引用是不切实际的。

编辑:对于标记为nullpointer的副本的人,我知道什么是空指针,显然它找不到资源。至于为什么就是这样,我需要帮忙搞清楚。

+3

是什么让你觉得'src/main/project/foo/bar.txt'以某种方式“捆绑”到你的类路径中? – 2017-01-23 19:01:36

+0

可能的重复[什么是NullPointerException,以及如何解决它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it ) –

+0

你如何运行你的应用程序?你的类路径是什么? –

回答

2

如果你的班级在src/main/project/foo/MyClass.javaMyClass.class.getResourceAsStream("bar.txt");应该没问题。 如果你的资源是在不同的文件夹中的项目不是类应用中:

MyClass.class.getClassLoader().getResource("main/project/foo/bar.txt"); 
一般

MyClass.class.getClassLoader().getResource("package/<subpackage/>filename"); 

据我所知,这适用于任何类在同一个项目中的任何位置。 MyClass.class.getResourceAsStream();相对于myClass的位置运行,您无法更改该位置。