maven java resources_Maven获取resources的文件路径、读取resources的文件

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

比如,源文件路径是:

047d7474a50709daaa52fa03723cc6b4.png

而编译后的文件路径为:

c6569c383322d358a40bafda0f4e07b3.png

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

写法①:

//编译后,项目根路径,写法1

String url1 = A.class.getClassLoader().getResource("").toString();//编译后,项目根路径,写法2

String url2 = A.class.getResource("/").toString();//编译后,文件根路径

String url3 = A.class.getResource("").toString();

输出:

file:/D:/IdeaWorkspace/test-null-project/target/classes/file:/D:/IdeaWorkspace/test-null-project/target/classes/file:/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

写法②:

//还有一种getResource 后调用 getFile方法,就没有 [file:],而是以 [/D:xxx] 这样的格式

String url4 = A.class.getClassLoader().getResource("").getFile();

String url5= A.class.getResource("/").getFile();

String url6= A.class.getResource("").getFile();

System.out.println(url4);

System.out.println(url5);

System.out.println(url6);

输出:

/D:/IdeaWorkspace/test-null-project/target/classes/

/D:/IdeaWorkspace/test-null-project/target/classes/

/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

写法③:

String url7 = A.class.getClassLoader().getResource("").getPath();

String url8= A.class.getResource("/").getPath();

String url9= A.class.getResource("").getPath();

System.out.println(url7);

System.out.println(url8);

System.out.println(url9);

输出:

/D:/IdeaWorkspace/test-null-project/target/classes/

/D:/IdeaWorkspace/test-null-project/target/classes/

/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

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

4fdf18eeab68e06db53dc07a3cb51251.png

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

//获取路径

String filePath = A.class.getClassLoader().getResource("my.txt").getFile();

File my= newFile(filePath);

InputStreamReader isr= new InputStreamReader(newFileInputStream(my), StandardCharsets.UTF_8);

BufferedReader br= newBufferedReader(isr);

String lineTxt;while ((lineTxt = br.readLine()) != null) {

System.out.println(lineTxt);

}

br.close();

输出:

f9fa39b78237de8f5407eb0ee943fea9.png

扩展:

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

URL url = new URL("https://www.baidu.com/img/baidu_jgylogo3.gif?param=1111&param2=aaaaa");

System.out.println("getFile ==> " +url.getFile());

System.out.println("getPath ==> " + url.getPath());

输出:

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

getPath==> /img/baidu_jgylogo3.gif

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

83f777cae1d43c7a270fd63a54eb0c6c.png

c76b3d9b064543bd89cb65d77d8e3b4c.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值