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盘留下旧 ...
一周排行