Java读取文件遇系统找不到路径错误,咨询路径配置问题
解决相对路径找不到文件的问题
首先,咱们来拆解一下你的路径问题:
你的Java文件位于C:\University\BigDataManagement\Data-Mining\hw1\src\main\java\univ\bigdata\course\MoviesReviewsQueryRunner.java,而目标资源文件在C:\University\BigDataManagement\Data-Mining\hw1\src\main\resources\movies-sample.txt。
你用的相对路径../../../../../resources/movies-sample.txt多往上走了一层,导致系统找不到路径。咱们数一下层级:
- 从
MoviesReviewsQueryRunner.java所在的course目录出发,往上走4层就能到main目录(course→bigdata→univ→java→main),然后从main进入resources目录即可。所以正确的相对路径应该是:File file = new File("../../../../resources/movies-sample.txt");
不过,这里更推荐你用类加载器读取资源文件的方式,因为这种方式不受运行时工作目录的影响,而且在项目打包成JAR后依然能正常工作(直接用File类的相对路径在打包后会失效)。具体代码如下:
// 非静态方法中使用 try (InputStream inputStream = getClass().getResourceAsStream("/movies-sample.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) { String line; while ((line = br.readLine()) != null) { // 处理每一行数据 System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } // 如果是静态方法,改用类名获取资源 try (InputStream inputStream = MoviesReviewsQueryRunner.class.getResourceAsStream("/movies-sample.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) { // 同样的处理逻辑 } catch (IOException e) { e.printStackTrace(); }
为什么推荐这种方式?因为src/main/resources目录下的文件在编译和打包后,会被放到类路径(classpath)的根目录下,用getResourceAsStream("/movies-sample.txt")就能直接定位到它,不用再纠结相对路径的层级问题。
如果一定要用File类的绝对路径测试,也可以直接写死路径,但这种方式不适合跨环境部署:
File file = new File("C:\\University\\BigDataManagement\\Data-Mining\\hw1\\src\\main\\resources\\movies-sample.txt");
内容的提问来源于stack exchange,提问作者Tony Tannous
相关产品推荐
相关产品推荐

