我有像Project这样的文件夹结构
由于整个项目将被打包到一个jar文件中,我必须使用getResourceAsStream从资源中读取一个文件.虽然我已经阅读了有关getResourceAsStream的所有问题,但我仍然无法使其正常工作.有人可以帮忙吗?谢谢!
public class TestMain {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
InputStream stream = TestMain.class.getResourceAsStream("\resources\test.txt");
System.out.println(stream);
BufferedReader bufRead = new BufferedReader(new InputStreamReader(stream));
StringBuilder builder = new StringBuilder();
String line=null;
while((line=bufRead.readLine())!=null){
builder.append(line).append("\n");
}
System.out.println(builder.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,有两种不同的方法:ClassLoader.getResourceAsStream()和Class.getResourceAsStream().这两种方法将以不同方式定位资源.
在Class.getResourceAsStream(path)中,路径被解释为您调用它的类的包的本地路径.例如,调用String.getResourceAsStream("file.txt")将在类路径中的以下位置查找文件:"java/lang/file.txt".如果您的路径以/开头,那么它将被视为绝对路径,并将从类路径的根开始搜索.因此,调用String.getResourceAsStream("/ myfile.txt")将查看类路径./file.txt中的以下位置.
ClassLoader.getResourceAsStream(path)将所有路径视为绝对路径.因此,调用String.getClassLoader().getResourceAsString("myfile.txt")和String.getClassLoader().getResourceAsString("/ file.txt")将在以下位置的类路径中查找文件:./ file.文本.
每次定位时,它可能是文件系统本身的位置,也可能是相应jar文件中的位置,具体取决于您从中加载资源的Class和/或ClassLoader.
如果从Application Server加载类,那么应该使用Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)而不是this.getClass().getClassLoader().getResourceAsStream(fileName).this.getClass().getResourceAsStream()也可以工作.
| 归档时间: |
|
| 查看次数: |
6857 次 |
| 最近记录: |