zoukankan      html  css  js  c++  java
  • java项目获取文件路径总结

     

    目录(?)[+]

     
    java获取文件路径的方式比较多,总结可能有疏漏。
    

    1、java.lang.System.getProperty(String key)

    System.getProperty("user.dir")这个方法的作用可以获取当前工程的根目录。
    ![我的一个项目](//img-blog.csdn.net/20160322141415562)
    

    比如获取上图中项目的根目录:C:UsersAdministratorDesktopDictionary;利用这个方法,不管你的项目放在哪里,都已获取到当前的根目录。 
    如果你需要获取当前项目的其他属性,比如jdk版本,运行系统版本等,利用System.out.println(System.getProperties())输出所有属性,查看哪些是你所需要的。 
    所以,如果我们要获取上图中images文件里的文件,我们可以通过System.getProperty(“user.dir”)+”\images\user.jpg”)获取文件路径(双斜杠因为””在java中转义字符,所以”\”才表示””),输出后得到: 
    C:UsersAdministratorDesktopDictionaryimagesuser.jpg。

    2、java.io.File.File(String pathname)

    
     1. 第一种
    
            File directory = new File("");//设定为当前文件夹
            System.out.println(directory.getCanonicalFile());//返回类型为File
            System.out.println(directory.getCanonicalPath());//获取标准的路径  ,返回类型为String
            System.out.println(directory.getAbsoluteFile());//返回类型为File
            System.out.println(directory.getAbsolutePath());//获取绝对路径,返回类型为String
    
    输出:
    
            C:UsersAdministratorDesktopDictionary
            C:UsersAdministratorDesktopDictionary
            C:UsersAdministratorDesktopDictionary
            C:UsersAdministratorDesktopDictionary
    
    2、第二种
            File directory = new File(".");//设定为当前文件夹
            System.out.println(directory.getCanonicalFile());//返回类型为File
            System.out.println(directory.getCanonicalPath());//获取标准的路径  ,返回类型为String
            System.out.println(directory.getAbsoluteFile());//返回类型为File
            System.out.println(directory.getAbsolutePath());//获取绝对路径,返回类型为String
    
    输出:
    
            C:UsersAdministratorDesktopDictionary
            C:UsersAdministratorDesktopDictionary
            C:UsersAdministratorDesktopDictionary.
            C:UsersAdministratorDesktopDictionary.
    
    3、第三种
    
            File directory = new File("..");//设定为当前文件夹
            System.out.println(directory.getCanonicalFile());//返回类型为File
            System.out.println(directory.getCanonicalPath());//获取标准的路径  ,返回类型为String
            System.out.println(directory.getAbsoluteFile());//返回类型为File
            System.out.println(directory.getAbsolutePath());//获取绝对路径,返回类型为String
    
    输出:
    
            C:UsersAdministratorDesktop
            C:UsersAdministratorDesktop
            C:UsersAdministratorDesktopDictionary..
            C:UsersAdministratorDesktopDictionary..
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    对于getCanonicalPath()函数,“.”就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹 
    对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径

    对于String java.io.File.getPath()这个方法:

            File directory = new File("");
            System.out.println(directory.getPath()); //输出给定的路径字符串
            File directory = new File(".");
            System.out.println(directory.getPath()); //输出给定的路径字符串
            File directory = new File("..");
            System.out.println(directory.getPath()); //输出给定的路径字符串
            File directory = new File("imagesuser.jpg");
            System.out.println(directory.getPath()); //输出给定的路径字符串
    
    分别输出:
    
            (空)
            .
            ..
            imagesuser.jpg
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    说明给什么,File.getPath()输出什么。

    3 基于classpath 获取资源有以下三种方式:

    URL url = this.getClass().getResource("resource_name");
       URL url = this.getClass().getClassLoader().getResource("resource_name");
       URL url = Thread.currentThread().getContextClassLoader().getResource("resource_name");
    
    注意:this不能在main函数中使用,main函数中只能这样:
    URL url = Test.class.getClassLoader().getClass().getResource("/images/user.jpg"); 
    URL url = Test.class.getClassLoader().getClass().getClassLoader().getResource("/images/user.jpg");
    否则会报错“Cannot use this in a static context”。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    第一种是通过Class类实例的getResource方法,后面两种都是ClassLoader类实例的getResource方法。Class.getResource()也是委托ClassLoader的getResource方法来实现的.所以,先说ClassLoader的getResource方法:

    (1) ClassLoader的getResource方法参数不能以”/”开头,而且必须是从根目录开始查找, 
    这里的根目录是classpath中的目录以及包含引用的jar.比如eclipse的默认将每个工程中Java类运行时的classpath设置为: 工程根目录/bin目录 以及 工程中引用的所有jar包.在编译的时候,将src目录结构拷贝到bin目录中,将java类编译成class文件后连同其他文件按src中原始目录结构拷贝到bin目录中。 
    假设某个工厂的classpath如下(两个): 
    /bin 
    log4j-1.2.16.jar 
    其中log4j-1.2.16.jar中有目录结构orgapachelog4j (与包org.apach.log4j) 对应,那么 查找bin目录下的test.txt文件使用下面方法ClassLoader.getResource(“test.txt”);注意这里ClassLoader.getResource方法的入参必须是从根目录开始查找,这里根目录就是classpath中的/bin。找 bin/level1/level2/ll.txt文件必须使用ClassLoader.getResource(“level1/level2/ll.txt”); //注意查找必须基于根目录(/bin),并且目录结构也要写对,不能用/开头。

    (2) Class.getResource() 略有不同:

    (a)可以通过相对路径查找,相对的是 当前实例的Class文件所在的包;
    (b)也可以和ClassLoader.getResource()一样从根目录(classpath)开始查找,
    但是此时传递给Class.getResource()的参数必须要用 "/" 开头,
    否则就是相对查找了((a)中的情况)
    其实,这种代码就是将/去掉,然后调用ClassLoader.getResource()
  • 相关阅读:
    2018福大软工实践第二次结对作业
    2018福大软工实践第一次结对作业
    《构建之法》第三章读书笔记
    《构建之法》第八章读书笔记
    Beta版本冲刺前准备
    项目测评
    Alpha版本事后诸葛亮
    Alpha版本冲刺(十)
    Alpha版本冲刺(九)
    Alpha版本冲刺(八)
  • 原文地址:https://www.cnblogs.com/dudefu/p/5307729.html
Copyright © 2011-2022 走看看