使用类路径上的目录,从由同一类装入器装入的类,您应该能够使用以下任一方法:
// 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);
}
}
以及此目录结构:
code
dummy
Test.class
txt
SomeTextFile.txt
然后(使用Unix路径分隔符,因为我在Linux盒子上):
java -classpath code:txt dummy.Test
结果:
true
true