</pre>一、web项目根目录的获得(发布之后),java原生类中不可以使用1 从servlet出发可建立一个servlet在其的init方法中写入如下语句(没有请求的话会抛空指针导常)<pre name="code" class="java">ServletContext s1=this.getServletContext();
String temp=s1.getRealPath("/"); (关键)
结果形如:F:\tomcat-6.0.36\webapps\test\(test为项目名字)
如果是调用了s1.getRealPath("")则输出F:\tomcat-6.0.36\webapps\test(少了一个"\")
2 从httpServletRequest出发(没有请求的话会抛空指针导常)
String path=request.getSession().getServletContext().getRealPath("/");
结果形如: F:\tomcat-6.0.36\webapps\test\
二、属性文件的读取:
1、filePath为.properties必须为绝对路径,相对路径找不到该文件
Properties props = new Properties();
InputStream in = lnew BufferedInputStream( new FileInputStream(filePath));
p.load(in);
String realPath=props.getProperty("key");
2、filePath可为.properties相对路径
Properties props = new Properties();
props.load(NewUserController.class.getClassLoader().getResourceAsStream(filename));
String realPath=props.getProperty("key");
ps:在读写操作文件时,使用第一种方式做为输入流(InputStream)可以读写操作,第二种方式仅限于读取输入流(InputStream),而写入不到文件中,但是不报错的,同时会将你相对路径的文件拷贝到tomcat所在盘符根目录下建立文件。我tomcat在E盘所以会在E盘,则将我项目中相对路径文件拷贝到E盘下,之后修改这个文件!
三、获取服务器路径的各种方式
//获取服务器中绝对地址,带file: file:/D:/wc/.metadata/.plugins/org.eclipse.wst.server.core/tmp7/wtpwebapps/wanxue/WEB-INF/classes/
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
System.out.println(this.getClass().getResource("/"));
//获取服务器中绝对地址 /E:/workSoftware/apache-tomcat-7.0.56/webapps/wanxue/WEB-INF/classes/
System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath());
//获取当前类的在服务器中绝对地址 /E:/workSoftware/apache-tomcat-7.0.56/webapps/wanxue/WEB-INF/classes/
System.out.println(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
//获取当前项目在部署在服务器的绝对位置,并去掉路径前的下划线 E:/workSoftware/apache-tomcat-7.0.56/webapps/wanxue/WEB-INF/classes/
String path = switchDServiceImpl.class.getClassLoader().getResource("") .getPath().substring(1);
ps:这个服务器地址为你在eclipse中配置Apache Tomcat中的部署路径,默认路径为 workspace/.metadata/.plugins/org.eclipse.core.resources/.projects
ps:修改后Eclipse中项目在Apache Tomcat中的部署路径,地址: 点击打开链接
ps:做项目过程中,一定要区分eclipse的默认项目Apache Tomcat的部署路径,自己的项目工作目录及自己安装Apache Tomcat安装目录,以免混淆。
四、获取其他路径地址
//tomcat根目录 E:\workSoftware\apache-tomcat-7.0.56
System.out.println(System.getProperty("catalina.home").toString());
//eclipse根目录地址 E:\workSoftware\eclipse
System.out.println(System.getProperty("user.dir"));
System.out.println((new File("")).getAbsolutePath());
System.out.println(System.getProperty("user.dir").replace("bin", "webapps"));
五、JAVA读写操作代码
<span style="white-space:pre"> </span>//开关配置地址,获取当前项目在部署在服务器的绝对位置
static String filePath =switchDServiceImpl.class.getClassLoader().getResource("") .getPath().substring(1)+"switchState.properties";
/**
* @author 王超
* return 根据key取得value值
*/
public String keyValue(String key) {
Properties pps = new Properties();
try {
InputStream in = new BufferedInputStream (new FileInputStream(filePath));
pps.load(in);
String value = pps.getProperty(key);
return value;
}catch (Exception e) {
e.printStackTrace();
return "switchState.properties路径找不到";
}
}
/**
* 修改properties中键值对
* @author 王超
* @param key 键
* @param value 值
*/
public void writeProperties( String key, String value) {
Properties pps = new Properties();
InputStream in;
try {
in = new FileInputStream(filePath);
//从输入流中读取属性列表(键和元素对)
pps.load(in);
//调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
//强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
OutputStream out = new FileOutputStream(filePath);
pps.setProperty(key, value);
//以适合使用 load 方法加载到 Properties 表中的格式,
//将此 Properties 表中的属性列表(键和元素对)写入输出流
pps.store(out, "Update " + key + " name");
} catch (Exception e) {
e.printStackTrace();
}
}
ps:这里采用new BufferedInputStream (new FileInputStream(filePath))来进行读写文件操作,在"三"中有介绍的
ps:调用keyValue(key)读取文件,调用writeProperties(key,value)进行添加或修改,当key存在则修改,不存在则添加键值对!
ps:在java项目中可以使用File.separator代表下划线