web工程普通类获取路径问题

believefym 2005-11-06 06:09:53
servlet的话可以通过servletContext.getRealPath("/");获得
但是工程里普通的类如何获取呢?
...全文
832 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaray 2005-11-07
  • 打赏
  • 举报
回复
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,楼主自己想办法吧:)
believefym 2005-11-07
  • 打赏
  • 举报
回复
那假如projectname/pictures/some.jpg
有一个页面要用到some.jsp的,而有一个普通类需要处理这张图片,难道只能拷贝一份到classes下面?
这样好像有点罗索啊,假如有很多需要处理的话,不是需要把projectname下面很多东西都拷贝一份过去?
shine333 2005-11-07
  • 打赏
  • 举报
回复
不要放到tomcat/webapps/projectname路径下,而是tomcat/webapps/projectname/WEB-INF/classes,也就是classes下面,

据我所知,几乎所有的,与安装路径无关,且不需要通过诸如-Dxxx=yyy这样jvm方式传入路径的配置文件,都是放在classpath下(包括jar文件内部),然后利用ClassLoader来getResource的
believefym 2005-11-07
  • 打赏
  • 举报
回复
用楼上的方法确实可以得到一个本地路径,如:
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路径下,使用该路径下的一个配置文件
believefym 2005-11-07
  • 打赏
  • 举报
回复
不是要通过io
工程下有一个类,需要用到工程根目录下的一个配置文件,怎么获取它?这个路径该怎么表示?
shine333 2005-11-07
  • 打赏
  • 举报
回复
当然,对于非匿名内部类,比如
class Test {
static class Inner {}
}

Class clazz = Test.Inner.class; 由于其类名不能直接replace('.', '/'),可能需要另外想办法
shine333 2005-11-07
  • 打赏
  • 举报
回复
你是想获得一个类的具体的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:/即可
believefym 2005-11-07
  • 打赏
  • 举报
回复
楼上的方法还是不行啊
fullpath得到的是我的eclipse路径:E:\eclipse\.
shine333 2005-11-07
  • 打赏
  • 举报
回复
如果是同一个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=".../.../..."
shine333 2005-11-07
  • 打赏
  • 举报
回复
你这个普通class运行的jvm和tomcat是不是同一个jvm?
shine333 2005-11-07
  • 打赏
  • 举报
回复
说错了,war不能直接classpath
shine333 2005-11-07
  • 打赏
  • 举报
回复
你把你的webapp目录->war文件,不就可以拉
平时普通的application,就是把这个war作为一个classpath,运行
shine333 2005-11-07
  • 打赏
  • 举报
回复
把所有的class和resources都打包阿
xjlz0001 2005-11-06
  • 打赏
  • 举报
回复
getPath()方法可以,getAbsolutePath()方法获得绝对路径。
believefym 2005-11-06
  • 打赏
  • 举报
回复
System.getProperty("user.dir")

-------------
这个不行,不能得到web工程的正确路径
gemouzhi 2005-11-06
  • 打赏
  • 举报
回复
System.getProperty("user.dir")
believefym 2005-11-06
  • 打赏
  • 举报
回复
up

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧