最近在做一个web项目,后台的service层需要调用某些资源文件,那么问题来了:如何调用指定文件夹下的资源?能够挪用java独立程序的获取相对路径的方式来获取web项目程序的相对路径?
1、J2SE应用程序
这种程序,最典型的代表,就是java语言初学者都会碰到的hello world程序。
eg:
上图中名为"CSVTest"的程序,就属于J2SE的类型,通常有一个main函数,也是程序的起始入口。这种类型程序的层次结构就是图中所表达的树状层次结构。
那么,若要得到绝对路径,eg:
String path = "D:/workspace/CSVTest/ss.csv";
这种情况下,J2SE应用程序或者web项目程序,都可以直接使用绝对路径,这个没有问题,但是,大多数时候,特别是web项目程序,考虑到后期的程序移植性,都会使用相对路径,即使程序换了个存储位置或者机器,都不用再去修改资源的路径,就节省了很多人工成本,提高了效率,所以本文中主要介绍相对路径的获取方式。
在J2SE应用程序中,有以下几种方式获得相对路径:
String filePath = "./"; //如果路径是 "./xxx.csv"的形式,那么文件被保存在项目的根目录下
这种方式下,可以获得项目的根目录,例如,如果放在"CSVTest"程序中,就是表示CSVTest的根目录:
注意:
这种方式不适合在web项目程序中,会提示找不到路径。因为:对于一般的程序,这种方式获得的就是项目的根目录,但是在J2EE程序中,有可能是
服务器的某一个路径,这里并没有统一的规范。所以,安全起见,在J2EE项目程序中,不要使用这种方式即可,况且,J2EE中可替代的方式也有很多滴。
- ReadCSV.class.getResource(""); 其中,ReadCSV是代码所在的类名。
eg:System.out.println(ReadCSV.class.getResource(""));
就会得到如下结果:file:/D:/workspace/CSVTest/bin/
而getResource("")中可以加入"/"符号,getResource("/"),会得到同样的结果。但是,不能使用"../",这是返回上一级的意思,但是在这种情况下不能使用,否则会得到null。
- Thread.currentThread().getContextClassLoader().getResource("")
这种方式和上一种方式差不多,都会得到相同的结果。唯一不同的是:该方式中不能加入"/",否则会得到null。
- ReadCSV.class.getClassLoader().getResource("")
该方法和 上一个Thread的那个一样,也不能加"/"。
- ClassLoader.getSystemResource("")
同以上两个方法,得到当前项目的ClassPath的绝对路径。也不能加"/"。
2、J2EE程序
主要有以下几种获取相对路径的方式:
- ChartsService.class.getResource(""),其中,ChartsService是类名。
得到如下结果:file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/EVM/WEB-INF/classes/com/sac/evm/service/
说明:获得当前的classPath的绝对URL路径,若加入"../"则是返回上一级目录,可重复使用。这也是不同于J2SE应用程序的地方,可以返回到上一级,或者上上级,这取决于"../"的个数。
- ChartsService.class.getResource("/");//获取当前文件的绝对路径,路径中不包括该文件自己
结果如下:file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/EVM/WEB-INF/classes/
注意:该路径和上一个的路径不同之处,本结果中是当前ClassPath的绝对URL路径。本方式也可以多次使用"../"。
- ChartsService.class.getClassLoader().getResource("");
获得结果和上一种方式相同,可多次使用"../"。
- Thread.currentThread().getContextClassLoader().getResource("");
同上一种方式,可多次使用"../"。
比如:URL url = Thread.currentThread().getContextClassLoader().getResource("../../");
System.out.println(url);
String path = url.getFile() + "asserts/EVMTable/companyAssessment/项目指标.csv";
System.out.println(path);
System.out.println("呵呵");
以上几行代码中,就是以ClassPath的路径为基准,再得到其他路径下的资源。
3、总结
- 尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径;
- 在项目中,特别是J2EE程序中,尽量使用基于ClassPath的相对路径,避免使用绝对路径,否则不利于移植;
- 不要在程序中给出某个资源的绝对路径,因为可以用getResounce("")的方式得到当前路径,也就是一行代码的事情,不要嫌麻烦,知道了就很简单,不知道的话,简单看一下,也就明白了,这也能避免以后更大的麻烦。
- 最后,还是要说一句:尽量用ClassPath的绝对路径来拼接你要访问的所以资源的路径。
- URL转为file格式:url.getFile(); 转为字符串。
- 相关链接:http://blog.csdn.net/yethyeth/article/details/1623283
- 相关链接:http://blog.csdn.net/linjx2004/article/details/5608909
-
另外,在J2EE中,.项目是在
D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
这个目录下的,比如:
EVM项目就是在tomcat的一系列路径下。
而这个时候,部署在服务器端的代码,在运用上述方式获取相对路径时,得到的也是该目录下的ClassPath路径。
/D:/Program Files/tomcat7.0/webapps/EVM/asserts/EVMTable/companyAssessment/
而对于该项目下的资源,都可依赖ClassPath这个绝对路径来拼凑出相对路径。
- 多个
分享到:
相关推荐
在Java Web开发中,理解和掌握相对路径与绝对路径的运用是至关重要的,因为这直接影响到资源定位、页面跳转以及文件读写等操作的正确性。以下是对Java Web中相对路径与绝对路径问题的深入总结: ### 一、路径概念与...
"Java 中相对路径与绝对路径的问题" Java 中的路径问题一直是困扰许多编程人员的问题之一。...了解 Java 中的相对路径和绝对路径是非常重要的,掌握这些知识点可以帮助我们更好地编写 Java 程序。
在Java程序中,获取本地路径主要是指获取当前运行环境的路径,或者特定资源的路径。 1. **通过`System`类获取路径**: - `System.getProperty("user.dir")`:返回当前工作目录的绝对路径。 - 示例:`D:\VSS装目録...
通过上述总结,我们可以了解到在Java Web开发中,正确理解和使用相对路径和绝对路径是非常重要的。它们在服务器端和客户端有不同的含义,并且在不同的应用场景下有着不同的使用方式。了解这些基础知识有助于我们编写...
在Java程序中,如果数据库文件和Java代码位于同一目录或其子目录下,使用相对路径可以更灵活地管理项目,因为你可以轻松地移动整个项目而不必修改数据库连接字符串。 要连接到Access数据库,你需要以下步骤: 1. *...
对于一般的Java项目或Web项目,如果你需要获取相对路径,可以使用以下方法: ```java String relativelyPath = System.getProperty("user.dir"); ``` 这里`System.getProperty("user.dir")`返回的是当前Java进程的...
### 绝对路径和相对路径...总之,无论是开发Web应用还是编写独立的Java程序,理解并合理使用绝对路径和相对路径都是非常重要的。这不仅有助于代码的可维护性和可移植性,还能有效避免因路径配置不当而导致的各种问题。
通过本文的学习,我们了解到在Java Web开发中,路径的选择和使用对程序的稳定性和可维护性至关重要。正确地使用`request.getContextPath()`、`request.getServletPath()`、`request.getServletContext().getRealPath...
下面给出一个简单的示例,展示如何在Java程序中使用 `System.getProperty()` 来获取路径: ```java public class PathExample { public static void main(String[] args) { String currentDir = System....
- WebLogic中,如果使用相对路径加载配置文件,通常需要指定具体的路径。 - **Tomcat** - `System.getProperty("user.dir")` 指向的是 Tomcat 的 bin 目录。 - **Resin** - 在 Resin 中,JSP 文件路径默认指向 ...
在Java Web开发中,路径主要分为绝对路径和相对路径两种: - **绝对路径**:指的是从根目录开始的完整路径,如`/road/dir1/c.jsp`。在Web环境中,根目录通常指Web应用的根目录,即`http://机器IP:8080/Web应用名`...
本文将详细讲解Java项目中的绝对路径和相对路径,并提供一些实际应用中的注意事项。 首先,让我们了解一下**绝对路径**。绝对路径是完全指定的、不依赖于当前工作目录的文件或目录位置。它包括了文件系统的所有层次...
在Java程序开发中,路径问题是一个常见的挑战,尤其是在处理文件操作、类加载和资源访问时。路径分为绝对路径和相对路径,理解它们的区别是解决路径问题的基础。 **绝对路径** 是指从根目录开始到目标文件的完整...
总的来说,正确理解和使用Java中的相对路径和绝对路径是开发Web应用的基础,这有助于确保资源的正确访问,提高代码的可移植性和维护性。在实际开发中,应当避免过于依赖于特定的文件系统结构,尽可能使用相对路径,...
### Log4j中配置日志文件相对路径方法详解 #### 概述 在软件开发过程中,日志记录是一项重要的功能,它有助于开发者调试程序、监控应用程序的运行状态以及追踪问题。`Log4j`作为一款优秀的日志管理工具,被广泛应用...
Java中使用的路径主要分为绝对路径和相对路径两种,其中绝对路径又细分为URI形式的绝对资源路径和本地系统的绝对路径。相对路径则包括相对于classpath的相对路径和相对于当前用户目录的相对路径。 - **URI形式的...
3. **在JSP中使用相对路径** - **链接**:在`<a>`标签中,使用相对路径创建指向其他JSP或HTML页面的链接。 - **图像引用**:在`<img>`标签的`src`属性中,使用相对路径加载图片资源。 - **样式表和脚本引用**:在...
在Java开发中,路径处理是常见且重要的环节,尤其是在Web应用中,正确处理各种路径能够确保资源的准确访问和系统的稳定运行。以下是对标题“JAVA中获取各种路径”及其描述和部分内答所提及的几种路径获取方法的详细...