一、路径

  绝对路径: 指的是文件在系统中的真实路径(物理路径)。
  相对路径: 指的是文件相对某个目录的相对路径。
  对于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. Log4j在Java工程中使用方法

    Eclipse新建Java工程,工程目录如下 1.下载log4j的Jar包,在Java工程下新建lib文件夹,将jar包拷贝到此文件夹,并将其加入到路径中,即:Jar包上右键——Build Path— ...

  2. java工程中不能存在多个数据库连接jar包

    java工程中不能存在多个数据库连接jar包 比如存在mysql-java-connector.jar的,放入mssqlserver.jar就会产生冲突.只能存在一个类型的jar包.

  3. 在java工程中导入jar包的注意事项

    在java工程中导入jar包后一定要bulid path,不然jar包不可以用.而在java web工程中导入jar包后可以不builld path,但最好builld path.

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

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

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

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

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

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

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

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

  8. java代码中获取classpath路径

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

  9. java工程中使用freemarker例子

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

随机推荐

  1. 关于node.js

    JS是一种脚本语言,它的本身并不能进行编译和执行,在最早的时期只是作为浏览器的脚本,只能够在浏览器中执行操作,也就是说JS必须依赖一个运行环境作为载体才能够执行. 而nodejs是基于chromeV8 ...

  2. oracle字符集相关

    转: Database character set (AL32UTF8) and Client character set (ZHS16GBK) are different. Character se ...

  3. 挑战程序2.1.4 穷竭搜索>>深度优先搜索

      深度优先搜索DFS,从最开始状态出发,遍历一种状态到底,再回溯搜索第二种. 题目:POJ2386  思路:(⊙v⊙)嗯  和例题同理啊,从@开始,搜索到所有可以走到的地方,把那里改为一个值(@或者 ...

  4. Delphi完成的断点续传例子 转

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  5. 基础学习day04---数组的操作

    一.数组基本常见操作 1.1.静态初始化 //第一种声明 //第一种声明 int [] arr=new int[5]; //第二种声明 int [] arr1=new int[]{5,3,8,1,9, ...

  6. phpcms v9调用多个栏目下文章的方法

    示例:{pc:get sql="SELECT * from v9_news where status=99 and catid in(6,7,8) order by id DESC" ...

  7. AWS AutoScaling

    origin_from: http://blog.csdn.net/libing_thinking/article/details/48327189 AutoScaling 是 AWS 比较核心的一个 ...

  8. Arch-Linux-添加中文字体

    代码下载: Arch-Linux-添加中文字体.txt

  9. VC++ 17、18课

    进程间通信的四种方式: 剪贴板 匿名管道 命名管道 邮槽 容器和服务器程序 容器应用程序是可以嵌入或链接对象的应用程序.word就是容器应用程序. 服务器应用程序是创建对象并且当对象呗双击时,可以被启 ...

  10. JQuery.ajax一解

    关于JQuery.ajax方法,好处也不用多说了,主要是想记下ajax中的一些参数: url:请求的目标地址,为一个字符串,格式为:http://localhost:端口号/User/方法名.eg:现 ...