在类路径中查找文件
我正在尝试阅读文件内容,例如:
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
中是正常的。 它被类路径覆盖。 你的问题出在其他地方。 您确定资源名称是否正确? 你确定你正在运行你认为正在运行的代码吗?