Java 在类路径中定位文件

Java 在类路径中定位文件,java,Java,我正在尝试读取文件内容,例如: public void myMethod(){ FileInputStream fstream = new FileInputStream(fileLocation); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String strLine; while ((strLine = br.readLine()) != null)

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

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
在类body
private String fileLocation的开头,我有一个src/main/resources
这是我在尝试读取文件时遇到的错误:

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

就在那时,我尝试了这个:

FileInputStream fstream = new FileInputStream("src\\main\\resources\\ids.txt");
如何从类路径正确地引用

编辑

当我根据@BalusC solution编辑代码时,下面是它的外观,但我仍然得到
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依赖于本地磁盘文件系统,而不是类路径。此外,在JavaIO中使用相对路径会带来可移植性问题,不要依赖它。在通常使用或的类路径中分配资源

也就是说,您不需要
DataInputStream
行。你实际上没有从中得到任何好处

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

更新2:要获取运行时类路径覆盖的所有根磁盘文件系统路径,请执行以下操作:

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

资源名称需要与它们中的任何一个相对。在构建期间将其放置在
/WEB-INF/classes
中是正常的。它由类路径覆盖。你的问题在别的地方。您确定资源名称正确吗?你确定你正在运行你认为正在运行的代码吗?

@BalusC同样,当我删除
src
位时,我得到null,我刚刚查看了部署在jboss上的target war的内部,该文件位于
WEB-INF/classes
中,但在我的eclipse项目中,它位于
src/main/resources
中,还有其他一些技巧吗?@BalusC我可以看看这个类加载器的位置吗,进入哪个文件夹或..@BalusC这是一个好消息,我找到了使用for循环需要做的事情。我只需要把
ids.txt
放进去,就足够读了。万分感谢
for (URL root : Collections.list(Thread.currentThread().getContextClassLoader().getResources(""))) {
    System.out.println(root);
}