路径问题一切要看编译后的文件路径

比如,源文件路径是:

而编译后的文件路径为:

也就是说,resources文件夹下的文件在编译后,都是为根目录,这种情况下,比如我要读取resources 文件夹下的 my.txt 文件路径,

写法①:

  1. // 编译后,项目根路径,写法1
  2. String url1 = A.class.getClassLoader().getResource("").toString();
  3. // 编译后,项目根路径,写法2
  4. String url2 = A.class.getResource("/").toString();
  5. // 编译后,文件根路径
  6. String url3 = A.class.getResource("").toString();

输出:

  1. file:/D:/IdeaWorkspace/test-null-project/target/classes/
  2. file:/D:/IdeaWorkspace/test-null-project/target/classes/
  3. file:/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

写法②:

  1. // 还有一种getResource 后调用 getFile方法,就没有 [file:],而是以 [/D:xxx] 这样的格式
  2. String url4 = A.class.getClassLoader().getResource("").getFile();
  3. String url5 = A.class.getResource("/").getFile();
  4. String url6 = A.class.getResource("").getFile();
  5. System.out.println(url4);
  6. System.out.println(url5);
  7. System.out.println(url6);

输出:

  1. /D:/IdeaWorkspace/test-null-project/target/classes/
  2. /D:/IdeaWorkspace/test-null-project/target/classes/
  3. /D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

写法③:

  1. String url7 = A.class.getClassLoader().getResource("").getPath();
  2. String url8 = A.class.getResource("/").getPath();
  3. String url9 = A.class.getResource("").getPath();
  4. System.out.println(url7);
  5. System.out.println(url8);
  6. System.out.println(url9);

输出:

  1. /D:/IdeaWorkspace/test-null-project/target/classes/
  2. /D:/IdeaWorkspace/test-null-project/target/classes/
  3. /D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

至此,上面已经有多种获取文件路径的方式,既然拿到路径,就可以读取File 文件,进而读取文件了,如这是my.txt 的内容

则读取文件内容的代码可以如下:

  1. // 获取路径
  2. String filePath = A.class.getClassLoader().getResource("my.txt").getFile();
  3. File my = new File(filePath);
  4. InputStreamReader isr = new InputStreamReader(new FileInputStream(my), StandardCharsets.UTF_8);
  5. BufferedReader br = new BufferedReader(isr);
  6. String lineTxt;
  7. while ((lineTxt = br.readLine()) != null) {
  8. System.out.println(lineTxt);
  9. }
  10. br.close();

输出:

扩展

写法②getFile 跟写法③getPath 是有区别的,getResource 方法后返回的是一个 java.net.URL对象,那手动构造一个java.net.URL

  1. URL url = new URL("https://www.baidu.com/img/baidu_jgylogo3.gif?param=1111&param2=aaaaa");
  2. System.out.println("getFile ==> " + url.getFile());
  3. System.out.println("getPath ==> " + url.getPath());

输出:

  1. getFile == > /img/baidu_jgylogo3.gif?param=1111&param2=aaaaa
  2. getPath ==> /img/baidu_jgylogo3.gif

可以看出,getFile() 方法可以拿到参数值,而getPath() 就是只取文件名,JDK中文文档相关api如下:

Maven获取resources的文件路径、读取resources的文件的更多相关文章

  1. java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中   java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...

  2. .35-浅析webpack源码之babel-loader入口文件路径读取

    在处理./input.js入口文件时,在类型判断被分为普通文件,所以走的文件事件流,最后拼接得到文件的绝对路径. 但是对应"babel-loader"这个字符串,在如下正则中被判定 ...

  3. java实现将指定文件夹里所有文件路径输出到指定文件作为参数化文件给lr脚本使用

    java实现将指定文件夹里所有文件路径输出到指定文件作为参数化文件给lr脚本使用 import java.io.BufferedReader; import java.io.BufferedWrite ...

  4. C#选择多个文件并读取多个文件数据

    原文:C#选择多个文件并读取多个文件数据 版权声明:本文为博主原创文章,转载请附上链接地址. https://blog.csdn.net/ld15102891672/article/details/8 ...

  5. [Java] 在 jar 文件中读取 resources 目录下的文件

    注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...

  6. Spring boot 文件路径读取异常

    在开发代码中,有一段需要获取resources目录下的一个配置文件(这里写作test.xml). 这段代码在ide中没有任何问题,但是一打成jar包发布到线上,这段代码就会报找不到对应文件的错误. 按 ...

  7. C#ZIP根据路径读取压缩包内文件数量

    /// <summary> /// 根据压缩包路径读取此压缩包内文件个数 /// </summary> /// <param name="strAimPath& ...

  8. 通过文件路径读取CSV表格内的数据

    ReadDataFromCSV.h UCLASS() class MYPROJECT_API UReadDataFromCSV : public UBlueprintFunctionLibrary { ...

  9. nodejs通过mocha处理运行文件路径下所有js文件

    1.获取文件路径: 方式一:整个js文件使用 var path=require('path');var public_path=path.resolve('../testcase/listData/* ...

  10. C#中选中指定文件并读取类似ini文件的内容

    一.背景 由于项目中需要去读取设备的配置信息,配置文件的内容和INI配置文件的格式类似,所以可以按照INI文件的方式来处理.涉及如何打开一个文件,获取打开的文件的路径问题,并读取选中的文件里边的内容. ...

随机推荐

  1. SpringBoot 之 实现登录功能及登录拦截器

    增加登录退出控制器: # src/main/java/com/wu/controller/LoginController.java @Controller public class LoginCont ...

  2. centos6.5-svn搭建文档

    下载相关软件 wget http://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz wget http://subversion.ti ...

  3. Centos 7 上 查看MySQL当前使用的配置文件my.cnf的方法

    my.cnf是mysql启动时加载的配置文件,一般会放在mysql的安装目录中,用户也可以放在其他目录加载.总的来说,my.cnf类似与window中my.ini 使用locate my.cnf命令可 ...

  4. YBT 1633:【例 3】Sumdiv

    http://ybt.ssoier.cn:8088/problem_show.php?pid=1633 A^B 快速幂求结果,所有约数和,可以通过组合来进行得到. 技巧,通过递归得到1~n次的和.su ...

  5. HDU 2673-shǎ崽 OrOrOrOrz(C语言描述)

    问题描述 问题是: 为您提供了一系列不同的整数, 请选择 "数字" 如下: 首先选择最大的, 然后是最小的, 然后是第二个最大的, 第二个最小的. 直到所有的数字被选中.例如, 给 ...

  6. Spring循环依赖原理

    Spring循环依赖的原理解析 1.什么是循环依赖? ​ 我们使用Spring的时候,在一个对象中注入另一个对象,但是另外的一个对象中也包含该对象.如图: 在Student中包含了teacher的一个 ...

  7. Rust学习(一)

    为什么学习Rust 最近在看Linux相关新闻的时候,看到了Linux内核正在将Rust集成至内核内的消息,且越来越多的嵌入式开发可以使用Rust编程.以往笔者的技术栈只有 C语言 ,C++也只是浅尝 ...

  8. USB Tethering always displays grey when USB tethering type is Linux(EEM)

    USB Tethering always displays grey when USB tethering type is Linux(EEM) 1.Problem DESCRIPTION USB T ...

  9. 我以订披萨为例,给女朋友详细讲了Java设计模式的3种工厂模式

    摘要:工厂模式是将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性. 本文分享自华为云社区<[Java设计模式]用 披萨订购案例 详 ...

  10. UML 有关类图知识及类间关系

    原文链接:https://blog.csdn.net/mj_ww/article/details/53020346 1. 类的含义 类图(Class diagram)显示了系统的静态结构,而系统的静态 ...