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

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

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

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

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

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

java 进入d盘 java怎么进入程序所在目录_java

获取文件相对路径的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");   
    使用.. 返回上层目录 只适合通过第二种方式(通过类)获取文件;第一种方式不适用。