【转】SpringBoot——web项目下读取classpath下的文件心得

在读取springBoot+gradle构建的项目时,如果使用传统的FileInputStream读取文件流或者ResourceUtils工具类的方式,都会失败,下面解释原因:

一、读取文件的三种方式:

1. ResourceUtils工具类

import org.springframework.util.ResourceUtils;
//使用:
File file= ResourceUtils.getFile("classpath:test.txt");

2. FileInputStream文件流的方式读取

(该方式为按行读取,若不是按行处理,需要像图中将每行数据存在一个buffer中,然后转成String处理)

3. ClassPathResource获取文件流的方式

ClassPathResource classPathResource = new ClassPathResource("test.txt");

获取文件:classPathResource .getFile();

获取文件流:classPathResource .getInputStream();

二、不同web容器读取文件的区别

有两种常见的web容器:

  1. 第一种是普通的web项目,特点是jar/war压缩包会随着容器的启动解压缩成一个文件夹,当项目访问的时候,实际是访问文件夹,而非jar或者war包。该种方式下,用获取路径的方法:this.getClass().getResource("/")+fileName或者获取流的方法:this.getClass().getResourceAsStream(failName);都可以成功。
  2. 第二种是内嵌web容器,Spring boot就是内嵌web容器,其特点是只有一个jar文件,在容器启动后不会解压缩,项目实际访问的就是jar/war包该种方式最容易遇坑!!最大的坑就是,this.getClass().getResource("/")+fileName在本地windows下能完美找到路径,可是在linux测试服务器下就失败,所以读取jar中的文件只能用流读取,不能用file,即只能用方式三读取。所以,用spring boot搭建的工程,只能用
classPathResource .getInputStream();获取文件流。

转自:https://blog.csdn.net/NNnora/article/details/80734326

原文地址:https://www.cnblogs.com/liaoguanwang/p/9749995.html

时间: 2024-08-22 13:19:58

【转】SpringBoot——web项目下读取classpath下的文件心得的相关文章

将Windows MyEclipse的web项目移植到Debian下

用windows先的MyEclipse很方便,但是要把MyEclipse的web项目移植到Debian下,稍微有一点麻烦.当然,如果是ubuntu的话,直接装MyEclipse就可以了.这里只将针对于无图形界面的Debian的移植过程. 1.配环境(jdk+apache+tomcat+mysql)(当然,不需要数据库的就用配了) 2.把原来的项目移植到Linux下. 主要分为以上两个部分讲述. ========================= 1.1 jdk 我下载的是jdk.tar.gz包,

读取ClassPath下resource文件的正确姿势

1.前言 为什么要写这篇文章?身为Java程序员你有没有过每次需要读取 ClassPath 下的资源文件的时候,都要去百度一下,然后看到下面的这种答案: Thread.currentThread().getContextClassLoader().getResource("ss.properties").getPath(); 亦或是: Object.class.getResourceAsStream("ss.properties"): 你复制粘贴一下然后放到自己的项

java web项目中 读取properties 路径的问题

可以先获取项目的classPath String classPath = this.getClass().getResource("/").getPath();//获取classPath(部署到tomcat的路径上) 我的为/D:/apache-tomcat-6.0.29/webapps/demo/WEB-INF/classes/  在连接下面的路径即可 代码如下: package readproperties; import java.io.BufferedInputStream;i

eclipse中web项目部署以后jsp的java文件找不到问题(Tomcat配置serverlocations)

我的开发环境:eclipse kepler (4.3)+tomcat7.0.42. 在我想看eclipse中web项目jsp文件被tomcat转换成java以后的java源文件的位置,发现正常情况下的webapps以下,没有看到我部署的项目 同一时候,work文件夹(jsp的工作文件夹)以下也没有生成相关的jsp的class文件和java源文件.可是我想看源代码啊.找了一堆关于jsp的源代码位置的文章,都说是在work以下能够找到.后来在不断的尝试下,我搜索了keyword server loc

使用Maven创建Web项目后,jsp引入静态文件提示报错。JSP 报错:javax.servlet.ServletException cannot be resolved to a type

使用Maven创建Web项目后,jsp引入静态文件提示报错. 错误提示:javax.servlet.ServletException cannot be resolved to a type 错误如下图: 解决方案: 在Maven的pom文件中引发如下依赖即可: <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <versio

【转】MyEclipse开发Web项目发布到Tomcat下的Root目录

通常情况下,Web项目是发布到Tomcat下的webapps文件目录下的 .以至于我们访问的时候: 例如:Web应用项目名称为:webManager,则部署到tomcat后,是部署在tomcat/webapps/webManager中,网址为:http://localhost:8080/webManager. 然而 ,每当我们访问一个网站页面时,地址栏就是:http://www.1234.com/login.html.所以一般我们实际使用是不带webManager(也就是所谓的项目名称)的. 具

Spring 读取classpath下的文件存到map里面

Spring配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework

MyEclipse 开发 Web项目发布到 Tomcat 下的Root 目录

通常情况下,Web项目是发布到Tomcat下的webapps文件目录下的 . 例如:Web应用项目名称为:stock,则部署到tomcat后,是部署在tomcat/webapps/stock中,网址为:http://localhost:8080/stock. 然而 ,每当我们访问一个网站页面时,地址栏就是:http://www.XXX.com/login.html.所以一般我们实际使用是不带stock(也就是所谓的项目名称)的. 具体操作如下: 选中我们要操作的Web项目,单击右键,选择Prop

在windows 、linux下读取目录下所有文件名

Windows要引入的头文件是<Windows.h> 主要是两个函数FindFirstFile.FindNextFile MSDN里是这么说的: FindFirstFile function Searches a directory for a file or subdirectory with a name that matches a specific name (or partial name if wildcards are used). 这个函数是用来在给定目录下搜索某个文件用的(比