java获取当前程序(或类文件)所在目录

        有些时候我们在程序中会生成一些结果信息,并期望将结果信息保存到本地路径的文件中;又或是程序需要读取一些信息,这些信息来自本地路径中的某个文件。java程序中路径可以由程序以及特定需求来决定,通常可以选择用户主目录(可以由System.getProperty("user.home")获取)、当前程序(或类文件)所在的目录(或上下级目录)、或者其他指定的目录。

        当希望在当前程序(或类文件)所在的目录(或上下级目录)中读取或写入文件时,首先需要获得相应的路径。由于使用IDE(这里使用Eclipse)运行程序与使用jar包运行程序时获取的路径结果有些不同,本文主要记录了以这两种方式运行程序时获取当前路径的方法。

        获取当前程序(或类文件)所在的目录可以用以下3个方法(可能还有其他方法,后续会逐步添加):

        1、使用File类提供的方法来获取当前路径

        2、使用Class类的getResource("").getPath()获取当前.class文件所在的路径

        3、由System.getProperty("user.dir")获取当前程序的根目录

        以下是以两种方式运行程序(使用Eclipse运行与使用jar包运行)时这些方法的使用情况(Eclipse中测试项目的根目录为E:\EclipseWorkspace\FileTestProject,jar包所在的路径为:H:\FileTestProject):

        (附:项目的包层次结构如下)

        

java获取当前程序(或类文件)所在目录_第1张图片

 


        1、使用File类提供的方法来获取当前路径:

        File directory = new File(""); //实例化一个File对象。参数不同时,获取的最终结果也不同

        directory.getCanonicalPath(); //获取标准路径。该方法需要放置在try/catch块中,或声明抛出异常

        directory.getAbsolutePath(); //获取绝对路径。

        我们来看一下实例化File时所使用的不同参数会导致的不同结果:

  • 参数为"":       

        File directory = new File("");

        directory.getCanonicalPath(); //eclipse中运行为:E:\EclipseWorkspace\FileTestProject,jar包运行为:H:\FileTestProject

        directory.getAbsolutePath(); //eclipse中运行为:E:\EclipseWorkspace\FileTestProject,jar包运行为:H:\FileTestProject

  • 参数为".":

        File directory = new File(".");

        directory.getCanonicalPath(); //eclipse中运行为:E:\EclipseWorkspace\FileTestProject,jar包运行为:H:\FileTestProject

        directory.getAbsolutePath(); //eclipse中运行为:E:\EclipseWorkspace\FileTestProject\. ,jar包运行为:H:\FileTestProject\.

  • 参数为"..":

        File directory = new File("..");

        directory.getCanonicalPath(); //eclipse中运行为:E:\EclipseWorkspace,jar包运行为:H:\

        directory.getAbsolutePath(); //eclipse中为:E:\EclipseWorkspace\FileTestProject\.. ,jar包运行为:H:\FileTestProject\..

  • 参数为"./src":

        File directory = new File("./src");

        directory.getCanonicalPath(); //eclipse中为:E:\EclipseWorkspace\FileTestProject\src,jar包运行为:H:\FileTestProject\src

        directory.getAbsolutePath(); //eclipse中为:E:\EclipseWorkspace\FileTestProject\.\src,jar包运行为:H:\FileTestProject\.\src

 

        综上,结合API文档可以看到,getCanonicalPath()方法其实是先调用了getAbsolutePath(),然后将返回结果处理为描述符合宿主系统路径命名规范的String(去掉了路径中多余的"."、".."等)。实例化File对象时,也可以自己使用参数"/"或"\\"等试试,其他情况也可以参照API中的构造函数,例如:File(String parent, String child)


        2、使用Class类的getResource("").getPath()获取当前.class文件所在的路径:

  • 参数为"":

        String path = getClass().getResource("").getPath();

        /*eclipse中为:/E:/EclipseWorkspace/FileTestProject/bin/fileTest/,jar包运行报错(可能是由于jar包为一个整体了无法给出路径)*/

  • 参数为"/":

        String path = getClass().getResource("/").getPath();

        /*eclipse中为:/E:/EclipseWorkspace/FileTestProject/bin/,jar包运行报错(可能是由于jar包为一个整体了无法给出路径)*/

  • 参数为"/fileTest":

        String path = getClass().getResource("/fileTest").getPath();

        /*eclipse中为:/E:/EclipseWorkspace/FileTestProject/bin/fileTest,jar包运行报错(可能是由于jar包为一个整体了无法给出路径)*/

 

        附:可以使用Class类的getResource("")以及getResourceAsStream("")方法来获取项目中的资源文件,具体的使用方法可以参考java使用getResource("")、getResourceAsStream("")获取项目中的资源文件


        3、由System.getProperty("user.dir")获取当前程序的根目录:

        System.getProperty("user.dir");

        /* eclipse中运行为:E:\EclipseWorkspace\FileTestProject,jar包运行为:H:\FileTestProject */

 

 

你可能感兴趣的:(java获取当前程序(或类文件)所在目录)