一、路径

  绝对路径: 指的是文件在系统中的真实路径(物理路径)。
  相对路径: 指的是文件相对某个目录的相对路径。
  对于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获取路径

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

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

     HttpServletRequest request = null;
     ///返回web应用名称:         testapp
     System.out.println(request.getContextPath());

     // 当前web应用的绝对路径(后面没有\)   E:/web-create\testapp\src\main\resources\webapp
     System.out.println(request.getSession().getServletContext().getRealPath(""));

     // 当前web应用的绝对路径(后面有\)     E:/web-create\testapp\src\main\resources\webapp\
     System.out.println(request.getSession().getServletContext().getRealPath("/"));        

     // 当前web应用中指定目录绝对路径         E:/web-create\testapp\src\main\resources\webapp\resource\image
     System.out.println(request.getSession().getServletContext().getRealPath("/resource/image")); 

     //获取PATH目录下的子目录以集合的形式返回():[/resource/image/2015/]
     System.out.println(request.getSession().getServletContext().getResourcePaths("/resource/image"));

     // 当前web应用中指定目录绝对路径         E:/web-create\testapp\src\main\resources\webapp\resource\image
     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

     //加载文件相关
     InputStream is = new FileInputStream(ClassLoader.getSystemResource("").getPath() + "config.redis.pool.properties");//该种方式与下面得到的结果一致
     is = Test.class.getResourceAsStream("config.redis.pool.properties");//与下面结果一样
     is = Test.class.getResourceAsStream("/config.redis.pool.properties");
     //InputStream is = Test.class.getResourceAsStream("/com/config.redis.pool.properties");//参数是相对于classes目录下的文件全路径
     Properties properties = new Properties();
     properties.load(is);
     is.close();
     for(Object obj :properties.keySet()){
         System.out.println("key: " + obj + " value: " + properties.get(obj));
     }  

java工程中的相关路径的更多相关文章

  1. java工程中的.classpathaaaaaaaaaaaaaaaa<转载>

    第一部分:classpath是系统的环境变量,就是说JVM加载类的时候要按这个路径下去找,当然这个路径下可以有jar包,那么就是jar包里所有的class. eclipse build path是ec ...

  2. java工程中的.classpath<转载>

    第一部分:classpath是系统的环境变量,就是说JVM加载类的时候要按这个路径下去找,当然这个路径下可以有jar包,那么就是jar包里所有的class. eclipse build path是ec ...

  3. 【技巧】Java工程中的Debug信息分级输出接口及部署模式

    也许本文的标题你们没咋看懂.但是,本文将带大家领略输出调试的威力. 灵感来源 说到灵感,其实是源于笔者在修复服务器的ssh故障时的一个发现. 这个学期初,同袍(容我来一波广告产品页面,同袍官网)原服务 ...

  4. 【技巧】Java工程中的Debug信息分级输出接口

    也许本文的标题你们没咋看懂.但是,本文将带大家领略输出调试的威力. 灵感来源 说到灵感,其实是源于笔者在修复服务器的ssh故障时的一个发现. 这个学期初,同袍(容我来一波广告产品页面,同袍官网)原服务 ...

  5. java代码中获取classpath路径

    Javaweb工程中,有时候需要自己手动的去读取classpath下面的配置文件,这里总结一点读取classpath路径的方法,分享一下. 方法一: String path = Test.class. ...

  6. java工程中使用freemarker例子

    新建java project,引入freemarker.jar, 本工程是用的版本:freemarker-2.3.20 版本 java工程目录如下: test.ftl文件 HTML代码 name : ...

  7. java project中 xml文件路径问题

    xml文件默认是和src文件平级的,当不在project根目录下时,java代码中使用xml文件时需要写为这种形式:“/src/..../bean.xml”

  8. java web项目,java类中获得WEB-INF路径

    private static String getWebInfPath() { URL url = 当前类.class.getProtectionDomain().getCodeSource().ge ...

  9. Java工程中使用Mybatis (工程结合Mybatis,数据可以结合Swing使用)

    2011年6月iBatis 更名为 MyBatis,从 iBatis 到 MyBatis,不只是名称上的变化,MyBatis 提供了更为强大的功能,同时并没有损失其易用性,相反,在很多地方都借助于 J ...

随机推荐

  1. Swift -Login(MVC 纯代码)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Menlo; color: #000000 } span.s1 { } span.s2 { c ...

  2. Redis安装配置(Windows版)

    近期项目中引入Redis,故记录下来,方便日后查看. 可参考(http://www.cnblogs.com/happyday56/p/3916388.html)不说废话,直奔主题. 一.安装前的准备: ...

  3. 笔记本做wifi热点

    你可以开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网.点开始 所有程序 命令提示符右键管理员身份运行命令提示符 运行命令:ne ...

  4. JMeter学习(三十二)属性和变量

    一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...

  5. Could not create the view: An unexpected exception was thrown.问题解决

    Could not create the view: An unexpected exception was thrown.问题解决 今天打开Myeclipse10的时候,发现server窗口出现一堆 ...

  6. Redis主从是否生效的特殊测试方法

    Redis主从的特殊测试方法 配置主从 Redis的主从设定,相较于MySQL的主从,配置起来非常简单,不必像MySQL数据库一样手动记录bin log的位置再配置,但又可以像MySQL一样,一主带多 ...

  7. ###学习《C++ Primer》- 1

    点击查看Evernote原文. #@author: gr #@date: 2014-09-30 #@email: forgerui@gmail.com 记录读书过程中一些知识点.可能不系统,:-). ...

  8. SQL DMO のDMV

    这两天对公司的一个项目进行优化,看着长长的SQL,脑袋不经有些大,一时间竟然不知道如何下手,一顿手忙脚乱后,小有成效,响应速度快了不少,同样的条件下可以做到秒级响应.闲暇时间想了想,还是得做点功课,最 ...

  9. C#数字图像处理的3种方法

    本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类.BitmapData类和Graphics类是C#处理图像的的3个重要的类. Bitmap只要用于处理由像素数据定义的图像的对 ...

  10. 鹿定制|Lu Couture|鹿定制·高级西装礼服私享定制品牌|芙蓉中路明城国际1425

    鹿定制|Lu Couture|鹿定制·高级西装礼服私享定制品牌|芙蓉中路明城国际1425 联系我们