文章目录

  • 前述
  • 功法一
  • 功法二
  • 功法三
  • 功法四(重要)
  • 功法五(重要)
  • 功法六(重要)
  • 功法七
  • 功法八
  • 功法九

前述

项目开发中,经常会有一些静态资源,被放置在resources目录下,随项目打包在一起,代码中要使用的时候,通过文件读取的方式,加载并使用;

本文中汇总整理了九种方式获取resources目录下文件的方法。

其中公用的打印文件方法如下:

    /*** 根据文件路径读取文件内容** @param fileInPath* @throws IOException*/public static void getFileContent(Object fileInPath) throws IOException {BufferedReader br = null;if (fileInPath == null) {return;}if (fileInPath instanceof String) {br = new BufferedReader(new FileReader(new File((String) fileInPath)));} else if (fileInPath instanceof InputStream) {br = new BufferedReader(new InputStreamReader((InputStream) fileInPath));}String line;while ((line = br.readLine()) != null) {System.out.println(line);}br.close();}

功法一

主要核心方法是使用getResourcegetPath方法,这里的getResource("")里面是空字符串

    public void function1(String fileName) throws IOException {String path = this.getClass().getClassLoader().getResource("").getPath();//注意getResource("")里面是空字符串System.out.println(path);String filePath = path + fileName;System.out.println(filePath);getFileContent(filePath);}

功法二

主要核心方法是使用getResourcegetPath方法,直接通过getResource(fileName)方法获取文件路径,注意如果是路径中带有中文一定要使用URLDecoder.decode解码

    /*** 直接通过文件名getPath来获取路径** @param fileName* @throws IOException*/public void function2(String fileName) throws IOException {String path = this.getClass().getClassLoader().getResource(fileName).getPath();//注意getResource("")里面是空字符串System.out.println(path);String filePath = URLDecoder.decode(path, "UTF-8");//如果路径中带有中文会被URLEncoder,因此这里需要解码System.out.println(filePath);getFileContent(filePath);}

功法三

直接通过文件名+getFile()来获取文件。如果是文件路径的话getFilegetPath效果是一样的,如果是URL路径的话getPath带有参数的路径。如下所示:

url.getFile()=/pub/files/foobar.txt?id=123456
url.getPath()=/pub/files/foobar.txt

使用getFile()方式获取文件的代码如下:

    /*** 直接通过文件名+getFile()来获取** @param fileName* @throws IOException*/public void function3(String fileName) throws IOException {String path = this.getClass().getClassLoader().getResource(fileName).getFile();//注意getResource("")里面是空字符串System.out.println(path);String filePath = URLDecoder.decode(path, "UTF-8");//如果路径中带有中文会被URLEncoder,因此这里需要解码System.out.println(filePath);getFileContent(filePath);}

功法四(重要)

直接使用getResourceAsStream方法获取上面的几种方式都需要获取文件路径,但是在SpringBoot中所有文件都在jar包中,没有一个实际的路径,因此可以使用以下方式。

    /*** 直接使用getResourceAsStream方法获取流* springboot项目中需要使用此种方法,因为jar包中没有一个实际的路径存放文件** @param fileName* @throws IOException*/public void function4(String fileName) throws IOException {InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName);getFileContent(in);}

功法五(重要)

主要也是使用getResourceAsStream方法获取,不使用getClassLoader可以使用getResourceAsStream("/配置测试.txt")直接从resources根路径下获取SpringBoot中所有文件都在jar包中,没有一个实际的路径,因此可以使用以下方式。

    /*** 直接使用getResourceAsStream方法获取流* 如果不使用getClassLoader,可以使用getResourceAsStream("/配置测试.txt")直接从resources根路径下获取** @param fileName* @throws IOException*/public void function5(String fileName) throws IOException {InputStream in = this.getClass().getResourceAsStream("/" + fileName);getFileContent(in);}

功法六(重要)

通过ClassPathResource类获取文件流SpringBoot中所有文件都在jar包中,没有一个实际的路径,因此可以使用以下方式。

    /*** 通过ClassPathResource类获取,建议SpringBoot中使用* springboot项目中需要使用此种方法,因为jar包中没有一个实际的路径存放文件** @param fileName* @throws IOException*/public void function6(String fileName) throws IOException {ClassPathResource classPathResource = new ClassPathResource(fileName);InputStream inputStream = classPathResource.getInputStream();getFileContent(inputStream);}

功法七

通过绝对路径获取项目中文件的位置,只是本地绝对路径,不能用于服务器获取

    /*** 通过绝对路径获取项目中文件的位置(不能用于服务器)* @param fileName* @throws IOException*/public void function7(String fileName) throws IOException {String rootPath = System.getProperty("user.dir");//E:\WorkSpace\Git\spring-framework-learning-exampleString filePath = rootPath + "\\chapter-2-springmvc-quickstart\\src\\main\\resources\\"+fileName;getFileContent(filePath);}

功法八

通过new File("")获取当前的绝对路径,只是本地绝对路径,不能用于服务器获取

    /*** 通过绝对路径获取项目中文件的位置(不能用于服务器)* @param fileName* @throws IOException*/public void function8(String fileName) throws IOException {//参数为空File directory = new File("");//规范路径:getCanonicalPath() 方法返回绝对路径,会把 ..\ 、.\ 这样的符号解析掉String rootCanonicalPath = directory.getCanonicalPath();//绝对路径:getAbsolutePath() 方法返回文件的绝对路径,如果构造的时候是全路径就直接返回全路径,如果构造时是相对路径,就返回当前目录的路径 + 构造 File 对象时的路径String rootAbsolutePath =directory.getAbsolutePath();System.out.println(rootCanonicalPath);System.out.println(rootAbsolutePath);String filePath = rootCanonicalPath + "\\chapter-2-springmvc-quickstart\\src\\main\\resources\\"+fileName;getFileContent(filePath);}

功法九

主要是通过设置环境变量,将文件放在环境变量中,原理也是通过绝对路径获取

示例中设置了一个环境变量:

TEST_ROOT=E:\WorkSpace\Git\spring-framework-learning-example

 System.getenv("TEST_ROOT");System.getProperty("TEST_ROOT")

通过设置环境变量的方式,然后通过绝对路径获取文件

    /*** 通过绝对路径获取项目中文件的位置** @param fileName* @throws IOException*/public void function9(String fileName) throws IOException {System.setProperty("TEST_ROOT","E:\\WorkSpace\\Git\\spring-framework-learning-example");//参数为空String rootPath = System.getProperty("TEST_ROOT");System.out.println(rootPath);String filePath = rootPath + "\\chapter-2-springmvc-quickstart\\src\\main\\resources\\"+fileName;getFileContent(filePath);}

获取resources目录下文件路径的九套功法相关推荐

  1. 获取 /resources 目录资源文件的 9 种方法

    项目开发中,经常会有一些静态资源,被放置在resources目录下,随项目打包在一起,代码中要使用的时候,通过文件读取的方式,加载并使用: 本文中汇总整理了九种方式获取resources目录下文件的方 ...

  2. 数值策划的自我修养(二):用VBA批量获取指定目录下文件的名字

    目录索引 批量获取指定目录下文件的名字 批量获取指定目录下文件的名字 游戏项目的管理,自然少不了配置表的管理.今天记录的是如何在制作配置表管理工具时批量获取配置表文件夹下的配置表名并顺序写到一张Exc ...

  3. 在maven项目结构下对于Resources目录下文件的存取

    在maven项目中,文件结构如下: proj---src----main ----java ----Main.java ----resources ----userFile.properties -- ...

  4. 九种方式,教你获取 resources 目录下的文件

    方式一 主要核心方法是使用getResource和getPath方法,这里的getResource("")里面是空字符串 public void function1(String  ...

  5. android 获取assets目录下文件的路径

    暴力直接获取 String path = "file:///android_asset/icon_wm.png"; 先把文件读成流,在转化地址 String path = null ...

  6. resources目录下文件加载失败,class path resource [***] cannot be resolved to URL because it does not exist

    jar包中文件加载解决姿势: new InputStreamReader(Objects.requireNonNull(IotRSAPemUtil.class.getResourceAsStream( ...

  7. 获取一个目录下文件扩展名为txt或htm或html的文件的几种方法

    方法1: 使用循环方法 方法2:使用Lambda表达式 DirectoryInfo di = new DirectoryInfo(strPath); FileInfo[] fi = di.GetFil ...

  8. 如何读取resources目录下的文件路径(九种方式)

    前情提要 本文中提供了九种方式获取resources目录下文件的方式.其中打印文件的方法如下: /*** 根据文件路径读取文件内容** @param fileInPath* @throws IOExc ...

  9. classpath和读取resources目录下的文件

    最近在springboot+maven的项目中去读取资源文件的时候,报了找不到文件的错误.由此展开了对maven项目编译前和编译后的目录结构的了解,以及对java的classpath的理解. 首先,由 ...

最新文章

  1. 俄罗斯智库 | 人工智能在军事领域的发展现状及应用前景
  2. CSS:CSS 在工程中改变——面向对象的CSS (OO CSS)
  3. AfterLogic WebMail
  4. 蓝桥杯 ALGO-103 算法训练 完数
  5. jscript对URL参数进行编码与解码
  6. CNN for Sentence Classification-textcnn阅读笔记
  7. 用户如何设置浏览器主页的历史记录和管理加载项
  8. 自编码模型autoencoder
  9. pad平板性能测试软件,苹果iPad 2020款评测,最便宜的iPad,性能碾压安卓?
  10. LNBP11L_LNB电源和控制电压调节器——科时进商城
  11. 对话《深入理解Java虚拟机》作者周志明:电竞选手成为Java大神之路
  12. Cordova开机画面
  13. 扑克牌游戏——老牛拉破车
  14. 与airpods媲美的无线耳机推荐
  15. Redis 由浅入深 (2) - Redis哨兵和集群的介绍和部署方案(看完这篇redis部署再也不是问题)
  16. 5g的云计算机,三家运营商怎样看待云计算和5G的关系?
  17. java软件开发工程师证书考试费用,太完整了!
  18. 软件工程师的工作总结
  19. jq 刷新页面,刷新父级页面,iframe刷新父级页面
  20. 【iOS取证篇】iPhone6及以下版本进入恢复模式和DFU模式操作方法

热门文章

  1. 史上最全的 JavaScript 模块化方案和工具
  2. 大数据技术概论习题(5)
  3. 扩充Ubuntu虚拟机的磁盘容量
  4. 微信小程序 - rpx和px互转,以及系统给的 pixelRatio 值比例不对
  5. K8s 超详细总结!
  6. unity 开枪_史诗般的游戏可能在两脚都开枪
  7. class 人开枪射击子弹
  8. 上海个人所得税计算器
  9. 求最大公约数的4种方法C语言(辗转相除法、辗转相减法、穷举法、递归法)
  10. jquery获取所有的兄弟元素