一、路径

  绝对路径: 指的是文件在系统中的真实路径(物理路径)。
  相对路径: 指的是文件相对某个目录的相对路径。
  对于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. web工程中的各种路径(eclipse开发)

    目前遇到的 web 工程中要写url和路径的文件有 webContent中.jsp/.html :action src中的servlet类 : 映射地址.重定向.请求转发.访问资源文件(webCont ...

  9. Java工程中各种带有O的对象分类笔记

    在Java工程里面,我们总会碰到各种不同的带有O的对象, 对于一个小白来说,经常会混淆这些对象的使用场景,所以在这里mark一下,让自己的代码更加规范,但这个也是Java被诟病的地方,不同的业务需要给 ...

随机推荐

  1. Python3操作MySQL,查询数据并保存到文件中

    我们在测试过程中,可能需要到数据库中拉去一些数据,为从测试准备.比如最近在做接口性能测试的时候,就需要很多数据来支撑,所以就需要的数据库去查询数据,下面就是python3 查询 mysql 并且保存到 ...

  2. mysql DDL时出现的锁等待状态

    如下表格所示: session1: session2: 10:30:27 root@localhost:[testdb] mysql.sock>select * from t2;+------+ ...

  3. 如何转移数据库MDF和LDF文件

    我们可以很轻易地使用SQL Server来创建一个数据库,创建的数据库实例将存储在指定的默认位置(不一定是C盘,可以手动变更默认存储位置).假设此时数据库实例创建在了C盘中的默认位置,亦即是与数据库安 ...

  4. SpringMVC基础——一个简单的例子

    一.导入 jar 包 二.配置 web.xml 文件 <servlet> <servlet-name>dispatcherServlet</servlet-name> ...

  5. 重构第20天 提取子类(Extact SubClass)

    理解:提取子类就是把基类中,不是所有子类或者只有少数子类用到的方法,提取出来,调整到子类中去. 详解:下面的代码中我们用到一个单一的类Registration,来处理学生选课信息. public cl ...

  6. .Net 自定义应用程序配置

    .Net 自定义应用程序配置 引言 几乎所有的应用程序都离不开配置,有时候我们会将配置信息存在数据库中(例如大家可能常会见到名为Config这样的表):更多时候,我们会将配置写在Web.config或 ...

  7. css 布局absolute与relative的区别

    absolute:当使用时,表示在文档流中没有实际存在位置(浮动),在不设置任何方位值时,只能按兵不动,当设置了方位值之后,会紧接着去寻找距离最近的能够将它包含住的父级元素,然后进行定位. relat ...

  8. C#强力粉碎文件代码分享,升级中用到

    360的文件粉碎机还是很强大的,在我们客户端winform升级的时候,必须将有些文件进行强力删除后下载更新,如果删除失败很有可能整个 程序就无法更新到最新的版本,所以这里参考了网上的资料整理了一个文件 ...

  9. .net多线程的发展

    APM和EAP是在async/await之前的两种不同的异步编程模式. APM如果不阻塞主线程,那么完成通知(回调)就会执行在另外一个线程中,从而给我们更新UI带来一定的问题. EAP的通知事件是在主 ...

  10. php表单中如何获取单选按钮与复选按钮的值

    php代码中获取表单中单选按钮的值:(单选按钮只能让我们选择一个,这里有一个"checked"属性,这是用来默认选取的,我们每次刷新我们的页面时就默认为这个值.) 例:<fo ...