这里总结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中获取资源文件的方法总结的更多相关文章

  1. java基础知识3--如何获取资源文件(Java中获取资源文件的url)

    java开发中,常见的resource文件有:.xml,.properties,.txt文件等,后台开发中经常用到读取资源文件,处理业务逻辑,然后返回结果. 获取资源文件的方法说明getResourc ...

  2. java中读取资源文件的方法

    展开全部 1.使用java.util.Properties类的load()方法 示例: //文件在项目下.不是在包下!! InputStream in = new BufferedInputStrea ...

  3. java 中获得 资源文件方法

    1 java 中获取资源文件的方法 项目目录如下 获取当前项目的目录路径 方法一:使用类名 MergeDocHandler.class.getClassLoader().getResource(&qu ...

  4. springboot jar包运行中获取资源文件

    1. 今天晚上写了一个程序,基于Spring boot的一个小网站,发现使用FileUtils.class.getResource(path)来获取jar包中的资源文件并不能成功,其路径很奇怪 fil ...

  5. java之获取资源文件

    背景介绍 在java程序中有时我们需要加载项目中的某些资源文件(如:config.properties之类),以便获取里面的值,这样可以避免某些需要经常修改的数据硬编码入业务程序中 实现方式 实现这种 ...

  6. Java中的资源文件加载方式

    文件加载方式有两种: 使用文件系统自带的路径机制,一个应用程序只能有一个当前目录,但可以有Path变量来访问多个目录 使用ClassPath路径机制,类路径跟Path全局变量一样也是有多个值 在Jav ...

  7. 说说Java中的资源文件的读取

    最近在看spring的资源获取时发现JDK里存在几种不同方式的资源获取,因比较混乱特地总结起来帮助和我一样混乱的人理解.下面是我项目的类结构图,在 src/main/java 下有两个类 Resour ...

  8. web项目打包后在代码中获取资源文件

    在web项目里面,有时代码里面需要引用一些自定义的配置文件,这些配置文件如果放在类路径下,项目经过打包后使用的相对路径也会发生变化,所以以下给出了三种解决方案. 一.properties下配置 在类路 ...

  9. Java中获取路径的各种方法

    1. java文件中获得路径 Thread.currentThread().getContextClassLoader().getResource("") //获得资源文件(.cl ...

随机推荐

  1. Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

    一. 在res/values 文件下定义一个attrs.xml 文件.代码如下: <?xml version="1.0" encoding="utf-8" ...

  2. thinkphp 伪静态 自定义后缀

    <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.we ...

  3. Spring加载静态资源的方式

    解决方法1:在web.xml里添加如下的配置 <servlet-mapping> <servlet-name>default</servlet-name> < ...

  4. Lucene系列二:Lucene(Lucene介绍、Lucene架构、Lucene集成)

    一.Lucene介绍 1. Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包.提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人 ...

  5. SpringBoot系列一:SpringBoot的产生

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 长期以来 Java 的开发一直让人所诟病: ·Java 项目开发复杂度极其高: · Java 项目的维护非常困难: · 在云时代 ...

  6. php 序列化与反序列化

    <?php //声明一个类 class dog { var $name; var $age; var $owner; function dog($in_name=",$in_owner ...

  7. MongoDB多文档查询

    db.getCollection('transactionCompensation').find( { "$and":[ { "status":{ " ...

  8. [ACM] POJ 1611 The Suspects (并查集,输出第i个人所在集合的总人数)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 21586   Accepted: 10456 De ...

  9. C# POST数据base64到接口会出错的问题

    这个base64在requestHeader里面变成了base64=hySGNg22yX0AIjNQvNJw0xHEbi32NH%2BiRVKDkbOmUiKpxW0%2FS6rUgfLmSa527Y ...

  10. Fragment管理工具类

    Fragment相关→FragmentUtils.java→Demo addFragment : 新增fragment removeFragment : 移除fragment replaceFragm ...