servlet的话可以通过servletContext.getRealPath("/");获得
但是工程里普通的类如何获取呢?

解决方案 »

  1.   

    System.getProperty("user.dir")-------------
    这个不行,不能得到web工程的正确路径
      

  2.   

    getPath()方法可以,getAbsolutePath()方法获得绝对路径。
      

  3.   

    File file = new File(".");
    String fullPath = file.getAbsolutePath();再用fullPath去掉当前类的包名结构的路径,以及基础路径.如Web工程中,fullPath应该是这样的:
    F:\aDir\bDir\projects\CurrentProject\WEB-INF\classes\com\yaray\tools\Tools.class
      ==>CurrentProject是工程根目录
    需要做的就是切去\WEB-INF\classes\com\yaray\tools,楼主自己想办法吧:)
      

  4.   

    楼上的方法还是不行啊
    fullpath得到的是我的eclipse路径:E:\eclipse\.
      

  5.   

    你是想获得一个类的具体的path,比如classpath:C:/;D:/java, D:/java下面有一个test.Test类,最后得到D:/java/test/Test.class?Class clazz = test.Test.class;
    String name = clazz.getName().replace('.', '/');
    URL url = Thread.currentThread().getContextClassLoader().getResource(name);这个时候会得到"file:/D:/java/test/Test.class"这样的url,你只要去掉file:/即可
      

  6.   

    当然,对于非匿名内部类,比如
    class Test {
      static class Inner {}
    }Class clazz = Test.Inner.class; 由于其类名不能直接replace('.', '/'),可能需要另外想办法
      

  7.   

    用楼上的方法确实可以得到一个本地路径,如:
    file:/D:/tomcat/webapps/0903/WEB-INF/classes/不过有没有更简单直接一点的,
    在一般的工程下"."就表示当前路径了
    eclipse下,projectname/src,
               projectname/classes,
    不管package有几层,当前路径就是projectname了但是在web工程下这个当前路径怎么找呢?
    tomcat/webapps/projectname/WEB-INF/classes/somepackage/SomeClass.class
    如何能直接定位到
    tomcat/webapps/projectname路径下,使用该路径下的一个配置文件
      

  8.   

    不要放到tomcat/webapps/projectname路径下,而是tomcat/webapps/projectname/WEB-INF/classes,也就是classes下面,据我所知,几乎所有的,与安装路径无关,且不需要通过诸如-Dxxx=yyy这样jvm方式传入路径的配置文件,都是放在classpath下(包括jar文件内部),然后利用ClassLoader来getResource的
      

  9.   

    那假如projectname/pictures/some.jpg
    有一个页面要用到some.jsp的,而有一个普通类需要处理这张图片,难道只能拷贝一份到classes下面?
    这样好像有点罗索啊,假如有很多需要处理的话,不是需要把projectname下面很多东西都拷贝一份过去?
      

  10.   

    把所有的class和resources都打包阿
      

  11.   

    你把你的webapp目录->war文件,不就可以拉
    平时普通的application,就是把这个war作为一个classpath,运行
      

  12.   

    你这个普通class运行的jvm和tomcat是不是同一个jvm?
      

  13.   

    如果是同一个jvm,那最好办了,在你的servlet启动的时候,往System.setProperty,然后普通程序System.getProperty读出project_home如果不是同一个jvm,但是是同一个机器,Servlet System.getProperty("user.home"),往里面写以一个文件,记录project_home,然后application读,其实第二种情况下,最不用动脑筋或者普遍的方法,就是你执行这个main application一定会写一个批处理或者快捷方式的,在里面设置一下project_home,然后作为一个-Dxxx=yyyy或者args[x]参数传进去。反正你用到tomcat,肯定不会是给普通用户玩的,所以,顶多需要给你的用户的readme文档里面,提一下,如果需要改变tomcat或者webapp的发布目录,需要更改这个批处理里面的
    SET PROJECT_HOME=".../.../..."