java web项目 相对路径怎么写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web项目 相对路径怎么写相关的知识,希望对你有一定的参考价值。
网上长篇大论一大堆,不知所云,我就问一个简单的问题:
我想访问WebRoot目录下的一个文件中的东西,提示我目录找不到.不在web工程下可以访问,web下我知道WebRoot是根目录,所以我试过WebRoot/**/**不行 /**/**不行 ../**/** 不行 网上找了一些方法都没啥用 web下访问资源到底要怎么写?
比如d:\tomcat 6\webapps\项目名
webRoot下面的resources目录通过File path = new File(basePath, "resources");获取
其它同理
如果是jsp的话,获取resources目录直接通过“<%=request.getContextPath()%>/resources”获取追问
我明白一点了,如果做成web工程后会放入容器,请问怎么不用session什么的就能知道当前的相对路径呢? 我这个是独立程序跟随tomcat启动,没有request什么的controller处理的.获取不到
追答spring mvc的话也简单,传入一个HttpSession参数即可。
public ModelAndView test(HttpSession session)String basePath=session.getServletContext().getRealPath("/");
。。。
参考技术A 如果是WebRoot根目录下,直接写那个文件追问
地址是这样的WeBRoot/文件夹/文件 我要访问文件 我写/文件夹/文件不行 试了很多都不行
追答我想看一下,行吗3.5.7.2.2.8.5.6.0
追问我解释清楚一点,原先是一个独立的程序,需要放到一个web工程下,跟随web工程一起启动,如果是tomcat的init启动的那么路径就错误了,如果是main方法启动这个小程序,我知道工程名就是根目录, 现在放到web下提示路径找不到,编程web后路径到底应该怎么写?我这个情况只有一个init方法启动,没有request,sessin什么的,我没办法用到.
追答你可以实现一个监听器,在启动的时候调用你的小程序,然后把路径传进去
本回答被提问者采纳 参考技术B 如果在WebRoot下面则直接写,如访问WebRoot下的index.jsp则可以直接写href="indiex.jsp"如何页面在pages文件夹下面则可以这样写href="pages/index.jps"以此类推吧; 参考技术C 能看到服务器配置么, 看看是不是把直接访问文件的路径给禁用了,一般网站出去安全考虑都会禁用。 参考技术D 项目名/文件夹/文件WeBRoot下直接 项目名/文件名
java项目中文件的路径
我要做java项目的整理, 我们公司正在做一个很大的项目, 我需要把我正在做的这个模块涉及到的文件以及路径全部整理出来, 请问怎么快速拷贝其文件的路径 如图:
我怎么快速的把这些文件项目的路径拷贝出来, 拷贝到word文档中去
java项目中文件的路径-方法大全
一、 相对路径的获得
说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目)
System.getProperty("user.dir");
上述相对路径中,java项目中的文件是相对于项目的根目录web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于tomcat安装目录\\bin)
二 类加载目录的获得(即当运行时某一类时获得其装载目录)
1.1)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)
InputStreamis=TestAction.class.getClassLoader().getResourceAsStream("test.txt"); (test.txt文件的路径为 项目名\\src\\test.txt;类TestPath所在包的第一级目录位于src目录下)
上式中将TestPath,test.txt替换成对应成相应的类名和文件名字即可
1.2)通用方法二 (此方法和1.1中的方法类似,不同的是此方法必须以\'/\'开头) InputStream is=Test1.class.getResourceAsStream("/test.txt");
(test.txt文件的路径为 项目名\\src\\test.txt,类Test1所在包的第一级目录位于src目录下)
三 web项目根目录的获得(发布之后)
1 从servlet出发
可建立一个servlet在其的init方法中写入如下语句(没有请求的话会抛空指针导常)
ServletContext s1=this.getServletContext();
String temp=s1.getRealPath("/"); (关键)
结果形如:F:\\tomcat-6.0.36\\webapps\\test\\(test为项目名字)
如果是调用了s1.getRealPath("")则输出F:\\tomcat-6.0.36\\webapps\\test(少了一个"\\")
2 从httpServletRequest出发(没有请求的话会抛空指针导常)
String path=request.getSession().getServletContext().getRealPath("/");
结果形如: F:\\tomcat-6.0.36\\webapps\\test\\
四 classpath的获取(在Eclipse中为获得src或者classes目录的路径),放在监听器,可以窗口启动获取路径
方法一 Thread.currentThread().getContextClassLoader().getResource("").getPath()
String path = Thread.currentThread().getContextClassLoader()
.getResource("").getPath();
System.out.println("path========" + path);输出: path========/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/
方法二 JdomParse.class.getClassLoader().getResource("").getPath() (JdomParse为src某一个包中的类,下同)
eg:String p1=JdomParse.class.getClassLoader().getResource("").getPath();
System.out.println("JdomParse.class.getClassLoader().getResource--"+p1);
输出:JdomParse.class.getClassLoader().getResource-/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/
另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录)
eg String p2=JdomParse.class.getResource("").getPath();
System.out.println("JdomParse.class.getResource---"+p2);
输出:JdomParse.class.getResource--/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/
(JdomParse为src目录下jdom包中的类)
四 属性文件的读取:
方法 一
InputStream in = lnewBufferedInputStream( new FileInputStream(name));
Properties p = new Properties(); p.load(in);
注意路径的问题,做执行之后就可以调用p.getProperty("name")得到对应属性的值
方法二
Locale locale =Locale.getDefault();
ResourceBundle localResource = ResourceBundle.getBundle("test/propertiesTest",locale);
String value = localResource.getString("test");
System.out.println("ResourceBundle: " + value);
工程src目录下propertiesTest.properties(名字后缀必须为properties)文件内容如下:
test=hello word
不通过Servlet获取路径
第一种实现
Java代码
URL url = ClassLoader.getSystemClassLoader().getResource("./");
File file =new File(url.getPath());
File parentFile =new File(file.getParent());
System.out.println("webRoot:"+parentFile.getParent());
第二种实现
首先写一个接听类 (推荐使用,容器启动时就执行,不会抛空指针异常,适合做定时器任务来删除服务器文件的路径)
Java代码:
package com.chinacreator.report.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @authorxiaoqun.yi
*/
public class PathListener implementsServletContextListener
private staticServletContext servletContext;
public voidcontextDestroyed(ServletContextEvent sce)
this.servletContext= sce.getServletContext();
System.out.println("path=======:"+servletContext.getRealPath("/"));
public voidcontextInitialized(ServletContextEvent arg0)
在web.xml中加入如下配置
Java代码 :
<listener>
<listener-class>com.chinacreator.report.listener.PathListener</listener-class>
</listener>
五、Java中的getResourceAsStream有以下几种:
1. Class.getResourceAsStream(String path) : path 不以’/\'开头时默认是从此类所在的包下取资源,以’/\'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由 ClassLoader(类加载器)(获取资源)
2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/\'开头,最终是由ClassLoader获取资源。
3. ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/\'开头无所谓,当然这和具体的容器实现有关。
4. Jsp下的application内置对象就是上面的ServletContext的一种实现。
其次,getResourceAsStream 用法大致有以下几种:
第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类me.class ,同时有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("myfile.xml");
第二:在me.class目录的子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("file/myfile.xml");
第三:不在me.class目录下,也不在子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("/com/x/file/myfile.xml");
总结一下,可能只是两种写法
第一:前面有 “ / ”
“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject
me.class.getResourceAsStream("/com/x/file/myfile.xml");
第二:前面没有 “ / ”
代表当前类的目录
me.class.getResourceAsStream("myfile.xml");
me.class.getResourceAsStream("file/myfile.xml");
相对路径的话,可以先获取到当前文件的编译路径,之后在找到想找文件的路径的思路来实现。
举例:
XMLS.class.getClass().getResourceAsStream("/test/test.txt");
解释:XMLS.class.getClass()是获取当前的类编译路径,之后通过getResourceAsStream的形式即可找到要读取的文件的路径。
绝对路径的话,可以通过“ 类名.class.getResource("").getPath()”方法实现。
举例:”String path = XMLS.class.getResource("").getPath()“.
解释:以上语句就是获取到XMLS编译后的绝对路径(无法获取到java文件路径的,因为java运行的都是class文件)。
参考技术B /*** param:directory
* param:fw
* */
public void getPath(String directory, FileWriter fw) throws Exception
File path = new File(directory);
File[] files = path.listFiles();
for (File f : files)
if (f.isDirectory())
getPath(f.getAbsolutePath(), fw);
else
fw.write(f.getAbsolutePath() + "\n");
//调用
FileWriter fw = new FileWriter("C:\\dir.log", true);
getPath("E:\\trunk\\dev\\web", fw);
fw.flush();
fw.close();本回答被提问者和网友采纳
以上是关于java web项目 相对路径怎么写的主要内容,如果未能解决你的问题,请参考以下文章