`
bcyy
  • 浏览: 1823362 次
文章分类
社区版块
存档分类
最新评论

java 中获得文件的物理路径方法

 
阅读更多
在javaweb项目中添加配置文件,满足连接数据库配置参数以及其他自定义参数存放,可自己写一个配置文件**.properties,把项目所需的自定义配置信息以名值对的形式写入文件。在项目工程目录下的WebRoot\WEB-INF\classes目录下新建一个conf文件夹专门存放配置文件,然后把**.properties配置文件放到conf中,部署时IDE会自动将其复制到相应路径。


java web项目未开启服务(有没有部署到tomcat中一样)使用this.getClass().getResource("/")得到Url对象,打印如下:
file:/D:/myEclipseWorkspace/你的项目工程名/WebRoot/WEB-INF/classes/


此路径为java web项目源路径。


部署到tomcat中的java web项目开启服务后使用this.getClass().getResource("/")得到Url对象,打印如下:
file:/D:/program/apache-tomcat-6.0.14/webapps/你的项目工程名/WEB-INF/classes/


然后调用toString().substring(6)获得绝对路径的前半部分,加上相对路径,如
conf/jdbc.properties


拼接成配置文件的绝对路径:(这个路径最前面的“/“本人也不清楚是什么意思,但是测试发现有没有那个”/“都能成功)
/F:/D:/program/apache-tomcat-6.0.14/webapps/你的项目工程名/WEB-INF/classes/conf/send.properties




java application项目使用this.getClass().getResource("/")得到Url对象,打印如下:
file:/D:/myEclipseWorkspace/你的项目工程名/bin/


此路径为java application项目的class文件的根路径。




注意:未开启tomcat web服务时打印的不是上面的路径,是你的项目源文件的classes路径。


上面的是本人最近在学习javaWeb时候遇到路径问题的解决方法,以下的是网上搜集到的资料共享一下,未测试
  Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!


  在开发Web方面的应用时, 经常需要获取服务器中当前WebRoot的物理路径。


  如果是Servlet , Action , Controller, 或者Filter , Listener , 拦截器等相关类时, 我们只需要获得ServletContext, 然后通过ServletContext.getRealPath("/")来获取当前应用在服务器上的物理地址。


  如果在类中取不到ServletContext时,有两种方式可以做到:


  1)利用Java的类加载机制:调用 XXX.class.getClassLoader().getResource(""); 方法来获取到ClassPath , 然后处理获得WebRoot目录。
  这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效, 如果该class被打包到一个jar文件中, 则该方法失效。这时就应该用下面一种方式。


  2)spring框架的思路,在WEB-INF/web.xml中,创建一个webAppRootKey的param,指定一个值(默认为webapp.root)作为键值,然后通过Listener, 或者Filter,或者Servlet 执行String webAppRootKey = getServletContext().getRealPath("/"); 并将webAppRootKey对应的webapp.root 分别作为Key,Value写到System Properties系统属性中。之后在程序中通过System.getProperty("webapp.root")来获得WebRoot的物理路径。


  根据第二种的思路,我们还可以再扩展一下。不过对于在部署在一台服务器中的应用来说,若还不是你所需请再往下看。


  下面是一些得到classpath和当前类的绝对路径的一些方法。你可使用其中的一些方法来得到你需要的资源的绝对路径:


  1.DebitNoteAction.class.getResource("")
  得到的是当前类FileTest.class文件的URI目录。不包括自己!
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
  atacarnet/src/com/evi/modules/atacarnet/action/


  2.DebitNoteAction.class.getResource("/")
  得到的是当前的classpath的绝对URI路径。
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/


  3.Thread.currentThread().getContextClassLoader().getResource("")
  得到的也是当前ClassPath的绝对URI路径
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
  推荐使用该方法获取。


  4.DebitNoteAction.class.getClassLoader().getResource("") 或ClassLoader.getSystemResource("")
  得到的也是当前ClassPath的绝对URI路径。
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/


  5.取得服务器相对路径
  System.getProperty("user.dir")
  例如:E:\apache-tomcat-5.5.16\apache-tomcat-5.5.16\bin


  6.取得项目中的绝对路径
  一般用request.getRealPath("/")或request.getRealPath("/config/")


  但现在不提倡使用request.getRealPath("/")了,大家可试用ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。


  要取得src的文件非常容易,因为src是默认的相对目录,比如你说要取得src下com目录的test.java文件,你只需要这样就够了
  File f = new File(com/test.java);


  但如果我要取得不在src目录或者WebRoot目录下的文件呢,而是要从src或者WebRoot同级的目录中取呢,比如说doc吧。
  我的硬方法是这样实现的:
  String path = this.getServletContext().getRealPath("/");
  Properties p = new Properties();
  p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("\\WebRoot") + 1)) + "doc/db.properties")));
  System.out.println(p.getProperty("driverName"));
-------------------------------
另:Request中getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath的区别


  假定你的web application 名称为news,你在浏览器中输入请求路径:http://localhost:8080/news/main/list.jsp


  则执行下面向行代码后打印出如下结果:


1、 System.out.println(request.getContextPath());
  打印结果:/news


2、System.out.println(request.getServletPath());
  打印结果:/main/list.jsp


3、 System.out.println(request.getRequestURI());
  打印结果:/news/main/list.jsp


4、System.out.println(request.getRequestURL());
  打印结果:http://localhost:8080/news/main/list.jsp


5、 System.out.println(request.getRealPath("/"));
  打印结果:F:\Tomcat 6.0\webapps\news\tes
分享到:
评论

相关推荐

    ueditor 映射项目外的物理路径

    ueditor不支持项目外部路径映射,此项目在ueditor的源码基础上做了修改,支持项目外部路径的映射。具体修改思路:1....此工程直接导入myeclipse直接可以运行,物理路径在tomcat的wepapp下的pic文件中。

    java获取路径的各种方法

    基本概念的理解绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:xyz est.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。相对...

    得到文件真实路径

    得到文件的真实路径1基本概念的理解绝对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径(URL和物理路径)例如C\xyz\testtxt代表了testtxt文件的绝对路径。http//wwws

    Java-文件操作File类

     Java中提供的文件操作类主要是File,File类既可用于表示磁盘上存在的一个普通文件,也可用于表示该普通文件所在的目录,这里主要对其构造方法和基本的常用方法进行介绍。 正文: 文件类File概述  Java中的File类...

    超爽的自学课件(java)

    在这一章中,大家将学习在Java中重复使用代码的这两种方法,以及具体如何运用。 <br>(7) 第7章:多形性 若由你自己来干,可能要花9个月的时间才能发现和理解多形性的问题,这一特性实际是OOP一个重要的基础。...

    JSP动态网页制作基础培训教程源代码.rar

    1 sample1.jsp 第8章\ch8 获得文件夹的物理路径示例 2 sample2.jsp 第8章\ch8 创建文件和文件夹示例 3 sample3.jsp 第8章\ch8 列出文件夹下的文件夹和文件示例 4 sample4.jsp 第8章\ch8 删除文件夹和文件示例 5 ...

    新版Android开发教程.rar

    � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造 成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...

    网管教程 从入门到精通软件篇.txt

    JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JFF,JFIF,JIF:JPEG文件 JPE,JPEG,JPG:JPEG图形文件 JS:javascript源文件 JSP:HTML网页,其中包含有对一个Java servlet...

    IO输入输出留

    // 获得父类目录文件对象实例调用delete方法删除 f.getParentFile().delete(); } else { System.out.println("是否成功创建:" + f.mkdirs()); } } // 测试创建和删除文件 private static void ...

    ASP200问.EXE

    52.如何判断网站的虚拟物理路径 53.如何解决URL含有特殊字符引发的错误 第4章 ASP组件 55.如何使用Browser Capabilities组件获取浏览器信息 56.如何使用Ad Rotator组件实现页面导航 57.如何使用Content Linking...

    Oracle9i的init.ora参数中文说明

    说明: 此参数指定链接程序 (如: UNIX 中的 ld, 或用于将目标文件链接到共享对象或 DLL 的 GNU ld) 的完整路径名。此参数是可选的。随每个平台附带的特有的 make 文件中包含此参数的默认值。如果为此参数指定了一个值...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    hibernate 3中的缓存小结

    3) 挎贝ehcache.xml文件到类路径(项目工程的src目录下),这个文件在Hibernate安装目录的etc下。 2.4.2. 配置步骤: Hibernate允许在类和集合的粒度上设置第二级缓存。在映射文件中,和元素都有一个子元素,这个子...

    ORACLE9i_优化设计与系统调整

    §3.4.1 跟踪文件路径(BACKGROUND_DUMP_DEST) 71 §3.4.2 在缓冲区驻留对象(BUFFER_POOL_KEEP) 71 §3.4.3 版本兼容(COMPATIBLE) 72 §3.4.4 控制文件路径(CONTROL_FILES) 72 §3.4.5 CPU个数(CPU_COUNT) ...

    数学建模上交的matlab代码-neqsim:NeqSim(非平衡模拟器)是用于计算流体性质和过程模拟的库

    通过将NeqSim.jar添加到类路径中,可以在Java应用程序中使用NeqSim。 本文演示了如何下载库并运行TPflash bencmark。 在中学习和提问。 NeqSim Java开发人员入门 有关如何使用NeqSim API的信息,请参见。 NeqSim可以...

    java俄罗斯方块源码-p1xt-progress:p1xt-进度

    (我已经从课程路径中选择了所有三个 MITOCW 列表,我将在它们之间随意切换。) 进步 当前课程: 完成的课程:0 获得的总积分:745 完成日期 活动 积分 链接 01-03-2018 博客文章 15 01-03-2018 锻炼 10 - 背部和双 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

     通过提示及配置文件等来控制执行计划;  在程序中优化查询而无需改动代码。  作为Oracle SQL经典著作之一,本书为SQL开发人员指明了前行的方向,赋予了他们不断开拓的动力。 作者简介  KAREN MORTON 研究...

    spring源代码

    通过虚拟目录获取文件资源 VirtualFile testFile = home.getChild("test.txt"); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver....

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

Global site tag (gtag.js) - Google Analytics