转自:http://blog.csdn.net/appleprince88/article/details/11599805
?
? ? ? ?由于经常需要获取文件的路径,但是比较容易忘记,每次需要总需要查询,现在把这些方式写下来,方便自己的时候也方便大家了,如果大家在下面的方法遇到什么问题,可以留言。
一.Java文件获取路径方式:
各种获取方式如示例代码所示:
?
[java]?view plaincopy
?
class="dp-j">
- package?first.second;??
- ??
- import?java.io.File;??
- ??
- public?class?GetPath?{??
- ??
- ????public?static?void?getPath()??
- ????{??
- ??????????
- ????????System.out.println(System.getProperty("user.dir"));??
- ??????????
- ????????File?directory?=?new?File("");??
- ????????try{??
- ????????????System.out.println(directory.getCanonicalPath());??
- ????????????System.out.println(directory.getAbsolutePath());??
- ????????}catch(Exception?e)??
- ????????{??
- ????????????e.printStackTrace();??
- ????????}??
- ??????????
- ????????System.out.println(GetPath.class.getResource("/"));??
- ????????System.out.println(GetPath.class.getResource(""));??
- ??????????
- ????????System.out.println(GetPath.class.getClassLoader().getResource(""));??
- ????????System.out.println(GetPath.class.getClassLoader().getResource("source.xml"));??
- ????}??
- ?????
- ?
- ??
- ????public?static?void?main(String[]?args)?{??
- ??????????
- ????????GetPath.getPath();??
- ????}??
- ??
- }??
?
?
? ? ? ? 其在java project项目下输出如下:
?
[plain]?view plaincopy
?
- 方式一??
- D:\eclipse\juno_workspace\Test??
- 方式二??
- D:\eclipse\juno_workspace\Test??
- D:\eclipse\juno_workspace\Test??
- 方式三??
- file:/D:/eclipse/juno_workspace/Test/bin/??
- file:/D:/eclipse/juno_workspace/Test/bin/first/second/??
- 方式四??
- file:/D:/eclipse/juno_workspace/Test/bin/??
- file:/D:/eclipse/juno_workspace/Test/bin/source.xml??
?
? ? ? ? 在Web project输出如下:
?
[plain]?view plaincopy
?
- 方式一??
- D:\apache-tomcat-6.0.36\bin??
- 方式二??
- D:\apache-tomcat-6.0.36\bin??
- D:\apache-tomcat-6.0.36\bin??
- 方式三??
- file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/??
- file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/first/second/??
- 方式四??
- file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/??
- file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/source.xml??
?
?
? ? ? ? ?说明一下,实验类是放在first.second包下的,source.xml是src文件下的一个文件。在java project测试的项目名是Test,在web project测试的项目名是ConsisPro,还有就是 web project项目测试时运行在tomcat中,通过调用实验类GetPath产生的运行结果。
? ? ? ? ?从上面我们可以看出方式一和方式二在java project项目下是获取的项目根目录,而在web project项目下获取的是tomcat的bin目录。
? ? ? ? ?方式三当使用“/”时获取的是类编译后所在的目录,当不使用“/”是获取的是编译好类所在的目录,也就是前面加“/”产生的目录加上相应的包目录。
? ? ? ? 方式四中第一个获取的也是类编译后的目录,第二个获取的是也就是我们放在src目录底下的文件,编译后放在类编译后的目录底下,当我们需要获取放在Src目录底下的文件时,用这个方式很方便。
?
二.获取文件的一些具体情况下的方式
???????? 1.获取你存放在src目录下的文件,一般为配置文件,如下图1所示。推荐使用方式四的中的第二个方式,示例代码如下:
? ? ? ? ? ? ? ? ? ? ?图1
?
[java]?view plaincopy
?
- ?
- ??
- public?static??String?getSrcPath(String?name)??
- {??
- ????String?result=null;??
- ????URL?urlpath?=?GetPath.class.getClassLoader().getResource(name);???
- ????String?path=urlpath.toString();??
- ??????
- ????if(path.startsWith("file"))??
- ????{??
- ????????path=path.substring(5);??
- ????}??
- ????path.replace("/",?File.separator);??
- ????result=path;??
- ????return?result;??
- }??
?
? ? ? ? ? 2.在java project获取与src文件夹并列的文件下的文件,如下图2所示。这种情况推荐使用方式一和方式二,下面以第一种方式给出示例代码:
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图2
?
[java]?view plaincopy
?
- ??
- ??
- public?static?String?getParallelPath(String?filename,String?...args)??
- {??
- ????String?pre=System.getProperty("user.dir");??
- ????String?path=pre;??
- ????for(String?arg:args)??
- ????{??
- ????????path+=File.separator+arg;??
- ????}??
- ????path+=File.separator+filename;??
- ????if(path.startsWith("file"))??
- ????{??
- ????????path=path.substring(5);??
- ????}??
- ????path.replace("/",?File.separator);??
- ????return?path;??
- }??
?
? ? ? ? ? 3.如果希望无论在java project或者web project项目使用类包底下的一些文件,如下图3所示。这种情况可以使用方式三中的第二种方式,使用示例代码如下:
? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图3
?
[java]?view plaincopy
?
- public?static?String?getPackagePath(String?filename)??
- ????{??
- ????????String?result=null;??
- ????????URL?urlpath=GetPath.class.getResource("");??
- ????????String?path=urlpath.toString();??
- ????????if(path.startsWith("file"))??
- ????????{??
- ????????????path=path.substring(5);??
- ????????}??
- ????????path.replace("/",?File.separator);??
- ????????result=path+filename;??
- ????????return?result;??
- ????}??
?
?
? ? ? ? ?Tips:这个方法要在和要获取的文件在同一个包中才可以,在不同包中,需要使用其它方式
???????? 4.当在web project项目下想获取WebRoot目录底下自定义目录文件下的文件,如下图4所示。这种情况推荐方式三和方式四,进行一些操作,下面是一个示例代码:
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图4
?
[java]?view plaincopy
?
- ??
- ????public?static?String?getWebRootPath()??
- ????{??
- ????????URL?urlpath=GetPath.class.getResource("");??
- ????????String?path=urlpath.toString();??
- ????????if(path.startsWith("file"))??
- ????????{??
- ????????????path=path.substring(5);??
- ????????}??
- ????????if(path.indexOf("WEB-INF")>0)??
- ????????{??
- ????????????path=path.substring(0,path.indexOf("WEB-INF")-1);??
- ????????}??
- ????????path.replace("/",?File.separator);??
- ????????return?path;??
- ????}??
- ??????
- ??????
- ??????
- ????public?static?String?getWebRootFilepath(String?webroot,String?filename,String?...args)??
- ????{??
- ????????String?pre=webroot;??
- ????????String?path=pre;??
- ????????for(String?arg:args)??
- ????????{??
- ????????????path+=File.separator+arg;??
- ????????}??
- ????????path+=File.separator+filename;??
- ????????if(path.startsWith("file"))??
- ????????{??
- ????????????path=path.substring(5);??
- ????????}??
- ????????path.replace("/",?File.separator);??
- ????????return?path;??
- ????}??
?
三.空格问题
? ? ? ? 可以用replaceAll("%20"," "); 来解决部分问题,遇到其它问题可以参考下面的文章http://www.2cto.com/kf/201108/100533.html。我认为当你得项目设为UTF-8的格式应该不会遇到空格问题。
?
参考文献
? ? ? ? 1.??????JAVA中获取路径的各种方式。http://gjt1244.blog.163.com/blog/static/19165205620118724046617/
? ? ? ? 2.??????Java获取当前文件路径。http://www.cnblogs.com/lostyue/archive/2011/06/27/2091686.html
? ? ? ? 3.??????JAVA彻底解决获取空格路径问题。http://www.2cto.com/kf/201108/100533.html
?
附录源代码
[java]?view plaincopy
?
- package?first.second;??
- ??
- import?java.io.BufferedReader;??
- import?java.io.File;??
- import?java.io.FileInputStream;??
- import?java.io.FileNotFoundException;??
- import?java.io.IOException;??
- import?java.io.InputStreamReader;??
- import?java.net.URL;??
- ??
- public?class?GetPath?{??
- ??
- ????public?static?void?getPath()??
- ????{??
- ??????????
- ????????System.out.println("方式一");??
- ????????System.out.println(System.getProperty("user.dir"));??
- ??????????
- ????????System.out.println("方式二");??
- ????????File?directory?=?new?File("");??
- ????????try{??
- ????????????System.out.println(directory.getCanonicalPath());??
- ????????????System.out.println(directory.getAbsolutePath());??
- ????????}catch(Exception?e)??
- ????????{??
- ????????????e.printStackTrace();??
- ????????}??
- ??????????
- ????????System.out.println("方式三");??
- ????????System.out.println(GetPath.class.getResource("/"));??
- ????????System.out.println(GetPath.class.getResource(""));??
- ??????????
- ????????System.out.println("方式四");??
- ????????System.out.println(GetPath.class.getClassLoader().getResource(""));??
- ????????System.out.println(GetPath.class.getClassLoader().getResource("source.xml"));??
- ????}??
- ?????
- ?
- ??
- ????public?static??String?getSrcPath(String?name)??
- ????{??
- ????????String?result=null;??
- ????????URL?urlpath?=?GetPath.class.getClassLoader().getResource(name);???
- ????????String?path=urlpath.toString();??
- ??????????
- ????????if(path.startsWith("file"))??
- ????????{??
- ????????????path=path.substring(5);??
- ????????}??
- ????????path.replace("/",?File.separator);??
- ????????result=path;??
- ????????return?result;??
- ????}??
- ??????
- ??????
- ????public?static?String?getParallelPath(String?filename,String?...args)??
- ????{??
- ????????String?pre=System.getProperty("user.dir");??
- ????????String?path=pre;??
- ????????for(String?arg:args)??
- ????????{??
- ????????????path+=File.separator+arg;??
- ????????}??
- ????????path+=File.separator+filename;??
- ????????if(path.startsWith("file"))??
- ????????{??
- ????????????path=path.substring(5);??
- ????????}??
- ????????path.replace("/",?File.separator);??
- ????????return?path;??
- ????}??
- ????public?static?void?readFile(String?filepath)??
- ????{??
- ????????File?file=new?File(filepath);??
- ????????try?{??
- ????????????InputStreamReader?sr=new?InputStreamReader(new?FileInputStream(file));??
- ????????????BufferedReader?br=new?BufferedReader(sr);??
- ????????????String?line=null;??
- ????????????while((line=br.readLine())!=null)??
- ????????????{??
- ????????????????System.out.println(line);??
- ????????????}??
- ??????????????
- ????????}?catch?(FileNotFoundException?e)?{??
- ??????????????
- ????????????e.printStackTrace();??
- ????????}?catch?(IOException?e)?{??
- ??????????????
- ????????????e.printStackTrace();??
- ????????}??
- ????}??
- ????public?static?String?getPackagePath(String?filename)??
- ????{??
- ????????String?result=null;??
- ????????URL?urlpath=GetPath.class.getResource("");??
- ????????String?path=urlpath.toString();??
- ????????if(path.startsWith("file"))??
- ????????{??
- ????????????path=path.substring(5);??
- ????????}??
- ????????path.replace("/",?File.separator);??
- ????????result=path+filename;??
- ????????return?result;??
- ????}??
- ??????
- ????public?static?String?getWebRootPath()??
- ????{??
- ????????URL?urlpath=GetPath.class.getResource("");??
- ????????String?path=urlpath.toString();??
- ????????if(path.startsWith("file"))??
- ????????{??
- ????????????path=path.substring(5);??
- ????????}??
- ????????if(path.indexOf("WEB-INF")>0)??
- ????????{??
- ????????????path=path.substring(0,path.indexOf("WEB-INF")-1);??
- ????????}??
- ????????path.replace("/",?File.separator);??
- ????????return?path;??
- ????}??
- ??????
- ??????
- ??????
- ????public?static?String?getWebRootFilepath(String?webroot,String?filename,String?...args)??
- ????{??
- ????????String?pre=webroot;??
- ????????String?path=pre;??
- ????????for(String?arg:args)??
- ????????{??
- ????????????path+=File.separator+arg;??
- ????????}??
- ????????path+=File.separator+filename;??
- ????????if(path.startsWith("file"))??
- ????????{??
- ????????????path=path.substring(5);??
- ????????}??
- ????????path.replace("/",?File.separator);??
- ????????return?path;??
- ????}??
- ????public?static?void?main(String[]?args)?{??
- ??????????
- ??
- ??
- ??
- ??
- ??
- ????????System.out.println(GetPath.getParallelPath("source.xml",?"my?file"));??
- ????????GetPath.readFile(GetPath.getParallelPath("source.xml",?"my?file"));??
- ??
- ????????System.out.println(GetPath.getPackagePath("source.xml"));??
- ????????GetPath.readFile(GetPath.getPackagePath("source.xml"));??
- ??????????
- ????}??
- ??
- }?