现在的位置: 首页 > 综合 > 正文

项目中配置文件路径

2018年03月18日 ⁄ 综合 ⁄ 共 2489字 ⁄ 字号 评论关闭


1 场景

2 预备知识

3 解决办法

4 windws和linux下路径

1 场景

       在项目中大多会涉及到相对路径和绝对路径,以项目中的配置文件为例,如何找到配置文件的路径?下面介绍几种方法说明。

2 预备知识

(1)System.getProperty("user.dir") 得到的是java虚拟机调用目录即当前用户目录。

如果在eclipse使用该方法,因为Eclipse中启动jvm都是在项目根路径上启动的,如项目所在路径是E:\ProcessFileProcessFile,那么上述方法得到的路径是E:\ProcessFileProcessFile。

如果在tomcat中运行web应用,那么输出的将是tomcat下的bin目录,如E:\tomcat-5.0.28\bin

如果你的可运行jar包的目录是E:\,你启动java包,那么System.getProperty("user.dir")所指的目录是E:\

(2)JAVA IO操作中相对路径都是基于(1)中的这个路径的。

3 方法

(1)方法一

以最终java工程打成jar包为例。因为运行java包System.getProperty("user.dir")得到的目录是jar所在的目录,所以配置文件一般放在与jar包同级目录。

在eclipse中java工程如下(配置文件夹config和源码src处于同一级目录)

在代码中使用相对路径找到配置文件,可以看出相对路径是相对于当前用户目录的

打成jar包以后,jar包需要和上述config文件夹放在同级目录下,程序才能找到,如下图

运行jar包得到配置文件中的信息

缺点:System.getProperty("user.dir")获取的路径在not-web aplication 和 web application中时不一样的,不够灵活。

(2)方法2

因为System.getProperty("user.dir")或相对路径在tomcat中运行输出的是tomcat下的bin目录,如E:\tomcat-5.0.28\bin,而我们的wb工程一般是放在webapps下的,如E:\tomcat-5.0.28\webapps,那么配置文件具体位置可以根据System.getProperty("user.dir")的路径找到。但是有一种更简便的方法,不需要你发布工程后另外拷贝配置文件,只需在eclipse开发中放好,然后直接发布到tomcat即可。

getResource("/").getPath()方法直接得到classes所在路径的url(在not-web aplication 和 web application中都能得到程序的class所在根目录),如\E:\tomcat-5.0.28\webapps\项目名称\WEB-INF\classes\


String resourcePath=HandleFile.class.getResource("/").getPath(); 

注意:getResource方法使用了utf-8对路径信息进行了编码,当路径中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的中文及空格路径。
classPath = java.net.URLDecoder.decode(classPath, "utf-8");

然后处理该路径即得到classes所在路径,因为我们在项目中src下面的东东是直接编译到classes文件夹下面的,所以配置文件放在src下就会自动编译到classes文件夹下,故发布到tomcat上时无需重新配置。例如下面

推荐使用方法2

4 windows和linux下路径

直接看代码

	/**
	 *将路径转换成windows和linux下通用的路径格式
	 *windows下路径是E:\sample
	 *linux下路径是/sample
	 * @param strPath 要转换的路径
	 * @return
	 */
	public static String commonPath(String strPath)
	{
		String resultPath=null;
		//windows 下
		if("\\".equals(File.separator))
		{
			resultPath=strPath.replace("/", "\\");
		}
		//linux 下
		if("/".equals(File.separator))
		{
			resultPath=strPath.replace("\\", "/");
		}
		return resultPath;
	}

5 完整代码

	/**
	 * 获取项目类所在根路径,如D:\java\apache-tomcat-7.0.28\webapps\RegistServiceSystem\WEB-INF\classes\
	 * @return
	 */
	public static String getClassesPath() {
		String classPath = ConfigReader.class.getResource("/").getPath().substring(1);
		try {
			// getResource方法使用了utf-8对路径信息进行了编码,当路径中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要的真实路径,
			// 在此,调用了URLDecoder的decode方法进行解码,以便得到原始的中文及空格路径。
			classPath = java.net.URLDecoder.decode(classPath, "utf-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		// windows 下
		if ("\\".equals(FS)) 
			classPath = classPath.replace("/", "\\");
		// linux 下
		if ("/".equals(FS)) 
			classPath = classPath.replace("\\", "/");
		
		return classPath;
	}

抱歉!评论已关闭.