Java中获取资源文件的方法总结
这里总结3中方法获取资源文件的
- ServletContext
- Class
- ClassLoader
文件的位置

1. ServletContext
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
ServletContext context = this.getServletContext();
/**
* 获取不同路径下的资源文件
* servletContext是相对于项目的根目录的,这里为WebContent
*/
InputStream inputA = context.getResourceAsStream("/a.txt");
InputStream inputB = context.getResourceAsStream("/WEB-INF/classes/cn/zydev/b.txt");
InputStream inputC = context.getResourceAsStream("/WEB-INF/classes/c.txt"); /**
* 获取真实的磁盘路径
*/
String realPath = context.getRealPath("/WEB-INF/classes/c.txt"); /**
* 获取指定目录下的文件(包括目录,深度为1级)
*/
Set<String> rsc = context.getResourcePaths("/WEB-INF");
String a = IOUtils.toString(inputA);
String b = IOUtils.toString(inputB);
String c = IOUtils.toString(inputC);
pw.print(a+"<br/>");
pw.print(b+"<br/>");
pw.print(c+"<br/>");
pw.print(realPath+"<br/>");
pw.println(rsc);
}
结果显示:

2. ClassLoader
使用ClassLoader是相对于classes的
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
/**
* ClassLoader是相对于classes参照的
* 第一个斜杠可以不写,也可以写成./(熟悉Linux的应该很清楚)
*/
ClassLoader cl = this.getClass().getClassLoader();
InputStream inputA = cl.getResourceAsStream("/../../a.txt");
InputStream inputB = cl.getResourceAsStream("/cn/zydev/b.txt");
InputStream inputC = cl.getResourceAsStream("/c.txt");
String a = IOUtils.toString(inputA);
String b = IOUtils.toString(inputB);
String c = IOUtils.toString(inputC);
pw.print(a+"<br/>");
pw.print(b+"<br/>");
pw.print(c+"<br/>");
}
得到结果:

3. class
路径前斜杠表示相对于当前的class,不加斜杠相对于classes
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
Class cs = this.getClass();
//不加斜杠表示相对于class(CServlet)
InputStream inputA = cs.getResourceAsStream("../../../../a.txt");
InputStream inputB = cs.getResourceAsStream("b.txt");
//加斜杠,相对于classes
InputStream inputC = cs.getResourceAsStream("/c.txt");
String a = IOUtils.toString(inputA);
String b = IOUtils.toString(inputB);
String c = IOUtils.toString(inputC);
pw.print(a+"<br/>");
pw.print(b+"<br/>");
pw.print(c+"<br/>");
}
得到结果:

Java中获取资源文件的方法总结的更多相关文章
- java基础知识3--如何获取资源文件(Java中获取资源文件的url)
java开发中,常见的resource文件有:.xml,.properties,.txt文件等,后台开发中经常用到读取资源文件,处理业务逻辑,然后返回结果. 获取资源文件的方法说明getResourc ...
- java中读取资源文件的方法
展开全部 1.使用java.util.Properties类的load()方法 示例: //文件在项目下.不是在包下!! InputStream in = new BufferedInputStrea ...
- java 中获得 资源文件方法
1 java 中获取资源文件的方法 项目目录如下 获取当前项目的目录路径 方法一:使用类名 MergeDocHandler.class.getClassLoader().getResource(&qu ...
- springboot jar包运行中获取资源文件
1. 今天晚上写了一个程序,基于Spring boot的一个小网站,发现使用FileUtils.class.getResource(path)来获取jar包中的资源文件并不能成功,其路径很奇怪 fil ...
- java之获取资源文件
背景介绍 在java程序中有时我们需要加载项目中的某些资源文件(如:config.properties之类),以便获取里面的值,这样可以避免某些需要经常修改的数据硬编码入业务程序中 实现方式 实现这种 ...
- Java中的资源文件加载方式
文件加载方式有两种: 使用文件系统自带的路径机制,一个应用程序只能有一个当前目录,但可以有Path变量来访问多个目录 使用ClassPath路径机制,类路径跟Path全局变量一样也是有多个值 在Jav ...
- 说说Java中的资源文件的读取
最近在看spring的资源获取时发现JDK里存在几种不同方式的资源获取,因比较混乱特地总结起来帮助和我一样混乱的人理解.下面是我项目的类结构图,在 src/main/java 下有两个类 Resour ...
- web项目打包后在代码中获取资源文件
在web项目里面,有时代码里面需要引用一些自定义的配置文件,这些配置文件如果放在类路径下,项目经过打包后使用的相对路径也会发生变化,所以以下给出了三种解决方案. 一.properties下配置 在类路 ...
- Java中获取路径的各种方法
1. java文件中获得路径 Thread.currentThread().getContextClassLoader().getResource("") //获得资源文件(.cl ...
随机推荐
- 记一次win10 installer安装MySQL 5.7的过程
最新发现:其实就是windows显示的DPI改为了200%导致的,改成100%就没问题了.囧 不想折腾参数配置什么的,直接使用installer安装的. 诡异的是,安装完成之后需要配置,但界面上看不到 ...
- e836. 设置JTabbedPane中卡片的提示语
There are two ways to set a tool tip on a tab. The first is to specify it when the tab is created; t ...
- django学习2 视图和模板
1 编写更多的视图 polls/views.py def detail(request, question_id): return HttpResponse("You're looking ...
- AngularJS $http模块POST数据,后台接受不到
1.问题: 后端接收不到AngularJs中$http.post发送的数据,总是显示为null 示例代码: $http.post(/admin/KeyValue/GetListByPage, { pa ...
- (原)在firefly_rk3288开发板上解决openGL在设置32位色深以后出现花屏的问题
转载请注明出处:http://www.cnblogs.com/lihaiping/p/5567141.html 在做openGL测试的过程中,根据论坛上的帖子,在使用/bin/fbset -a -no ...
- MongoDB多文档查询
db.getCollection('transactionCompensation').find( { "$and":[ { "status":{ " ...
- 系统中hosts文件有哪些作用
hosts文件位于系统盘C:\Windows\System32\drivers\etc中,hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库 ...
- hibernate 中的session和事务(Transaction)
在使用hibernate开发时,遇到最多的就是session与事务,那么他们两个有什么关系呢?下面我来抛砖引玉: 1.session是hibernate中的以及缓存机制,是用来对数据进行增删改查的一个 ...
- Peckham添加引用文件模糊匹配智能提示
下载地址:https://github.com/markohlebar/Peckham 跟VVDocumenter规范注释生成器的安装方式一样: 下载开源工程在Xcode重新编译运行会自动安装此插 ...
- mac osx voice over的使用
mac下的filezilla是一个很奇葩的应用,奇葩在哪?有一次我不知道怎么操作的,把filezilla搬到到了窗体顶部,结果被mac的菜单栏挡住了标题栏,然后再也无法移动窗体了,以下是我为了移动它做 ...