关于java路径的问题

关于如何获取程序中文件目录的问题:
首先理解2个概念
相对路径: 是相对当前工作(也就是当前文件运行的目录)的目录,也就是class文件的目录;
如果我们在C:\ 下java 运行整个程序,那么就是相对于C盘的,如果在别的路径下运行程序,就是相当于别的路径下的路径
绝对路径:就是固定不变的路径。
如果在程序中写死,那么无论整个程序在哪里运行,都会去系统中,查找路径。(如果没有这个盘符呢?那不就gg了)
所以说我们肯定是不能通过绝对路径,来获取文件。(硬编码形式 肯定是不行的)

我们首先要通过软编码形式 获取软件运行的绝对路径+ 在加上 我们相对于软件运行的绝对路径, 从而获取相对路径,来达成效果

/金山词霸/(相对于金山词霸的)相对路径

所以我们一般只需要获取文件相对于classpath的相对路径就好了

相对路径(相对于文件运行目录,也就是classpath路径)的获取
eclipse工具会自动把src目录下的文件拷贝到classpath目录下,所以 也是相对于src的路径。
src 也就是相当于当前项目的classpath路径。

小知识点: / 斜杠表示根目录, . 小数点表示当前路径 .. 2个小数点表示返回上层目录

这里写图片描述

获取文件相对路径的2个通用方法:

第一种方式:通过类加载器来获取文件路径   默认路径是classpath的路径(根目录)。  
    类加载主要是用来加载类的,也就是加载class(字节码)文件的,字节码文件都可以加载,其他文件肯定也是可以加载的。

    //测试 默认路径
    URL path = ClassPathTest.class.getClassLoader().getResource(".");  //获取当前路径
    System.out.println(path.getName());  //  E:/workspace/day05/bin/  是classpath的路径

    (test1.txt文件的路径为 项目名\src\cn\java\test\test1.txt;类TestAction所在包的第一级目录位于src目录下)
    InputStream in = ClassPathTest.class.getClassLoader().getResourceAsStream("cn/java/test/test1.txt");

    (test2.txt文件的路径为 项目名\src\test2.txt;类TestAction所在包的第一级目录位于src目录下)
    InputStream in = ClassPathTest.class.getClassLoader().getResourceAsStream("test2.txt");

    使用ClassLoader时需要主要,文件名不能以/ 斜杠开头, 他默认的路径就是classpath根目录,/斜杠表示根目录,重复了。



第二种方式:通过类来获取文件路径  其实也是通过类加载器来获取路径的        默认路径是当前类所在的路径。  

    //测试 默认路径
    URL path2 = ClassPathTest.class.getResource(".");  //获取当前路径
    System.out.println(path2.getName());  //  E:/workspace/day05/bin/cn/java/test/  是当前类所在的路径

    (test1.txt文件的路径为 项目名\src\cn\java\test\test1.txt;类TestAction所在包的第一级目录位于src目录下)
    InputStream in = ClassPathTest.class.getResourceAsStream("test1.txt");   //直接省略包名了。

    (test3.txt文件的路径为 项目名\src\cn\java\test\path\test3.txt;类TestAction所在包的第一级目录位于src目录下)
    CLassPathTest  这个类存在于项目名\src\cn\java\test\   包下。
    InputStream in = ClassPathTest.class.getClassLoader().getResourceAsStream(".path/test3.txt");   
    使用.. 返回上层目录 只适合通过第二种方式(通过类)获取文件;第一种方式不适用。                                                                                   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值