java加载资源路径以及ClassPath的关系

http://www.blogjava.net/flysky19/articles/93492.html

以下是我自己根据上面的文章和自学学习工作中做的总结,首先,我们的路径(如果不是绝对路径)都有一个前缀,比如我们这样写

FileInputStream fis = new FileInputStream("aa.txt");

如果是这样的话,他访问的到底是哪个文件呢,FileInputStream解析都是通过一个系统属性来作为前缀的,我们可以打印出来

如:System.out.println(System.getProperty("user.dir")),也就是说

前缀是user.dir这个系统属性,在web项目中这个路径是你的服务器路径,当然我没有做过严格测试,你可以自己仔细的看一下,怎么看呢?首先

我们可以创建一个文件

File file = new File("test.txt");

这个文件是我们用相对路径创建的,但是我们可以用Java 提供的API来获取其绝对路径

file.getAbsolutePath()  就可以看到,到底是从哪里加载的。这里通过这种方式我们就可以获取FileInputStream 的加载路径了。

另外一种情况是web工程

我一般是通过 Thread.currentThread.getContextClassLoader().getResourceAsStream("aa.txt"),这样,是从classpath,也就是WEB-INF/classes下加载了



高级篇

这里是手动添加jar包或者目录到classpath中

http://www.blogjava.net/jnbzwm/archive/2011/04/01/347491.html


classpath是ClassLoader加载资源的地方,其实我们可以查看到底某个ClassLoader是从哪里加载资源的,在看代码前,先了解ClassLoader的继承机制,ClassLoader ->SecureClassLoader->URLClassLoader

		URLClassLoader classLoader = (URLClassLoader)this.getClass().getClassLoader();
		URL [] urls = classLoader.getURLs();
		for(URL url : urls){
			System.out.println(url);
		}
可以打印出这些内容

http://lucien-zzy.iteye.com/blog/2001768 这里有详细的用法

你可能感兴趣的:(java加载资源路径以及ClassPath的关系)