我在tomcat的webapps下建了一个myapp这个程序,并在其web-inf下的class中有一个MyClass类,我想在这个MyClass中得到这样的路径:e:\tomcat5\webapps\myapp\这样的路径,请问怎样实现这个MyClass是这样一种结构public class MyClas{  public static void main(String[] args){    这里怎样写才可以得到这个e:\tomcat5\webapps\myapp\???
  }}

解决方案 »

  1.   

    偶也想过,最后也没相出来,关注。
    ClassLoader肯定知道它从哪里load了一个class,问题是用户怎么获得。
      

  2.   

    要得到context path是没有 web方面直接得到的api了
    只能通过class本身的方法getClass().getResource("/").toString();
    new File(".");然后自己再substring()处理一下吧。
      

  3.   

    jFresH_MaN兄弟:
    new File(".")应该是当前工作目录,不是被加载class所在的目录吧。
      

  4.   

    楼上的方式在类被打包到jar中之后还会有效吗?在sevlet中可以通过Servlet.getSevletConfig().getSevletContext().getRealPath("/")来获得WebApp的根目录
      

  5.   

    哦,第一个方法似乎可以。呵呵。
    public class MyClass{  public static void main(String[] args){
         System.out.println(new MyClass().getClass().getResource("/"));
      }
    }
      

  6.   

    我可以在一个启动的class中
    System.setProperty("mypath",Servlet.getSevletConfig().getSevletContext().getRealPath("/"))
    然后在MyClass中System.getProperty("mypath")来得到,但是如果多个web content,则会覆盖这个mypath的。
      

  7.   

    jar包是不可以。因为jar包是相对独立的,呵呵,我也弄不出来。
      

  8.   

    jbas(jbas) 的办法倒是行得通。可以采取一个变通的办法,比如把mypath变成一个HashMap,然后在里面添加多个path
      

  9.   

    这样不行了的,你在程序中还是不知道是哪个HashMap[i] ,这个i不知道了.
      

  10.   

    如果我现在用这个static 来存这个contents path,有什么问题吗?
      

  11.   

    public class FilesUtil{    private static String strSep = File.separator;
        private static String webRoot="";
        static{
         String className = "org.apache.commons.dbcp.BasicDataSource";
         String classNameUrl="/org/apache/commons/dbcp/BasicDataSource.class";
         String temp=null;
            int i = 0;
            try {
             Class.forName(className);        
                java.net.URL classUrl = FilesUtil.class
                        .getResource(classNameUrl);
                temp = classUrl.getPath();
                temp = URLDecoder.decode(temp);
                //如果是windows则从第六个字符开始,否则从第五个字符开始
                if ("Win".equalsIgnoreCase(System.getProperty("os.name").substring(
                        0, 3))) {
                    i = 6;
                } else {
                    i = 5;
                }
                webRoot = temp.substring(i, temp.indexOf("WEB-INF") - 1);
            } catch (Exception e) {
             System.err.println("取得webRoot时出错:");
             webRoot = "";
            }
        }
    /**
     * 取到目录为webRoot
     * 
     * @return
     */
    public static String getWebRoot(){
    return webRoot;
    }
    }原理是类似FilesUtil.class.getResource(classNameUrl);取得放在此工程的class下面的文件URL
    org.apache.commons.dbcp.BasicDataSource是DBCP的jar的一个类(你可以换成你的工程必加载的一个类)如取tomcat的路径,可以用/org/apache/catalina/loader/Reloader.class这个类,这个是tomcat必加载的类
      

  12.   

    to eureka0891(迷茫中...) 
    谢谢了!