无法使用getResourceAsStream读取文件

use*_*400 3 java

我有像Project这样的文件夹结构

  • SRC
  • --TestMain.java
  • 箱子
  • --TestMain.class
  • 资源
  • --test.txt

由于整个项目将被打包到一个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)

Mah*_*ula 6

基本上,有两种不同的方法: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()也可以工作.