通常我们定位文件都是通过绝对路径进行定位,比如“F:/Java/bin/test/test.java”,这样的缺点就是,一旦项目文件移动,这些路径就完全失效。

所以,下面我们来介绍一种通过相对路径来定位文件的方法。我用的IDE是eclipse,项目路径下有src和bin文件夹分别存放,java的源代码和编译文件。

如图,我的工程名是project,在F盘的study目录下,包名是com.www,源文件是Test.java

我们知道,java的源文件编译后才能运行,也就是java运行的其实是Ttest.class,而test.class在bin文件目录下,跟src目录一点关系也没有,那么如果要定位src目录下的文件,就只能使用绝对路径来定位了。

下面讨论,用相对路径来定位bin目录下的文件,我们要定位test33.xml 、test22.xml 、test11.xml。定义类名为Test,new一个实例为te。

首先用定位该类:

采用类:Test.class.getClass()

采用实例:te.getClass()   ,对象调用时,可以使用this.getClass()

定位www.txt

  方法一:String str11 = te.getClass().getResource("www.txt").getFile() ,打印显示:/D:/study/project/bin/com/www/www.txt

     如果想得到一个File类型的文件,使用getFile()方法,将 www.txt 换成 /com/www/www.txt 可得到同样的结果,这说明getResoure()方法是以bin 目录为根目录,可以定位bin目录下的任何一个文件,只不过它是从class文件所在目录开始向上找。(我试过定位projrct里面的文件,行不通)

  方法二:String str = te.getClass().getClassLoader().getResource("bin.txt").getPath(); 打印显示:/D:/study/project/bin/bin.txt

  如果要定位www.txt文件,可bin.txt 换成 /com/www/www.txt 即可,同样也是以bin目录为根目录,只不过是从bin目录开始向下找。(同样bin目录以上的不行)

  加了getClassLoader()方法实际上就是把起始目录从class文件目录变成了根目录。

常用方法:

 getResourse( )方法返回的是一个URL类型对象,目前貌似在定位文件上只有getPath()和getFile()方法比较常用。

  如果想得到一个File,File file = new File(te.getClass().getResource("www.txt").toURI())  或

                 new File(te.getClass().getResource("bin.txt").getFile())

 getClassLoader()方法返回的是一个ClassLoader类型对象,他也有getResourse( )方法,相当于多加了一层,后面的都一样。

 getResourceAsStream()方法返回的是一个InputStream类型对象

最新文章

  1. react基础(1)
  2. .Net配置中心-服务端/客户端
  3. js只需5分钟创建一个跨三大平台纯原生APP
  4. $.extend()了解心得
  5. codecademy-command line_filesystem
  6. 【Todo】pthread_key_t 和 pthread_once_t学习
  7. JS多种方法实现随机颜色;
  8. SAE J1708 DS36277 MAX3444, DS75176B
  9. (转)php5中类的学习
  10. JDK环境变量配置及Tomcat安装服务
  11. C++抽象编程·运算符重载与友元函数
  12. KVM之八:快照创建、恢复与删除
  13. zookeeper工作机制
  14. python基础autopep8__python代码规范
  15. iOS 利用高德地图WMS服务
  16. webapi快速开发框架
  17. 用Synoptic Panel自定义基于图形的可视化控件--制作一张剧场售票统计报表
  18. 【转】每个 Linux 新手都应该知道的 10 个命令
  19. 数据库介绍及MySQL安装
  20. zrender源码分析--初探如何画一个圆

热门文章

  1. 查询Oracle表空间使用情况
  2. Android 多分辨率与不同语言适配
  3. SAEJ1757-1-2015(一)
  4. 四十六:数据库之Flask-SQLAlchemy的使用
  5. Git 提交 .gitignore文件
  6. 关于img标签浏览器自带的边框,清除边框的解决方式(即img[src=""] img无路径情况下,灰色边框去除解决方法)
  7. NFA转换为等价的DFA
  8. 一文搞懂HTTP和HTTPS协议
  9. python线程池--threadpool
  10. java中string , StringBuffer , StringBuilder 区别