java工程中的相关路径

一、路径

  绝对路径: 指的是文件在系统中的真实路径(物理路径)。
  相对路径: 指的是文件相对某个目录的相对路径。
  对于java application 工程来说,当编写完一个类之后,class文件会编译,默认存放在bin目录中。
存放的目录结构安装包的命名依次存放。同时一些在src目录,或其他Source Fodder目录中的资源文件也会被编译到bin目录中(有些构建的不是存放在bin目录中,这根据构建工具而异)。

  而当程序运行的时候,执行的就是bin目录中的class文件,读取的资源文件也是bin目录中的。
对于java web 工程来说,当编写完一个类之后,class文件默认会被编译到这个web工程下的Webapp目录下的WEB-INF生成的classes目录中。
存放的目录结构安装包的命名依次存放。同样一些在src目录,或其他Source Fodder目录中的资源文件也会被编译到classes目录中。

  而我们对路径的操作基本上是基于class文件所在的目录进行的。

二、示例

  1、通过class 与 ClassLoader获取路径

 1     //testapp为工程名称
 2     // 返回编译后的class-path路径 
 3     //路径:    /D:/web-create/testapp/target/classes/
 4     System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath()); 
 5     //路径:    /D:/web-create/testapp/target/classes/com                 此处的com目录必须要存在,否则会抛异常
 6     System.out.println(ClassLoader.getSystemResource("com").getPath());                
 7     //路径: /D:/web-create/testapp/target/classes/                    编译代码后的classes路径             
 8     System.out.println(ClassLoader.getSystemResource("").getPath());     
 9     //路径:    /D:/web-create/testapp/target/classes/                  编译代码后的classes路径 
10     System.out.println(Test.class.getResource("/").getPath());            
11     //路径: /D:/web-create/testapp/target/classes/com/                Test.class文件所在路径 
12     System.out.println(Test.class.getResource("").getPath());            
13     //路径: /D:/web-create/testapp/target/classes/com/Test.class    Test.class文件全路径
14     System.out.println(Test.class.getResource("Test.class").getPath()); 

  2、webapp中通过request,session等获取路径

 1     HttpServletRequest request = null;
 2     ///返回web应用名称:         testapp    
 3     System.out.println(request.getContextPath());
 4     
 5     // 当前web应用的绝对路径(后面没有\)   E:/web-create\testapp\src\main\resources\webapp
 6     System.out.println(request.getSession().getServletContext().getRealPath(""));
 7 
 8     // 当前web应用的绝对路径(后面有\)     E:/web-create\testapp\src\main\resources\webapp\
 9     System.out.println(request.getSession().getServletContext().getRealPath("/"));        
10     
11     // 当前web应用中指定目录绝对路径         E:/web-create\testapp\src\main\resources\webapp\resource\image  
12     System.out.println(request.getSession().getServletContext().getRealPath("/resource/image")); 
13 
14     //获取PATH目录下的子目录以集合的形式返回():[/resource/image/2015/]
15     System.out.println(request.getSession().getServletContext().getResourcePaths("/resource/image"));
16 
17     // 当前web应用中指定目录绝对路径         E:/web-create\testapp\src\main\resources\webapp\resource\image
18     System.out.println(request.getRealPath("/resource/image"));// 不建议使用,用 ServletContext.getRealPath()方法代替

  3、文件相关路径

    //路径: D:\   工程所在根目录
    System.out.println(new File("/").getAbsolutePath());      
    //路径: D:\web-create\testapp\com
    System.out.println(new File("com").getAbsolutePath());  
    //路径:D:\web-create\testapp 
    System.out.println(new File("").getAbsolutePath());      
    //路径:D:\web-create\testapp
    System.out.println(System.getProperty("user.dir"));  
    // class path 路径
    System.out.println(System.getProperty("java.class.path")); 

  4、加载src(实际上是bin目录或classes目录下的)下的properties

 1     //加载文件相关
 2     InputStream is = new FileInputStream(ClassLoader.getSystemResource("").getPath() + "config.redis.pool.properties");//该种方式与下面得到的结果一致
 3     is = Test.class.getResourceAsStream("config.redis.pool.properties");//与下面结果一样
 4     is = Test.class.getResourceAsStream("/config.redis.pool.properties");
 5     //InputStream is = Test.class.getResourceAsStream("/com/config.redis.pool.properties");//参数是相对于classes目录下的文件全路径
 6     Properties properties = new Properties();
 7     properties.load(is);
 8     is.close();
 9     for(Object obj :properties.keySet()){
10         System.out.println("key: " + obj + " value: " + properties.get(obj));
11     }  
更多相关文章
  • 欢迎加入Reboot运维开发千人群(365534424) 技术交流分享天天有 Python 的多线程有两种实现方法: 函数,线程类 1.函数 调用 thread 模块中的 start_new_thread() 函数来创建线程,以线程函数的形式告诉线程该做什么 1 2 3 4 5 6 7 8 9 10 ...
  • ipfw是BSD系统中重要的防火墙和通信控制工具,在MacOSX中也很好用.先简单贴几个用法,有空再补上:   列出配置表       sudo ipfw list      sudo ipfw list      禁用ping,即ICMP协议     ipfw add 3333 deny icmp ...
  •    由于我才开始接触代码的时候遇到循环问题都是用foreach和for,慢慢就成了习惯,不愿意用其他简便的方式,偶然发现lambda能代替循环而且简便了很多.当然我用lambda也不是简便,更多是不用不行了,看公司项目很多地方这种用法导致我没有看懂源码,所以索性把关于lambda的知识学习并进行总 ...
  • 早在去年12月中旬,微软就公布数据称全球Windows 10预览版用户数量已经超过150万,起初还有分析人士对这一数据表示怀疑,认为是微软在虚张声势,以挽回Windows 8失败的颜面. 不过,最新数据显示,用户对于Windows 10的期望和热情的确令人惊讶. 分析机构Net Applicatio ...
  • 美国科技网站ZDNet撰稿人史蒂文·沃恩·尼格尔斯(Steven J.Vaughan-Nichols)周一发表文章称,为了Android设备用户的使用安全,谷歌需要清理安卓市场(Android Market)上的大量恶意软件.以下是文章梗概: 周一,移动互联网安全公司Lookout Mobile S ...
  • 很多朋友都在装了win10之后出现了"win10 cpu或是 磁盘100%运行"的问题,如何解决呢,下面小编就为大家介绍win10 cpu 磁盘 100% 运行及内存使用量变大 优化汇总,来看看吧 如同历代Windows一样,通过在线方式升级Windows 10之后会在C盘留下旧 ...
一周排行
  • 目前,深度数据包检测(DPI)功能正被整合到入侵检测和网络管理设备中,于是很多供应商,包括从传统网络基础设施供应商到第三方供应商等都提供这种工具.一些供应商提供基于流的DPI,而其他供应商则提供基于代理的DPI技术. ...
  • 源:Knockout.js 日期格式化 源:momentjs
  • 前几篇文章说了,parent.self.static关键字的使用,parent可以访问父类的静态方法和静态变量,self和static可以访问本类的静态成员等等,但实际上他们还有其他作用,来看一下: 1 class ...
  •      项目中有一个删除的动作,需要删除文件以及文件在数据库中的记录,我在删除前进行了一次数据库的查询操作,然后下面进行了删除的动作,报出了这个错误 / * 从数据库中删除下载任务 * * @param downL ...
  • 在白天,他们是会计.律师.技工和销售员.工作时,他们专注高效.顺风顺水,并往往能在其领域晋升到高层职位.然而这些不事张扬的工薪阶层却心怀着一个惊人的秘密,这个秘密灼烧着他们的内心,消耗他们的夜晚和周末,还使他们的耐力 ...
  • 项目中多次用到create() 只能它是表单验证,不过好出错,痛下心扉好好了解理解它的来龙去脉和所用的用法 一:通过create() 方法或者 赋值的方法生成数据对象,然后写入数据库 1 $model = D('Us ...
  • (记者 范军利)国际板上市主体究竟先是国际公司,还是红筹公司优先的问题,目前制度层面亦明确,国际公司应为首批国际板登陆者."为保证国际板运行的纯正血统,制度层面可能会对首批国际板公司要求更为严格,以纯外资公 ...
  • Java 8的默认方法试图尝试更进一步简化Java API.不幸的是,这一最近的语言扩展带来了一系列复杂的规则,但只有少部分Java开发者意识到这一点.这篇文章告诉你为什么引入默认方法会破坏你的(用户的)代码. 起初 ...
  • 问题描述:任意给定一个5位以内的整数(其中这个数字各个数位都不含有0,但是允许数位上的数字重复),然后对这个数字的各个数位的数字任意颠倒,成为新的数字组合,然后对这个组合里面的数字进行求和. 举个例子说明一下: 假如 ...
  • 测试兼容ie6,firefox3.6,chrome 10.0.648.133 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN& ...