分享一个项目中使用的获取项目根目录的方法。原方法因为只运行在Linux环境下,所有对于Java应用使用时有点问题,我进行一点优化。优化后适用Web项目和Java应用项目。
路径是采用class类加载器的方式获取的,方法里区分了当前运行环境是Linux和Window,两者在截取时有一点区别。
import java.io.File;
import java.net.URLDecoder;
public class ProjectPath {
private static String rootPath = "";
private ProjectPath() {
init();
}
@SuppressWarnings("deprecation")
private static void init() {
String path = ProjectPath.class.getResource("ProjectPath.class")
.toString();
path = URLDecoder.decode(path);
path.replaceAll("\\\\", "/");
int index = path.indexOf("WEB-INF");
if (index == -1) {
index = path.indexOf("bin");
}
if (index == -1) {
index = path.indexOf("lib");
}
if (index == -1) {
int index2 = path.indexOf("jar!");
if (index2 != -1) {
path = path.substring(0, index2);
System.out.println(path);
System.out.println(File.separator);
index = path.lastIndexOf("/");
System.out.println(index);
}
}
path = path.substring(0, index);
if (path.startsWith("jar")) {
path = path.substring(9);
}
if (path.startsWith("file")) {
path = path.substring(5);
}
if (path.endsWith("/") || path.endsWith("\\")) {
path = path.substring(0, path.length() - 1);
}
// linux环境下第一个/是需要的
String os = System.getProperty("os.name").toLowerCase();
if (os.startsWith("win")) {
path = path.substring(1);
}
rootPath = path;
}
/**
* 获取应用的根目录,路径分隔符为/,路径结尾无/
*
* @return
*/
public static String getProjectPath() {
if ("".equals(rootPath)) {
init();
}
return rootPath;
}
}
使用方式就是ProjectPath.getProjectPath()即可。
比如,Linux上,获取的路径格式为/home/weblogic/xx;Window上,获取的路径格式为C:/tmp/xx。