转自:http://blog.csdn.net/appleprince88/article/details/11599805# 谢谢!

由于经常需要获取文件的路径,但是比较容易忘记,每次需要总需要查询,现在把这些方式写下来,方便自己的时候也方便大家了,如果大家在下面的方法遇到什么问题,可以留言。

各种获取方式如示例代码所示:

  1. package first.second;
  2. import java.io.File;
  3. public class GetPath {
  4. public static void getPath()
  5. {
  6. //方式一
  7. System.out.println(System.getProperty("user.dir"));
  8. //方式二
  9. File directory = new File("");//设定为当前文件夹
  10. try{
  11. System.out.println(directory.getCanonicalPath());//获取标准的路径
  12. System.out.println(directory.getAbsolutePath());//获取绝对路径
  13. }catch(Exception e)
  14. {
  15. e.printStackTrace();
  16. }
  17. //方式三
  18. System.out.println(GetPath.class.getResource("/"));
  19. System.out.println(GetPath.class.getResource(""));
  20. //方式4
  21. System.out.println(GetPath.class.getClassLoader().getResource(""));
  22. System.out.println(GetPath.class.getClassLoader().getResource("source.xml"));
  23. }
  24. /**
  25. * @param args
  26. */
  27. public static void main(String[] args) {
  28. // TODO Auto-generated method stub
  29. GetPath.getPath();
  30. }
  31. }

其在java project项目下输出如下:

  1. 方式一
  2. D:\eclipse\juno_workspace\Test
  3. 方式二
  4. D:\eclipse\juno_workspace\Test
  5. D:\eclipse\juno_workspace\Test
  6. 方式三
  7. file:/D:/eclipse/juno_workspace/Test/bin/
  8. file:/D:/eclipse/juno_workspace/Test/bin/first/second/
  9. 方式四
  10. file:/D:/eclipse/juno_workspace/Test/bin/
  11. file:/D:/eclipse/juno_workspace/Test/bin/source.xml

在Web project输出如下:

  1. 方式一
  2. D:\apache-tomcat-6.0.36\bin
  3. 方式二
  4. D:\apache-tomcat-6.0.36\bin
  5. D:\apache-tomcat-6.0.36\bin
  6. 方式三
  7. file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/
  8. file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/first/second/
  9. 方式四
  10. file:/D:/apache-tomcat-6.0.36/webapps/ConsisPro/WEB-INF/classes/
  11. 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

  1. /* @param name   文件名  不包含路径
  2. */
  3. public static  String getSrcPath(String name)
  4. {
  5. String result=null;
  6. URL urlpath = GetPath.class.getClassLoader().getResource(name);
  7. String path=urlpath.toString();
  8. //remove the head "file:",if it exists
  9. if(path.startsWith("file"))
  10. {
  11. path=path.substring(5);
  12. }
  13. path.replace("/", File.separator);
  14. result=path;
  15. return result;
  16. }

2.在java project获取与src文件夹并列的文件下的文件,如下图2所示。这种情况推荐使用方式一和方式二,下面以第一种方式给出示例代码:

图2

  1. // filename 文件名 不包含路径
  2. // ...args  文件夹名      可以输入多个文件夹名参数
  3. public static String getParallelPath(String filename,String ...args)
  4. {
  5. String pre=System.getProperty("user.dir");
  6. String path=pre;
  7. for(String arg:args)
  8. {
  9. path+=File.separator+arg;
  10. }
  11. path+=File.separator+filename;
  12. if(path.startsWith("file"))
  13. {
  14. path=path.substring(5);
  15. }
  16. path.replace("/", File.separator);
  17. return path;
  18. }

3.如果希望无论在java project或者web project项目使用类包底下的一些文件,如下图3所示。这种情况可以使用方式三中的第二种方式,使用示例代码如下:

图3

  1. public static String getPackagePath(String filename)
  2. {
  3. String result=null;
  4. URL urlpath=GetPath.class.getResource("");
  5. String path=urlpath.toString();
  6. if(path.startsWith("file"))
  7. {
  8. path=path.substring(5);
  9. }
  10. path.replace("/", File.separator);
  11. result=path+filename;
  12. return result;
  13. }

Tips:这个方法要在和要获取的文件在同一个包中才可以,在不同包中,需要使用其它方式

4.当在web project项目下想获取WebRoot目录底下自定义目录文件下的文件,如下图4所示。这种情况推荐方式三和方式四,进行一些操作,下面是一个示例代码:

图4

  1. //获取WebRoot目录
  2. public static String getWebRootPath()
  3. {
  4. URL urlpath=GetPath.class.getResource("");
  5. String path=urlpath.toString();
  6. if(path.startsWith("file"))
  7. {
  8. path=path.substring(5);
  9. }
  10. if(path.indexOf("WEB-INF")>0)
  11. {
  12. path=path.substring(0,path.indexOf("WEB-INF")-1);
  13. }
  14. path.replace("/", File.separator);
  15. return path;
  16. }
  17. //webroot  WebRoot目录
  18. //filename  文件名
  19. //...args   文件名所在文件夹,多个参数输入
  20. public static String getWebRootFilepath(String webroot,String filename,String ...args)
  21. {
  22. String pre=webroot;
  23. String path=pre;
  24. for(String arg:args)
  25. {
  26. path+=File.separator+arg;
  27. }
  28. path+=File.separator+filename;
  29. if(path.startsWith("file"))
  30. {
  31. path=path.substring(5);
  32. }
  33. path.replace("/", File.separator);
  34. return path;
  35. }

三.空格问题

可以用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

附录源代码

  1. package first.second;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.net.URL;
  9. public class GetPath {
  10. public static void getPath()
  11. {
  12. //方式一
  13. System.out.println("方式一");
  14. System.out.println(System.getProperty("user.dir"));
  15. //方式二
  16. System.out.println("方式二");
  17. File directory = new File("");//设定为当前文件夹
  18. try{
  19. System.out.println(directory.getCanonicalPath());//获取标准的路径
  20. System.out.println(directory.getAbsolutePath());//获取绝对路径
  21. }catch(Exception e)
  22. {
  23. e.printStackTrace();
  24. }
  25. //方式三
  26. System.out.println("方式三");
  27. System.out.println(GetPath.class.getResource("/"));
  28. System.out.println(GetPath.class.getResource(""));
  29. //方式4
  30. System.out.println("方式四");
  31. System.out.println(GetPath.class.getClassLoader().getResource(""));
  32. System.out.println(GetPath.class.getClassLoader().getResource("source.xml"));
  33. }
  34. /**
  35. * @param name   文件名  不包含路径
  36. */
  37. public static  String getSrcPath(String name)
  38. {
  39. String result=null;
  40. URL urlpath = GetPath.class.getClassLoader().getResource(name);
  41. String path=urlpath.toString();
  42. //remove the head "file:",if it exists
  43. if(path.startsWith("file"))
  44. {
  45. path=path.substring(5);
  46. }
  47. path.replace("/", File.separator);
  48. result=path;
  49. return result;
  50. }
  51. // filename 文件名 不包含路径
  52. // ...args  文件夹名      可以输入多个文件夹名参数
  53. public static String getParallelPath(String filename,String ...args)
  54. {
  55. String pre=System.getProperty("user.dir");
  56. String path=pre;
  57. for(String arg:args)
  58. {
  59. path+=File.separator+arg;
  60. }
  61. path+=File.separator+filename;
  62. if(path.startsWith("file"))
  63. {
  64. path=path.substring(5);
  65. }
  66. path.replace("/", File.separator);
  67. return path;
  68. }
  69. public static void readFile(String filepath)
  70. {
  71. File file=new File(filepath);
  72. try {
  73. InputStreamReader sr=new InputStreamReader(new FileInputStream(file));
  74. BufferedReader br=new BufferedReader(sr);
  75. String line=null;
  76. while((line=br.readLine())!=null)
  77. {
  78. System.out.println(line);
  79. }
  80. } catch (FileNotFoundException e) {
  81. // TODO Auto-generated catch block
  82. e.printStackTrace();
  83. } catch (IOException e) {
  84. // TODO Auto-generated catch block
  85. e.printStackTrace();
  86. }
  87. }
  88. public static String getPackagePath(String filename)
  89. {
  90. String result=null;
  91. URL urlpath=GetPath.class.getResource("");
  92. String path=urlpath.toString();
  93. if(path.startsWith("file"))
  94. {
  95. path=path.substring(5);
  96. }
  97. path.replace("/", File.separator);
  98. result=path+filename;
  99. return result;
  100. }
  101. //获取WebRoot目录
  102. public static String getWebRootPath()
  103. {
  104. URL urlpath=GetPath.class.getResource("");
  105. String path=urlpath.toString();
  106. if(path.startsWith("file"))
  107. {
  108. path=path.substring(5);
  109. }
  110. if(path.indexOf("WEB-INF")>0)
  111. {
  112. path=path.substring(0,path.indexOf("WEB-INF")-1);
  113. }
  114. path.replace("/", File.separator);
  115. return path;
  116. }
  117. //webroot  WebRoot目录
  118. //filename  文件名
  119. //...args   文件名所在文件夹,多个参数输入
  120. public static String getWebRootFilepath(String webroot,String filename,String ...args)
  121. {
  122. String pre=webroot;
  123. String path=pre;
  124. for(String arg:args)
  125. {
  126. path+=File.separator+arg;
  127. }
  128. path+=File.separator+filename;
  129. if(path.startsWith("file"))
  130. {
  131. path=path.substring(5);
  132. }
  133. path.replace("/", File.separator);
  134. return path;
  135. }
  136. public static void main(String[] args) {
  137. // TODO Auto-generated method stub
  138. //      GetPath.getPath();
  139. //      //1 test
  140. //      System.out.println(GetPath.getSrcPath("source.xml"));
  141. //      GetPath.readFile(GetPath.getSrcPath("source.xml"));
  142. //      //2 test
  143. System.out.println(GetPath.getParallelPath("source.xml", "my file"));
  144. GetPath.readFile(GetPath.getParallelPath("source.xml", "my file"));
  145. //      //3 test
  146. System.out.println(GetPath.getPackagePath("source.xml"));
  147. GetPath.readFile(GetPath.getPackagePath("source.xml"));
  148. }
  149. }

Java文件获取路径方式:的更多相关文章

  1. JAVA中获取路径

    内容来自于snannan_268 关键字: java中获取路径 JAVA中获取路径: 1.jsp中取得路径:   以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.get ...

  2. java项目获取路径的几种方式

    第一种: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); ...

  3. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  4. java中获取路径的几种基本的方法

    package com.ygh.blog.realpath; import java.io.File; import java.io.IOException; import java.io.Input ...

  5. Java中获取路径的各种方法

    1. java文件中获得路径 Thread.currentThread().getContextClassLoader().getResource("") //获得资源文件(.cl ...

  6. java中获取路径中的空格处理(%20)问题

    在java中获取文件路径的时候,有时候会获取到空格,但是在中文编码环境下,空格会变成“%20”从而使得路径错误. 解决办法: String path = Parameter.class.getReso ...

  7. java 获取路径与各文件目录的…

    java 获取路径 博客分类: MyJava JavaJSPWebTomcat编程  转至:http://geeksun.iteye.com/blog/356339 (1).request.getRe ...

  8. Java中获取路径的方法_自我分析

    就目前的我来说最常用的两种获取路径的方法是  class.getRecource(filename) 和 class.getclassloader.getRecource(filename) 这两者的 ...

  9. java中获取路径的方法

    在class获取路径的方法,getResource有没有“\”的区别 System.out.println("" + this.getClass().getResource(&qu ...

随机推荐

  1. 用odbc连接oracle问题

    如果用11g的客户端,然后通过odbc(远程连接)连接10g的oracle,会出现监听程序无法启动(ORA-12541: TNS: 无监听程序) 此时需要在客户端目录中D:\instantclient ...

  2. 学习java第8天

    今天主要是学习了多态,多态指同一个对象在不同时刻体现出来的不同状态.多态的前提:有继承或者实现关系.有方法重写.有父类或者父接口引用指向子类对象.   class Fu {} class Zi ext ...

  3. 调用Ria Service中方法的各种方式

    前端界面后台: using System; using System.Collections.Generic; using System.Linq; using System.Net; using S ...

  4. 解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid

    重新启动服务器,访问web服务发现无法浏览啦!登陆服务器之后进到nginx使用./nginx -s reload重新读取配置文件,发现报nginx: [error] open() "/usr ...

  5. Java值传递和引用传递详细解说

    前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是 Java中到底是否只存在值传递,因为在查阅资料时,经常看到 ...

  6. [2015hdu多校联赛补题]hdu5324 Boring Class

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5324 题意:给你一个二维的序列,让你找出最长的第一维升第二维降的子序列(如果多个答案,输出字典序最小) ...

  7. C#的 构造函数 和 方法重载

    构造函数(一本正经的讲构造函数 如果想看不正经的往下翻看方法重载) 方法名称与类名相同,没有返回值类型,连void都没有 用作给类的对象初始化 一个类中可以有多个构造 如果手动添加一个构造,系统不会自 ...

  8. error in opening zip file 1 错误

    项目部署服务启动时会出现: error in opening zip file 1 错误 原来是不同服务器编译过的jar包直接下载后发布有问题,重新上传本地编译好的lib下面的jar包后,启动服务,正 ...

  9. python的编码问题

    本文简单介绍了各种常用的字符编码的特点,并介绍了在python2.x中如何与编码问题作战 :) 请注意本文关于Python的内容仅适用于2.x,3.x中str和unicode有翻天覆地的变化,请查阅其 ...

  10. jQuery选择器和DOM操作——《锋利的jQuery》(第2版)读书笔记1

    第1章 认识jQuery jQuery有以下优势: 轻量级: 强大的选择器: 出色的DOM操作的封装: 可靠的事件处理机制: 完善的Ajax: 不污染顶级变量: 出色的浏览器兼容性: 链式操作方式: ...