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/>");
	}

  得到结果:

时间: 2024-10-12 13:06:30

Java中获取资源文件的方法总结的相关文章

servlet和普通类获取资源文件的方法

package cn.servlet.demo1; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties; import javax.servlet

java中获取所有文件--(递归调用)

import java.io.File;import java.io.*; //获取一个文件夹中的所有的文件.  /*    打印要求:      -- a.txt   -- IO.doc      -- ~$IO.doc   -- 代码   -- --.metadata   -- --Day18   --视频   -- --01 线程通信.wmv   -- --02 守护线程和join方法.wmv   -- --03 Filed的创建.wmv   -- --04 File的常用方法.wmv  

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

1. 今天晚上写了一个程序,基于Spring boot的一个小网站,发现使用FileUtils.class.getResource(path)来获取jar包中的资源文件并不能成功,其路径很奇怪 file:/Users/lonecloud/Documents/ideaCode/git/export/target/export-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/temp/temp.xls 查阅资料后,并且查看jar包中的资源文件发现有!还有classes!这

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

最近在看spring的资源获取时发现JDK里存在几种不同方式的资源获取,因比较混乱特地总结起来帮助和我一样混乱的人理解.下面是我项目的类结构图,在 src/main/java 下有两个类 ResourceTest.java和Resource.java ,resources 目录下有两个资源文件 request.xml 和 conf/sysConf.json ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ ├── com │ │ │ │ ├──

JAVA中获取键盘输入的方法总结

Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!下面介绍三种解决方法: 方法一:从控制台接收一个字符,然后将其打印出来 import java.io.*; public static void main(String [] args) throws IOException{ System.out.print("Enter a Char:"); char i = (ch

【转】Java中获取文件大小的正确方法

本文出处:http://blog.csdn.net/chaijunkun/article/details/22387305,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始出处查看此文. 今天写代码时需要实现获取文件大小的功能,目前有两种实现方法,一种是使用File的length()方法:另外一种是使用 FileInputStream的available()方法,当InputStream未进行read操作时,available()的大小应该是等于 文件大小的.但

JAVA中获取工程路径的方法

转自:http://java-my-life.iteye.com/blog/829504 在jsp和class文件中调用的相对路径不同.在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProperty("user.dir")获取你工程的绝对路径. 1.jsp中取得路径: 以工程名为TEST为例 (1)得到包含工程名的当前页面全路径: Java代码   request.getRequestU

[Java基础] 深入jar包:从jar包中读取资源文件

转载: http://hxraid.iteye.com/blog/483115?page=3#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看下面的代码: //源代码1: package edu.hxraid; import java.io.*; public class Resource { public void getRe

java 从jar包中读取资源文件

在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java.io.*; public class Resource { public  void getResource() throws IOException{ File fil