通常我们定位文件都是通过绝对路径进行定位,比如“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类型对象

Java中通过相对路径来定位文件的更多相关文章

  1. java中File的delete()方法删除文件失败的原因

    java中File的delete()方法删除文件失败的原因 学习了:http://hujinfan.iteye.com/blog/1266387 的确是忘记关闭了: 引用原文膜拜一下: 一般来说 ja ...

  2. java中iofile的路径问题,确定一个未知方法所需要的文件路径

    今天遇到一个极其烦躁的问题,一个jar包中的一个方法,要求函数中要求传入一个String类型的参数,用于指示文件所在的路径.但是对于我们来说完全不知道他需要的路径是绝对路径还是相对路径,所以我尝试了很 ...

  3. JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址

    在写java程序时不可避免要获取文件的路径...总结一下,遗漏的随时补上 1.可以在servlet的init方法里 String path = getServletContext().getRealP ...

  4. JAVA中获取项目文件路径

    在java中获得文件的路径在我们做上传文件操作时是不可避免的. web 上运行 1:this.getClass().getClassLoader().getResource("/" ...

  5. JAVA中的I/O流以及文件操作

    一 JAVA语言中主要通过流来完成IO操作. 流:计算机的输入输出之间流动的数据序列,也是类的对象.java中的流方式就像是建立在数据交换源和目的之间的一条通信路径. 数据源:计算机中的数据源是指可以 ...

  6. linux环境下在springboot项目中获取项目路径(用于保存文件等)

    //application.properties中设置:(file.path=static/qrfile/)//保存到static文件夹下的qrfile目录@Value("${file.pa ...

  7. java中的绝对路径和相对路径

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:/xyz/test.txt 代表了test.txt文件的绝对路径.http://www ...

  8. java中转义字符和路径符

    来源于:http://blog.csdn.net/u011479200/article/details/69062343 在Java的实际开发中,经常会遇填写一个文件的相对路径或者是绝对路径的问题,对 ...

  9. Java中-classpath和路径的使用

    javac -classpath的使用: javac:如果当前你要编译的java文件中引用了其它的类(比如说:继承),但该引用类的.class文件不在当前目录下,这种情况下就需要在javac命令后面加 ...

随机推荐

  1. android 播放音乐媒体文件(一)

    Audio formats and codecs Format / Codec Encoder Decoder Details Supported File Type(s) / Container F ...

  2. orcal 中的orcal用法

    ROWID是数据的详细地址,通过rowid,Oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...

  3. Activity 怎么和 Service 绑定,怎么在 Activity 中启动自己对应的 Service?

    Activity 通过 bindService(Intent service, ServiceConnection conn, int flags)跟 Service 进行绑定,当绑定成功的时候 Se ...

  4. emqtt emq 的主题访问控制 acl.conf

    访问控制(ACL) EMQ 消息服务器通过 ACL(Access Control List) 实现 MQTT 客户端访问控制. ACL 访问控制规则定义: 允许(Allow)|拒绝(Deny) 谁(W ...

  5. wpf的控件style

    前段时间一直在做wpf的UI开发,每次想做些控件style定制的时候都很头疼 很多控件不知道他的controltemplate是什么样的 为了方便大家写style 特别奉上wpf的style大全 从此 ...

  6. 4.1 primitive and reference values

    ECMAScript variables may contains two different types of data: primitive values and reference values ...

  7. Python学习之表的介绍

    9.4 表的介绍 存储引擎 数据的存储方式就是存储引擎,引擎不同,数据的存储方式就不同 MySQL中比较重要的引擎: InnoDB:mysql5.6以上,默认的存储方式 ​ 支持 transactio ...

  8. nginx配置thinkphp项目(nginx下去掉index.php)

    server { listen 80; server_name xxxxx; root "/www/public"; location / { index index.html i ...

  9. codeblocks无法识别的16位程序解决方法

    被codeblocks心态搞崩了,分享一下经验给大家,具体就是无法运行编译好的程序,还有就是调试功能没法用. 查了很多资料,自己搞了一个终极解决方法:1卸载codeblocks,2打开我的电脑,全盘搜 ...

  10. Ubuntu环境配置机器安装驱动

    ubuntu_environment_config.md thead > tr > th { text-align: left; border-bottom: 1px solid; } t ...