如何读取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();}
方式一
主要核心方法是使用getResource
和getPath
方法,这里的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);}
方式二
主要核心方法是使用getResource
和getPath
方法,直接通过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目录下的文件路径(九种方式)相关推荐
- classpath和读取resources目录下的文件
最近在springboot+maven的项目中去读取资源文件的时候,报了找不到文件的错误.由此展开了对maven项目编译前和编译后的目录结构的了解,以及对java的classpath的理解. 首先,由 ...
- java resources 目录_[Java] 在 jar 文件中读取 resources 目录下的文件
注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...
- 安卓读取mysql数据库文件路径_Android开发实现读取assets目录下db文件的方法示例...
本文实例讲述了Android开发实现读取assets目录下db文件的方法.分享给大家供大家参考,具体如下: 最近准备打算写一个关于天气预报的app,偶然的机会在一大神的博客上看到了一个获取天气的api ...
- 安卓上为什么不能用system.io.file读取streammingAssets目录下的文件
安卓上为什么不能用system.io.file读取streammingAssets目录下的文件 首先,看文档: Streaming Assets Most assets in Unity are co ...
- SpringBoot打开resources目录下的文件操作
SpringBoot打开resources目录下的文件操作 背景 我想在SpringBoot项目中放入一个静态文件.json文件.然后在SpringBoot项目内可以打开并读取此json文件. [外链 ...
- 【Java基础】递归输出目录下所有文件路径
递归输出目录下所有文件路径 import java.io.File;public class FileTest {public static void main(String[] args) {// ...
- CMD命令读取某个目录下所有文件夹名或文件名
CMD命令读取某个目录下所有文件夹名或文件名 CMD命令读取某个目录下所有文件夹名或文件名 要用到的dir命令 开始操作 CMD命令读取某个目录下所有文件夹名或文件名 目的是给自己留个笔记! 要用到的 ...
- 在不root手机的情况下读取Data目录下的文件
127|shell@android:/ $ cd /data cd /data shell@android:/data $ ls ls opendir failed, Permission denie ...
- SpringBoot模块中,resources目录下各文件夹作用
文章目录 前言 1.public目录: 2.resources目录: 3.static目录: 4.templates目录: 5.src/main/resources目录(根目录): 6.META/IN ...
最新文章
- git patch操作
- yii 使用 有赞sdk_有赞ABTest系统:数据驱动增长实践
- MSP430杂谈--AD7793硬件SPI驱动与模拟SPI驱动
- XPath 获取两个node中间的HTML Nodes
- Netty-1-一个简单的服务器实例
- jpa 实体到数据库
- 热门NPM库 “coa” 和“rc” 接连遭劫持,影响全球的 React 管道
- 到底他怎么赚钱了啊?看来看去也看不出他赚钱了,看来经济头脑有限啊
- 【java学习之路】(javaWeb篇)002.CSS
- 基于CentOS构建高功能的LAMP平台
- Linux进程相关的一些笔记
- 【2018】面试复习大纲
- 风雨萧关道【电视专题片解说词】
- 自定义带放大镜功能的图片剪裁框
- メリッサ / 梅莉莎
- WIFI共享精灵 2013 电脑共享wifi
- python中open()函数里中文处理
- 外贸必备通讯工具之一,AntTone 的介绍及使用教程
- 【C++实现】编译原理 免考小队 FIRSTVT集生成算法
- 非华为手机鸿蒙怎样替换安卓,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪...
热门文章
- 男篮球员特点 里约惨案就是这样造成的
- MM模块常用T-code
- 非京籍上学有多难?从这些数据看真相
- 银行IT迎“高景气”时代,宇信科技如何领跑行业?
- “隐忍”多年的“水果大王”百果园要寻求资本协助了?
- 行为模型实例 php,JS中事件模型的实例详解
- fiddler不能抓取浏览器数据_抓包软件 Fiddler 了解一下?
- python常用面试题_史上最全Python工程师常见面试题集锦,有这一份就够了
- larvel 中的api.php_Laravel API 系列教程(一): 基于 Laravel 5.5 构建 测试 RESTful API...
- 太原未来小使者英语大赛_哥伦比亚2020年中学生“汉语桥”大赛成功在线举办...