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 这里有详细的用法