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
我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法
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"));
相关推荐
中文字符在路径中可能会引起编码问题,导致程序无法正确读取或写入文件。这个问题主要涉及到字符编码、文件I/O操作以及系统环境的差异。下面我们将深入探讨如何解决Java中的中文路径问题。 首先,了解Java对路径...
JAVA解决URL路径中含有中文的问题。无论是路径中还是文件名包含中文都可以处理。经测试验证通过。
本文将深入解析Java Web中所有路径问题的解决方法,涵盖Servlet、Action、Controller、Filter、Listener等关键组件的路径获取技巧,以及Spring框架下Web应用根目录的获取策略。 ### 一、理解Java Web中的路径类型 ...
### Java路径问题最终解决方案之一 #### 一、引言与背景 在进行Java开发时,文件路径处理一直是令人头疼的问题之一。特别是在涉及跨平台或在不同环境中部署的应用程序时,路径问题更是频繁出现。本文旨在深入探讨...
根据给定的信息,本文将详细解释Java实现的最短路径问题动态规划算法。该程序的主要目的是寻找图中各个节点到指定终点的最短路径,并输出每个节点到终点的最短距离以及达到这些最短距离时的决策路径。 ### 1. 问题...
在Java编程中,路径问题是一个常见的挑战,尤其是在处理类加载、资源定位以及执行环境设置时。本文将深入探讨Java路径解决方案,旨在帮助开发者理解和解决与此相关的各种问题。 首先,我们来了解一下Java中的类路径...
在这个Java实现的遗传算法解决方案中,我们首先需要理解遗传算法的基本步骤: 1. **初始化种群**:随机生成一组初始的车辆路线,每条路线可以看作是一个个体,形成种群。 2. **适应度函数**:为每个个体计算适应度...
JAVA下载网络文件,解决路径或文件名含中文问题的工具类!
本文主要探讨如何在Java和Web环境中有效地解决路径问题。 首先,Java中的路径分为绝对路径和相对路径。绝对路径是从根目录开始的完整路径,而相对路径是相对于当前工作目录的路径。在Java中,虽然我们可以使用相对...
下面我们将详细讨论如何在Java中通过文件操作来解决最短路径问题。 首先,我们需要了解最短路径算法。其中,Dijkstra算法和Floyd-Warshall算法是两种常用的方法。Dijkstra算法适用于单源最短路径问题,而Floyd-...
在计算机科学中,最短路径...总之,Java实现的迪杰斯特拉算法为我们提供了解决最短路径问题的有效工具。通过理解算法的工作原理和Java实现细节,我们可以灵活地应用于各种图结构问题,为软件开发和数据分析带来便利。
本文将深入探讨Java路径问题,包括如何解决Java安装和使用过程中的常见路径问题,以及如何有效地管理类路径(classpath)。 #### 一、Java路径基础 Java路径主要涉及两种类型:类路径(classpath)和系统路径。类路径...
JAVA版动态规划解决最短路径问题 啊
本文将深入探讨Java中的路径问题,并提供一个有效的解决方案,该方案旨在简化路径处理过程,使得开发者能够更加灵活地管理和访问不同环境下的资源。 #### 二、Java路径类型 Java中使用的路径主要分为两大类:绝对...
在标题中提到的"Java版查找并打印有向图中的所有环路径",这个问题涉及到图论中的一个经典问题——寻找环路。在实际应用中,如线程死锁识别,有向图的环路检测具有重要价值,因为线程间的资源依赖关系可以被抽象为有...
Java路径问题最终解决方案 —可定位所有资源的相对路径寻址 通过相对classpath路径实现自由寻找资源的助手类的源代码
本文总结了Java 开发中的路径问题,帮助开发朋友方便解决路径问题,让你节省大量的时间。 1. 基本概念的理解 绝对路径是指文件或目录在硬盘上的真正路径,例如C:\xyz\test.txt 代表了 test.txt 文件的绝对路径,...
标题“Java:寻找两点之间所有路径”涉及到的是在图论中的一个经典问题,即如何在图(可以是无向图或有向图)中找出从一个起点到终点的所有可能路径。这个问题在许多实际场景中都有应用,比如网络路由、社交网络分析...