在类路径中查找文件

我正在尝试阅读文件内容,例如:

public void myMethod(){ FileInputStream fstream = new FileInputStream(fileLocation); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String strLine; while ((strLine = br.readLine()) != null) { .... .... ..... end while end method 

而且我在类体的private String fileLocation; 在课程结束时,我有一个吸气剂和设定器。 现在我正在尝试从这个类中的bean内部注入此文件位置,并指定此类的init方法。 但我得到错误找不到指定的文件,好像它不在类路径上,但它是在war文件中? 我正在使用maven构建项目,我将文件放在src/main/resources这是我在尝试读取文件时遇到的错误:

错误:src \ main \ resources \ ids.txt(系统找不到指定的路径)

那是我试过的时候:

 FileInputStream fstream = new FileInputStream("src\\main\\resources\\ids.txt"); 

如何从classpath中正确引用?

编辑

当我根据@BalusC解决方案编辑我的代码时,这是它的外观,但我仍然得到null错误:

 ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); InputStream input = classLoader.getResourceAsStream("src/main/resources/ids.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(input)); String strLine; while ((strLine = br.readLine()) != null) { .... .... ..... end while end method 

Java IO API依赖于本地磁盘文件系统,而不依赖于类路径。 此外,在Java IO中使用相对路径是可移植性问题的秘诀,不要依赖它。 要在类路径中分配资源,通常使用ClassLoader#getResource()ClassLoader#getResourceAsStream()

 ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); InputStream input = classLoader.getResourceAsStream("src/main/resources/ids.txt"); 

也就是说,您不需要DataInputStream行。 你实际上没有从中获益。

更新 :如果这不起作用,那么资源名称只是无效,或者文件实际上不在您期望的类路径中。 我在src文件夹上的src实际上是类路径的 ,而不是包的一部分。 从名称中删除它。

更新2 :获取运行时类路径所涵盖的所有根磁盘文件系统路径:

 for (URL root : Collections.list(Thread.currentThread().getContextClassLoader().getResources(""))) { System.out.println(root); } 

资源名称必须与其中任何一个相关。 它在构建期间被放置在/WEB-INF/classes中是正常的。 它被类路径覆盖。 你的问题出在其他地方。 您确定资源名称是否正确? 你确定你正在运行你认为正在运行的代码吗?