可以通过“ 类名classgetResource("")getPath()”方法实现。
举例:”String path = XMLSclassgetResource("")getPath()“
解释:以上语句就是获取到XMLS编译后的绝对路径(无法获取到java文件路径的,因为java运行的都是class文件)。
在jsp和class文件中调用的相对路径不同。 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用SystemgetProperty("userdir")获取你工程的绝对路径。
另:在Jsp,Servlet,Java中详细获得路径的方法!
1jsp中取得路径:
以工程名为TEST为例:
(1)得到包含工程名的当前页面全路径:requestgetRequestURI()
结果:/TEST/testjsp
(2)得到工程名:requestgetContextPath()
结果:/TEST
(3)得到当前页面所在目录下全名称:requestgetServletPath()
结果:如果页面在jsp目录下 /TEST/jsp/testjsp
(4)得到页面所在服务器的全路径:applicationgetRealPath("页面jsp")
结果:D:\resin\webapps\TEST\testjsp
(5)得到页面所在服务器的绝对路径:absPath=new javaioFile(applicationgetRealPath(requestgetRequestURI()))getParent();
结果:D:\resin\webapps\TEST
2在类中取得路径:
(1)类的绝对路径:ClassclassgetClass()getResource("/")getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路径:SystemgetProperty("userdir")
结果:D:\TEST
3在Servlet中取得路径:
(1)得到工程目录:requestgetSession()getServletContext()getRealPath("") 参数可具体到包名。
结果:E:\Tomcat\webapps\TEST
(2)得到IE地址栏地址:requestgetRequestURL()
结果:>
在java中获得文件的路径在我们做上传文件 *** 作时是不可避免的。
web 上运行
1:
thisgetClass()getClassLoader()getResource("/")getPath();
thisgetClass()getClassLoader()getResource("")getPath(); 得到的是 ClassPath的绝对URI路径。
如:/D:/jboss-422GA/server/default/deploy/hpwar/WEB-INF/classes/
SystemgetProperty("userdir");
thisgetClass()getClassLoader()getResource("")getPath(); 得到的是 项目的绝对路径。
如:/D:/jboss-422GA/server/default/deploy/hpwar
2:
thisgetClass()getResource("/")getPath();
thisgetClass()getResource("")getPath(); 得到的是当前类 文件的URI目录。不包括自己!
如:/D:/jboss-422GA/server/default/deploy/hpwar/WEB-INF/classes/com/jebel/helper/
thisgetClass()getResource("")getPath(); X 不 能运行
3:
ThreadcurrentThread()getContextClassLoader()getResource("/")getPath()
ThreadcurrentThread()getContextClassLoader()getResource("")getPath() 得到的是 ClassPath的绝对URI路径。
如:/D:/jboss-422GA/server/default/deploy/hpwar/WEB-INF/classes/
ThreadcurrentThread()getContextClassLoader()getResource("")getPath() 得到的是 项目的绝对路径。
如:/D:/jboss-422GA/server/default/deploy/hpwar
在本地运行中
1:
thisgetClass()getClassLoader()getResource("")getPath();
thisgetClass()getClassLoader()getResource("")getPath(); 得到的是 ClassPath的绝对URI路径。
如:/D:/myProjects/hp/WebRoot/WEB-INF/classes
thisgetClass()getClassLoader()getResource("")getPath(); X 不 能运行
2:
thisgetClass()getResource("")getPath();
thisgetClass()getResource("")getPath(); 得到的是当前类 文件的URI目录。不包括自己!
如:/D:/myProjects/hp/WebRoot/WEB-INF/classes/com/jebel/helper/
/D:/myProjects/hp/WebRoot/WEB-INF/classes/ 得到的是 ClassPath的绝对URI路径。
如:/D:/myProjects/hp/WebRoot/WEB-INF/classes
3:
ThreadcurrentThread()getContextClassLoader()getResource("")getPath()
ThreadcurrentThread()getContextClassLoader()getResource("")getPath() 得到的是 ClassPath的绝对URI路径。。
如:/D:/myProjects/hp/WebRoot/WEB-INF/classes
ThreadcurrentThread()getContextClassLoader()getResource("/")getPath() X 不 能运行
最后
在Web应用程序中,我们一般通过ServletContextgetRealPath("/")方法得到Web应用程序的根目录的绝对路径。
还有requestgetContextPath(); 在Weblogic中要用requestgetServletContext()getContextPath();但如果打包成war部署到Weblogic服务器,项目内部并没有文件结构的概念,用这种方式是始终得到null,获取不到路径,目前还没有找到具体的解决方案。
java项目中文件的路径-方法大全
一、 相对路径的获得
说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目)
SystemgetProperty("userdir");
上述相对路径中,java项目中的文件是相对于项目的根目录web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于tomcat安装目录\bin)
二 类加载目录的获得(即当运行时某一类时获得其装载目录)
11)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)
InputStreamis=TestActionclassgetClassLoader()getResourceAsStream("testtxt"); (testtxt文件的路径为 项目名\src\testtxt;类TestPath所在包的第一级目录位于src目录下)
上式中将TestPath,testtxt替换成对应成相应的类名和文件名字即可
12)通用方法二 (此方法和11中的方法类似,不同的是此方法必须以'/'开头) InputStream is=Test1classgetResourceAsStream("/testtxt");
(testtxt文件的路径为 项目名\src\testtxt,类Test1所在包的第一级目录位于src目录下)
三 web项目根目录的获得(发布之后)
1 从servlet出发
可建立一个servlet在其的init方法中写入如下语句(没有请求的话会抛空指针导常)
ServletContext s1=thisgetServletContext();
String temp=s1getRealPath("/"); (关键)
结果形如:F:\tomcat-6036\webapps\test\(test为项目名字)
如果是调用了s1getRealPath("")则输出F:\tomcat-6036\webapps\test(少了一个"\")
2 从>
String path=requestgetSession()getServletContext()getRealPath("/");
结果形如: F:\tomcat-6036\webapps\test\
四 classpath的获取(在Eclipse中为获得src或者classes目录的路径),放在监听器,可以窗口启动获取路径
方法一 ThreadcurrentThread()getContextClassLoader()getResource("")getPath()
String path = ThreadcurrentThread()getContextClassLoader()
getResource("")getPath();
Systemoutprintln("path========" + path);输出: path========/F:/tomcat-6036/webapps/test/WEB-INF/classes/
方法二 JdomParseclassgetClassLoader()getResource("")getPath() (JdomParse为src某一个包中的类,下同)
eg:String p1=JdomParseclassgetClassLoader()getResource("")getPath();
Systemoutprintln("JdomParseclassgetClassLoader()getResource--"+p1);
输出:JdomParseclassgetClassLoader()getResource-/F:/tomcat-6036/webapps/test/WEB-INF/classes/
另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录)
eg String p2=JdomParseclassgetResource("")getPath();
Systemoutprintln("JdomParseclassgetResource---"+p2);
输出:JdomParseclassgetResource--/F:/tomcat-6036/webapps/test/WEB-INF/classes/
(JdomParse为src目录下jdom包中的类)
四 属性文件的读取:
方法 一
InputStream in = lnewBufferedInputStream( new FileInputStream(name));
Properties p = new Properties(); pload(in);
注意路径的问题,做执行之后就可以调用pgetProperty("name")得到对应属性的值
方法二
Locale locale =LocalegetDefault();
ResourceBundle localResource = ResourceBundlegetBundle("test/propertiesTest",locale);
String value = localResourcegetString("test");
Systemoutprintln("ResourceBundle: " + value);
工程src目录下propertiesTestproperties(名字后缀必须为properties)文件内容如下:
test=hello word
不通过Servlet获取路径
第一种实现
Java代码
URL url = ClassLoadergetSystemClassLoader()getResource("/");
File file =new File(urlgetPath());
File parentFile =new File(filegetParent());
Systemoutprintln("webRoot:"+parentFilegetParent());
第二种实现
首先写一个接听类 (推荐使用,容器启动时就执行,不会抛空指针异常,适合做定时器任务来删除服务器文件的路径)
Java代码:
package comchinacreatorreportlistener;
import javaxservletServletContext;
import javaxservletServletContextEvent;
import javaxservletServletContextListener;
/
@authorxiaoqunyi
/
public class PathListener implementsServletContextListener {
private staticServletContext servletContext;
public voidcontextDestroyed(ServletContextEvent sce) {
thisservletContext= scegetServletContext();
Systemoutprintln("path=======:"+servletContextgetRealPath("/"));
}
public voidcontextInitialized(ServletContextEvent arg0) {
}
}
在webxml中加入如下配置
Java代码 :
<listener>
<listener-class>comchinacreatorreportlistenerPathListener</listener-class>
</listener>
五、Java中的getResourceAsStream有以下几种:
1 ClassgetResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由 ClassLoader(类加载器)(获取资源)
2 ClassgetClassLoadergetResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。
3 ServletContext getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓,当然这和具体的容器实现有关。
4 Jsp下的application内置对象就是上面的ServletContext的一种实现。
其次,getResourceAsStream 用法大致有以下几种:
第一: 要加载的文件和class文件在同一目录下,例如:comxy 下有类meclass ,同时有资源文件myfilexml
那么,应该有如下代码:
meclassgetResourceAsStream("myfilexml");
第二:在meclass目录的子目录下,例如:comxy 下有类meclass ,同时在 comxyfile 目录下有资源文件myfilexml
那么,应该有如下代码:
meclassgetResourceAsStream("file/myfilexml");
第三:不在meclass目录下,也不在子目录下,例如:comxy 下有类meclass ,同时在 comxfile 目录下有资源文件myfilexml
那么,应该有如下代码:
meclassgetResourceAsStream("/com/x/file/myfilexml");
总结一下,可能只是两种写法
第一:前面有 “ / ”
“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject
meclassgetResourceAsStream("/com/x/file/myfilexml");
第二:前面没有 “ / ”
代表当前类的目录
meclassgetResourceAsStream("myfilexml");
meclassgetResourceAsStream("file/myfilexml");
以上就是关于java怎么根据文件名获取文件绝对路径全部的内容,包括:java怎么根据文件名获取文件绝对路径、java 文件在服务器中定位绝对路径、java读取文件路径问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)