一此不安全的做法:
1. new File(path),这个方法的路径到底在那里取决于调用java命令的起始位置定义在哪里,
tomcat/bin下面的catalina.bat调用了java,所以在tomcat下相对起始位置是tomcat/bin,但是eclipse启动时,起始位置 是eclipse的项目路径。
2.类.class.getClassLoader().getResource("").getPath()
如果使用了此方法,这把决定权交给了类加载器,例如tomcat的类加载是非委托机制的,而weblogic的类加载是委托的。大部分情况下是安全的。
3.类.class.getResource("")
这是个好方法,但局限性在于如果类文件在jar中的话,那么在打jar包时需要将文件夹一起打进去,否则会返回null,jar文件实际上就是zip文件,zip文件中:文件就是文件,文件夹是文件夹,不是关联在一起的,很多开源的jar包就没有把目录打进去只打了classes文件,虽然你能年到目录层次结构,但是调用类.class.getResource("")会返回null.因为文件的目录结构和文件夹本身是两回事。
取得类路径的安全做法:取得类本身在系统中存储文件位置,然后根据包层次一直找到classpath下面:
package com.wbtask;
import java.io.File;
import java.net.URL;
public class UrlUtil {
/**
* 取得当前类所在的文件
* @param clazz
* @return
*/
public static File getClassFile(Class clazz){
URL path = clazz.getResource(clazz.getName().substring(
clazz.getName().lastIndexOf(".")+1)+".classs");
if(path == null){
String name = clazz.getName().replaceAll("[.]", "/");
path = clazz.getResource("/"+name+".class");
}
return new File(path.getFile());
}
/**
* 得到当前类的路径
* @param clazz
* @return
*/
public static String getClassFilePath(Class clazz){
try{
return java.net.URLDecoder.decode(getClassFile(clazz).getAbsolutePath(),"UTF-8");
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return "";
}
}
/**
* 取得当前类所在的ClassPath目录,比如tomcat下的classes路径
* @param clazz
* @return
*/
public static File getClassPathFile(Class clazz){
File file = getClassFile(clazz);
for(int i=0,count = clazz.getName().split("[.]").length; i<count; i++)
file = file.getParentFile();
if(file.getName().toUpperCase().endsWith(".JAR!")){
file = file.getParentFile();
}
return file;
}
/**
* 取得当前类所在的ClassPath路径
* @param clazz
* @return
*/
public static String getClassPath(Class clazz){
try{
return java.net.URLDecoder.decode(getClassPathFile(clazz).getAbsolutePath(),"UTF-8");
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return "";
}
}
public static void main(String[] args){
System.out.println(getClassFilePath(UrlUtil.class));
System.out.println(getClassPath(UrlUtil.class));
}
}
结果:
E:\Workspaces\MyProject\pjoName\target\classes\com\wbtask\UrlUtil.class
E:\Workspaces\MyProject\pjoName\target\classes
分享到:
相关推荐
Java 获取当前路径 Java 获取当前路径是 Java 编程中一个常见的需求,下面我们将讨论如何在 Java 中获取当前路径。 方法一:使用 System.getProperty() 函数 使用 System.getProperty() 函数可以获取当前路径,该...
1. **获取当前应用的相对路径与绝对路径** - **根目录所对应的绝对路径** - 方法:`request.getRequestURI()` - `request.getRequestURI()` 返回客户端请求的资源的相对路径(相对于当前上下文)。 - **文件的...
#### (1) 获取当前页面的完整路径:`request.getRequestURI()` 此方法返回客户端请求的当前页面的路径,包括上下文路径和请求路径。例如,在`http://example.com/TEST/test.jsp`中调用此方法将返回`/TEST/test.jsp`...
这两个方法都可以获取当前类的相对路径。 需要注意的是,在使用 `getResource` 方法时,相对路径一定要以 `/` 开头。否则,路径将会出错。 获取绝对路径 在 Java 项目中,获取绝对路径可以使用 `...
这个方法使用 `getClasses` 方法来获取当前类路径下的所有类,然后遍历这些类,检查它们是否继承自 `com.post.common.BaseAction`,如果是,则将其添加到结果列表中。 getClasses 方法 `getClasses` 方法的实现...
#### System.getProperty() 获取当前路径 在Java中,`System.getProperty()` 方法是一个非常实用的方法,它可以从系统属性中获取指定键对应的值。当键为 `"user.dir"` 时,返回的是当前Java程序执行所在的目录路径...
总结来说,Java程序员可以通过多种方式获取当前运行程序的路径,包括利用`Class.getResource`、`Runtime.exec`、`File`类以及操作系统管理接口等。选择哪种方法取决于具体的需求和环境,如是否在JAR中运行,是否需要...
1. **获取当前类的资源路径**:Java提供了一个内置的方法`getClass().getResource()`或`getClass().getResourceAsStream()`,它们可以从类路径中获取资源的URL。例如,如果你有一个名为`MyClass.class`的文件,你...
Java提供了系统属性,如`user.dir`和`java.class.path`,用于获取当前工作目录和类路径。 ##### 示例代码: ```java System.out.println(System.getProperty("user.dir")); // 输出:C:\DocumentsandSettings\...
如果资源文件是在类的同一个包下,我们可以使用`MyClass.class.getPackage().getName().replace(".", "/")`来获取当前类所在的包路径,然后结合`getResource`得到的URL,可以构造出相对路径。 5. 注意事项 - 在...
1、利用System.getProperty()函数获取当前路径: System.out.println(System.getProperty(user.dir));//user.dir指定了当前的路径 2、使用File提供的函数获取当前路径: File directory = new File(&#...
在效劳器中的 Java 类中,我们可以使用 `WebApplication 的操作系统文档根列表` 来获取当前路径。例如,我们可以使用 `Weblogic 的文档根路径` 来获取当前路径。 了解 Java 中的相对路径和绝对路径是非常重要的,...
// 获取当前类的ClassLoader ClassLoader classLoader = this.getClass().getClassLoader(); // 获取资源的URL URL resourceUrl = classLoader.getResource("resource.txt"); // 获取资源的路径 String resourcePath...
开发web工程时经常要获取工程的根目录,自己用Java实现的获取Tomcat下war包部署的Web工程根目录路径的方法,主要利用web工程默认的目录结构,此外也可以指定工程名称获取工程目录的绝对路径
windows linux 下,获取java项目绝对路径的方法,struts2设置了struts.multipart.saveDir后会在根目录建立文件夹,这样会涉及linux下的权限问题
- 在任意类中,可以使用 `this.getClass().getClassLoader().getResource("").getPath()` 获取 `classes` 目录的全路径。 这些方法在处理文件资源、读写文件或部署Web应用时非常有用。需要注意的是,由于安全和跨...
在Java程序中,获取本地路径主要是指获取当前运行环境的路径,或者特定资源的路径。 1. **通过`System`类获取路径**: - `System.getProperty("user.dir")`:返回当前工作目录的绝对路径。 - 示例:`D:\VSS装目録...
在Java编程中,获取JDK(Java Development Kit)的安装路径是常见的需求,尤其是在系统配置、依赖管理和自动化脚本中。下面将详细讲解如何通过环境变量和正则表达式匹配来实现这一目标。 首先,我们需要了解Java的...
对于Servlet而言,获取当前应用路径的方法类似,主要通过`request.getServletPath()`获取Servlet自身的路径信息,然后结合`getRealPath`方法获取物理路径。此外,通过`servletConfig.getServletContext()....