锁定老帖子 主题:java路径问题总结
精华帖 (1) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-21
最后修改:2010-10-25
平时写程序的时候,很多时候提示文件找不到,而抛出了异常,现在整理如下
一 相对路径的获得 可建立一个servlet在其的init方法中写入如下语句 如果是调用了s1.getRealPath("")则输出D:\工具\Tomcat-6.0\webapps\002_ext(少了一个"\") 2 从httpServletRequest出发 String cp11111=request.getSession().getServletContext().getRealPath("/"); 结果形如:D:\工具\Tomcat-6.0\webapps\002_ext\
四 classpath的获取(在Eclipse中为获得src或者classes目录的路径) 方法一 Thread.currentThread().getContextClassLoader().getResource("").getPath()
eg: String t=Thread.currentThread().getContextClassLoader().getResource("").getPath(); 输出:t---/E:/order/002_ext/WebRoot/WEB-INF/classes/
方法二 JdomParse.class.getClassLoader().getResource("").getPath() (JdomParse为src某一个包中的类,下同) eg:String p1=JdomParse.class.getClassLoader().getResource("").getPath(); 输出: JdomParse.class.getClassLoader().getResource--/E:/order/002_ext/WebRoot/WEB-INF/classes/
另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录) eg String p2=JdomParse.class.getResource("").getPath();
输出: JdomParse.class.getResource---/E:/order/002_ext/WebRoot/WEB-INF/classes/jdom/ (JdomParse为src目录下jdom包中的类)
四 属性文件的读取: 方法 一 InputStream in = lnew BufferedInputStream( new FileInputStream(name)); Properties p = new Properties(); p.load(in);
注意路径的问题,做执行之后就可以调用p.getProperty("name")得到对应属性的值
方法二 Locale locale = Locale.getDefault(); 工程src目录下propertiesTest.properties(名字后缀必须为properties)文件内容如下: test=hello word
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-22
有参考价值。
|
|
返回顶楼 | |
发表时间:2009-01-22
恩,第二个很有用处
|
|
返回顶楼 | |
发表时间:2009-01-22
嗯。。。。
|
|
返回顶楼 | |
发表时间:2009-01-26
LZ,有什么方法实现在JAVA代码中(SRC下),来获取路径,而不管项目名是否为中文(比如我的工程名叫"JavaEye推荐"或工程发布后WEB服务器放在中文路径下的)?
|
|
返回顶楼 | |
发表时间:2009-02-01
qwe1234567890 写道 LZ,有什么方法实现在JAVA代码中(SRC下),来获取路径,而不管项目名是否为中文(比如我的工程名叫"JavaEye推荐"或工程发布后WEB服务器放在中文路径下的)? 其实我是利用jvm加载类的路径来定位文件,注意你工程根目录下的.classpath文件,如我这里有一个java项目中的.class文件内容如下 <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="output" path="classes"/> </classpath> 它表示当java虚拟机加载类的时候从项目根目录下的classes目录去加载 如果你的文件放在classes目录下,程序自然就可以找到文件了(因为 InputStream is=TestAction.class.getClassLoader().getResourceAsStream("test.txt"); 当程序运行的时候,jvm从TestAction这个类的加载路径类找文件 也就是从classes这个目录下找文件)要强调的是是从classes来加载类,而不是src目录来加载类,只不过很多的IDE工具给了我们太多的错觉,比如说Eclipse里面,当我们在写完程序保存的时候,Eclipse会自动的帮我们编译该程序,至于保存到哪里就要靠你项目根目录下的.classpath文件类决定了比如如果有 <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="output" path="classes"/> </classpath> 那你在src某一目录写一个类,保存的时候,它会把编译后的class文件(包括包的目录结构)都放到了<classpathentry kind="output" path="classes"/>指定目录,在这里也就是classes目录;但是针对一般的配置文件(非java类文件)就无所谓什么编译和编译后的class文件了,而Eclipse采取的做法就是对文件不做任何改变,直接放到classes目录下; 这样给我们的错觉就是程序从src目录下读文件,其实它是从classes目录下读文件,但是因为src和classes两个目录下的文件(一般的配置文件)内容是一模一样的,所以我们感觉不到这一点; 最后要说一下,项目名字的中文问题; 对于一般的java项目如果你的项目名字是中文的那是一点问题都没有的; 但是如果是web项目就有问题了,我这里说的是web项目的名字是中文,不是说工程发布后WEB服务器放在中文路径下;如果你仅仅是工程发布后WEB服务器放在中文路径下的那也是没有任何问题了;但如果web项目的名字是中文那就有麻烦了,比如说你的web项目名字是web项目中文目录,你现在要想访问该工程的index.jsp 那么常规的做法就是打入http://localhost:8080/web项目中文目录/index.jsp 这样显然是访问不到的,因为当你回车的时候http://localhost:8080/web项目中文目录/index.jsp是要经过编码转换的,具体如何转换在这里就不多说了,在开发中也不推荐这样,如果这样搞那也是自取麻烦!! |
|
返回顶楼 | |
发表时间:2010-01-12
刚做项目,想要读取src目录下的txt文件,但按照以上方法都不那么如人意,最后实在没办法了。就这样使用的:
String filePath = request.getRealPath("/")+"../classes/properties.txt"; 打印结果是: E:\taipin\50_代码开发\TP_Project\TPWeb\build\weboutput\../classes/properties.txt 最终可以找得到properties.txt文档。 |
|
返回顶楼 | |
浏览 15675 次