计算类路径,计算Servlet上下文路径

---------------------取Servlet上下文路径,取WebContent的路径 --------------------------------
1、String path = request.getRealPath("/cfg.xml") (已不建议使用)
2、String path = request.getSession().getServletContext().getRealPath("/cfg.xml");

---------------------读取类路径中的文件 --------------------------------

一、getResource方法

//获取类的根路径classes/(重要)

URL s2 = Test.class.getResource("/");

String path2=s2.getPath();//如果路径有空格会使用 %20替代

//获取Test.class类文件所在的路径(重要)

URL s3 = Test.class.getResource("");

String path3=s3.getPath(); //如果路径有空格会使用 %20替代

// %20 转换为 空格(方案二)
String path4=s2.toURI().getPath(); //s2是URL s2
System.out.println(path4);

// %20 转换为 空格(方案二)

String path="file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/server-node.properties";
path = java.net.URLDecoder.decode(path, "UTF-8");
System.out.println(path);

二、getResourceAsStream方法

//在classes目录找文件a.txt

InputStream is = Test.class.getResourceAsStream( "/a.txt");

//在ReadCard类所在目录找文件a.txt

InputStream is = Test.class.getResourceAsStream( "a.txt");


----------------------取类路径测试代码 -------------------------------

package com.hc360.config.util;

import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
// Test.class类文件实际路径是:E:/workspace3.6/configure huido/web/WEB-INF/classes/com/hc360/config/util/Test.class
// 配置文件的实际路径是E:\workspace3.6\configure huido\web\WEB-INF\classes\server-node.properties
// 注意configure huido中间有一个空格
// 下面开始测试,读取类路径中的文件
public class Test {
	public static void main(String[] args) throws Exception {
		//--------------取path-----------------------
		// 获取类的根路径classes/(重要)
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/
		// 参数也可以是:"/com/a.txt",在/com/目录下找文件a.txt
		URL s2 = Test.class.getResource("/");
		System.out.println(s2);

		// 获取Test.class类文件所在的路径(重要)
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/com/hc360/config/util/
		URL s3 = Test.class.getResource("");
		System.out.println(s3);

		// 从来都是null
		// 结果:null
		URL s4 = Test.class.getClassLoader().getResource("/");
		System.out.println(s4);

		// 获取类的根路径classes/
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/
		URL s5 = Test.class.getClassLoader().getResource("");
		System.out.println(s5);

		// 获取类的根路径classes/
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/
		URL s6 = Thread.currentThread().getContextClassLoader().getResource("");
		System.out.println(s6);
		
		//--------------取流InputStream-----------------------

		// 从类的根路径classes/下读取配置文件(重要)
		// 参数也可以是:"/com/a.txt",在/com/目录下找文件a.txt
		InputStream is = Test.class.getResourceAsStream("/server-node.properties");
		System.out.println("InputStream is:" + (is == null ? "null" : "not null"));

		// 在Test类所在目录找文件(重要)
		// 要在classes/com/hc360/config/util/下有server-node.properties文件,就可以读出来
		// 获取Test.class类文件所在的路径,读取配置文件(实际没有配置文件,所以返回null)
		InputStream is7 = Test.class.getResourceAsStream("server-node.properties");
		System.out.println("InputStream is:" + (is7 == null ? "null" : "not null"));

		// 从来都是null
		InputStream is2 = Test.class.getClassLoader().getResourceAsStream("/server-node.properties");
		System.out.println("InputStream is:" + (is2 == null ? "null" : "not null"));

		// 从类的根路径classes/下读取配置文件
		InputStream is3 = Test.class.getClassLoader().getResourceAsStream("server-node.properties");
		System.out.println("InputStream is:" + (is3 == null ? "null" : "not null"));

		//-------------------%20 转换为 空格--------------------
		//  %20 转换为 空格
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/
		String path5=s2.toURI().toString();
		System.out.println(path5);
		
    	String path="file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/server-node.properties";
    	path = java.net.URLDecoder.decode(path, "UTF-8");
    	System.out.println(path);
	}

}

你可能感兴趣的:(Servlet上下文路径)