您的位置:首页 > 编程语言 > Java开发

java开发之文件路径剖析

2017-04-25 20:47 211 查看
从事开发工作三年有余,但是说句实话,对于项目开发中文件的相对路径该如何写,一直是一个很困扰我的问题,今天花时间终于把这块搞明白了,特此写一篇博客,一是为了便于自己记忆,二是也希望和我一样有困扰的朋友们看了有所帮助,文章纯属个人经实战验证后参悟出来的道理,不足之处望大家留言指出,非常感谢!好了,切入正题吧!

要弄清文件的相对路径问题首先依次解答以下几个问题:

第一、普通java工程目录和web工程目录有什么区别?

            1、创建时对比:web项目相对于普通java项目多了一个企业级开发环境javaee

          




         

           2.项目目录对比:web项目多了javaee开发所需要的jar包

          


第二、web项目目录结构:eclipse中项目目录中src下的文件编译后会放到WebRoot/WEB-INF/classes目录下,发布时会将WebRoot下的所有内容拷贝到tomcat/webapps/web应用名/下:



第三、不同场景下文件的相对路径是相对什么而言的?

             1.普通java类中:相对路径的根目录是项目的根文件夹,即是相对于项目根目录而言的,所以在书写相对路径时应以根目录为参考点,在此就是GenericProject文件夹了

             


             2.通过ServletContext获取资源文件时:相对路径是web应用所在根目录,注意这里是web应用而不是工程目录,即对应于tomcat中web应用所在根目录;注意:工程目录中直接放在项目根目录下的资源文件是获取不到的,因为项目发布时只是将webroot下的内容发布过去,而对于项目根目录下的文件是不发布的,即这里的project.properties是获取不到的

            


             

             3.通过类加载器获取资源文件时:通过类加载器获取资源文件时,相对路径是相对于类加载器加载.class文件的根目录的

             


但是,此处需注意一个问题,当我们通过classLoader.getResourceAsStream(文件相对路径),将文件以流的方式读进内存时,如果此时再更改资源文件1.properties,内存中的数据因为没有重新加载,所以数据是不能保持同步更新的,所以一般不使用这种以流的方式获取资源文件的,而是用下面的方式:



以上总结了三种场景下文件的相对路径该如何书写问题,包括在普通java类中的相对路径,通过类加载器获取资源以及通过ServletContext获取资源文件三种情况下相对路径的写法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: