---------------------取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);
}
}
3964

被折叠的 条评论
为什么被折叠?



