通过类路径上的目录,从同一个类加载器加载的类中,您应该能够使用以下任一选项:
// From ClassLoader, all paths are "absolute" already - there's no context
// from which they could be relative. Therefore you don't need a leading slash.
InputStream in = this.getClass().getClassLoader()
.getResourceAsStream("SomeTextFile.txt");
// From Class, the path is relative to the package of the class unless
// you include a leading slash, so if you don't want to use the current
// package, include a slash like this:
InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");
如果这些都不起作用,那说明还有其他问题.
例如,以下面的代码为例:
package dummy;
import java.io.*;
public class Test
{
public static void main(String[] args)
{
InputStream stream = Test.class.getResourceAsStream("/SomeTextFile.txt");
System.out.println(stream != null);
stream = Test.class.getClassLoader().getResourceAsStream("SomeTextFile.txt");
System.out.println(stream != null);
}
}
该目录 struct 如下:
code
dummy
Test.class
txt
SomeTextFile.txt
然后(使用Unix路径分隔符,因为我在Linux机器上):
java -classpath code:txt dummy.Test
结果:
true
true