`

websphere下郁闷的java类路径获取

 
阅读更多
一此不安全的做法:

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));
    }

}
分享到:
评论

相关推荐

    IBM WebSphere Portal门户开发笔记01

    IBM WEBSPHERE PORTAL 1 目录 2 参数资料 10 一、搜索功能 11 1、搜索表单 11 2、搜索组件 11 3、搜索集合 12 4、站点设置 13 5、模板 13 6、站区创建及内容 13 7、搜索跳转页面 14 8、搜索表单的部署 14 9、详细...

    java 面试题 总结

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    超级有影响力霸气的Java面试题大全文档

     Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 ...

    Spring 2.0 开发参考手册

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    Spring中文帮助文档

    2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单...

    ssh(structs,spring,hibernate)框架中的上传下载

    Tfile的Hibernate映射文件Tfile.hbm.xml放在Tfile .java类文件的相同目录下:  代码 2 领域对象映射文件 1. 2. !DOCTYPE hibernate-mapping PUBLIC 3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4. ...

    Spring API

    2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单...

    spring chm文档

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    Eclipse权威开发指南3.pdf

    1.4 获取与安装Eclipse.. 11 1.5 本章小结...... 11 1.6 参考文献...... 12 第2章 Eclipse入门 13 2.1 第一步...... 14 2.1.1 提示没有任何JRE可用的对话框..... 14 2.1.2 创建您的第一个项目..... ...

    Eclipse权威开发指南1.pdf

    1.4 获取与安装Eclipse.. 11 1.5 本章小结...... 11 1.6 参考文献...... 12 第2章 Eclipse入门 13 2.1 第一步...... 14 2.1.1 提示没有任何JRE可用的对话框..... 14 2.1.2 创建您的第一个项目..... ...

    Eclipse权威开发指南2.pdf

    1.4 获取与安装Eclipse.. 11 1.5 本章小结...... 11 1.6 参考文献...... 12 第2章 Eclipse入门 13 2.1 第一步...... 14 2.1.1 提示没有任何JRE可用的对话框..... 14 2.1.2 创建您的第一个项目..... 15 2.1.3 ...

    测试培训教材

    QC支持的应用服务器:Jboss、WebLogic、WebSphere QC支持的数据库:Oracle、SQLServer QC支持的操作系统:Windows、Linux、Solaris 支持群集: 服务器端硬件和数据库要求: Windows: Linux: Solaris: ...

    操作系统(内存管理)

    由于这类地址不必反映内存所在的物理位置,所以它们被称为虚拟内存。操作系统维持着一个虚拟地址到物理地址的转换的表,以便计算机硬件可以正确地响应地址请求。并且,如果地址在硬盘上而不是在 RAM 中,那么操作...

Global site tag (gtag.js) - Google Analytics