通常我们定位文件都是通过绝对路径进行定位,比如“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. layui学习地址

    --layui学习地址 ,相当之好用,非常感谢为我们工作和学习提供方便的才子们,谢谢~https://www.layui.com/demo/layim.html

  2. 查看进程CPU、内存使用情况

    本文介绍通过ps和top查看进程的cpu.内存等使用情况. 1.ps命令 1.1 概览 ps命令相关参数定义: -e 或者-A,选择所有的进程: -L 显示线程: -o 自定义输出格式: 输出格式: ...

  3. 浏览器端-W3School-HTML:HTML DOM Area 对象

    ylbtech-浏览器端-W3School-HTML:HTML DOM Area 对象 1.返回顶部 1. HTML DOM Area 对象 Area 对象 Area 对象代表图像映射的一个区域(图像 ...

  4. 阶段3 2.Spring_06.Spring的新注解_6 Qualifier注解的另一种用法

    复制上面的数据源到下面改改名字 现在就是有两个数据源 创建一个eesy02的数据库 找到sql语句再创建Account表 现在就相当于有连个库一个eesy一个是eesy02这连个库. account里 ...

  5. 阶段3 2.Spring_03.Spring的 IOC 和 DI_3 spring基于XML的IOC环境搭建和入门

    创建新项目 修改为jar包的方式 把上一个工程内的代码 java下的com复制过来 由于配置文件没有,所以一运行就会报错 factory文件夹整个删除 dao的实现类 这里删除 测试类保留这两行代码 ...

  6. python字符串判断

    s为字符串 s.isalnum() 所有字符都是数字或者字母 s.isalpha() 所有字符都是字母 s.isdigit() 所有字符都是数字 s.islower() 所有字符都是小写 s.isup ...

  7. Jenkins Pipeline 语法

    Pipeline语法 先讲Declarative Pipeline,所有声明式管道都必须包含在pipeline块中: 123 pipeline { /* insert Declarative Pipe ...

  8. mysql用sql语句创建表和数据 设置字符编码为utf-8

    简而言之 CREATE DATABASE xx CHARACTER SET utf8 COLLATE utf8_general_ci; USE xx; ),qname ) ) ) ) )); ) ,t ...

  9. MYSQL5.5 linux安装

    1.常规的编译安装MYSQL 此种方法使用所有Mysql5.0 - 5.1 系列产品 比较常规的编译方式 2. 采用cmake 方式编译安装Mysql 3.二进制安装方式 免编译安装MYSQL 4.如 ...

  10. SpringCloud 和 Dubbo 有哪些区别?

    首先,他们都是分布式管理框架.    dubbo 是二进制传输,占用带宽会少一点.SpringCloud是http 传输,带宽会多一点,同时使用http协议一般会使用JSON报文,消耗会更大.    ...