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

java中类加载路径和项目根路径获取的几种方式

2018年06月07日 ⁄ 综合 ⁄ 共 2057字 ⁄ 字号 评论关闭
package my;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class MyUrlDemo {

	
	public static void main(String[] args) {
		MyUrlDemo muDemo = new MyUrlDemo();
		try {
			muDemo.showURL();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void showURL() throws IOException {
		
		// 第一种:获取类加载的根路径   D:\git\daotie\daotie\target\classes
		File f = new File(this.getClass().getResource("/").getPath());
		System.out.println(f);

		// 获取当前类的所在工程路径; 如果不加“/”  获取当前类的加载目录  D:\git\daotie\daotie\target\classes\my
		File f2 = new File(this.getClass().getResource("").getPath());
		System.out.println(f2);

		// 第二种:获取项目路径    D:\git\daotie\daotie
		File directory = new File("");// 参数为空
		String courseFile = directory.getCanonicalPath();
		System.out.println(courseFile);
		

		// 第三种:  file:/D:/git/daotie/daotie/target/classes/
		URL xmlpath = this.getClass().getClassLoader().getResource("");
		System.out.println(xmlpath);
	

		// 第四种: D:\git\daotie\daotie
		System.out.println(System.getProperty("user.dir"));
		/*
		 * 结果: C:\Documents and Settings\Administrator\workspace\projectName
		 * 获取当前工程路径
		 */

		// 第五种:  获取所有的类路径 包括jar包的路径
		System.out.println(System.getProperty("java.class.path"));
		
	}
}
  1.FileTest.class.getResource("") 
  得到的是当前类FileTest.class文件的URI目录。不包括自己! 
  如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/ 
  2.FileTest.class.getResource("/") 
  得到的是当前的classpath的绝对URI路径。 
  如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/ 
  3.Thread.currentThread().getContextClassLoader().getResource("") 
  得到的也是当前ClassPath的绝对URI路径。 
  如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/ 
  4.FileTest.class.getClassLoader().getResource("") 
  得到的也是当前ClassPath的绝对URI路径。 
  如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/ 
  5.ClassLoader.getSystemResource("") 
  得到的也是当前ClassPath的绝对URI路径。 
  如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/ 
  我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法。 

Web应用程序中资源的寻址
  上文中说过,当前用户目录,即相对于System.getProperty("user.dir")返回的路径。
  对于JavaEE服务器,这可能是服务器的某个路径,这个并没有统一的规范!
  而不是我们发布的Web应用程序的根目录!
  这样,在Web应用程序中,我们绝对不能使用相对于当前用户目录的相对路径。
  在Web应用程序中,我们一般通过ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。

抱歉!评论已关闭.