前情提要

本文中提供了九种方式获取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()来获取文件。如果是文件路径的话getFile和getPath效果是一样的,如果是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. classpath和读取resources目录下的文件

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

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

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

  3. 安卓读取mysql数据库文件路径_Android开发实现读取assets目录下db文件的方法示例...

    本文实例讲述了Android开发实现读取assets目录下db文件的方法.分享给大家供大家参考,具体如下: 最近准备打算写一个关于天气预报的app,偶然的机会在一大神的博客上看到了一个获取天气的api ...

  4. 安卓上为什么不能用system.io.file读取streammingAssets目录下的文件

    安卓上为什么不能用system.io.file读取streammingAssets目录下的文件 首先,看文档: Streaming Assets Most assets in Unity are co ...

  5. SpringBoot打开resources目录下的文件操作

    SpringBoot打开resources目录下的文件操作 背景 我想在SpringBoot项目中放入一个静态文件.json文件.然后在SpringBoot项目内可以打开并读取此json文件. [外链 ...

  6. 【Java基础】递归输出目录下所有文件路径

    递归输出目录下所有文件路径 import java.io.File;public class FileTest {public static void main(String[] args) {// ...

  7. CMD命令读取某个目录下所有文件夹名或文件名

    CMD命令读取某个目录下所有文件夹名或文件名 CMD命令读取某个目录下所有文件夹名或文件名 要用到的dir命令 开始操作 CMD命令读取某个目录下所有文件夹名或文件名 目的是给自己留个笔记! 要用到的 ...

  8. 在不root手机的情况下读取Data目录下的文件

    127|shell@android:/ $ cd /data cd /data shell@android:/data $ ls ls opendir failed, Permission denie ...

  9. SpringBoot模块中,resources目录下各文件夹作用

    文章目录 前言 1.public目录: 2.resources目录: 3.static目录: 4.templates目录: 5.src/main/resources目录(根目录): 6.META/IN ...

最新文章

  1. git patch操作
  2. yii 使用 有赞sdk_有赞ABTest系统:数据驱动增长实践
  3. MSP430杂谈--AD7793硬件SPI驱动与模拟SPI驱动
  4. XPath 获取两个node中间的HTML Nodes
  5. Netty-1-一个简单的服务器实例
  6. jpa 实体到数据库
  7. 热门NPM库 “coa” 和“rc” 接连遭劫持,影响全球的 React 管道
  8. 到底他怎么赚钱了啊?看来看去也看不出他赚钱了,看来经济头脑有限啊
  9. 【java学习之路】(javaWeb篇)002.CSS
  10. 基于CentOS构建高功能的LAMP平台
  11. Linux进程相关的一些笔记
  12. 【2018】面试复习大纲
  13. 风雨萧关道【电视专题片解说词】
  14. 自定义带放大镜功能的图片剪裁框
  15. メリッサ / 梅莉莎
  16. WIFI共享精灵 2013 电脑共享wifi
  17. python中open()函数里中文处理
  18. 外贸必备通讯工具之一,AntTone 的介绍及使用教程
  19. 【C++实现】编译原理 免考小队 FIRSTVT集生成算法
  20. 非华为手机鸿蒙怎样替换安卓,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪...

热门文章

  1. 男篮球员特点 里约惨案就是这样造成的
  2. MM模块常用T-code
  3. 非京籍上学有多难?从这些数据看真相
  4. 银行IT迎“高景气”时代,宇信科技如何领跑行业?
  5. “隐忍”多年的“水果大王”百果园要寻求资本协助了?
  6. 行为模型实例 php,JS中事件模型的实例详解
  7. fiddler不能抓取浏览器数据_抓包软件 Fiddler 了解一下?
  8. python常用面试题_史上最全Python工程师常见面试题集锦,有这一份就够了
  9. larvel 中的api.php_Laravel API 系列教程(一): 基于 Laravel 5.5 构建 测试 RESTful API...
  10. 太原未来小使者英语大赛_哥伦比亚2020年中学生“汉语桥”大赛成功在线举办...