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()
  • 相关阅读:
    HDU 1124 Factorial
    hdu 1690 Bus System
    hdu 1113 Word Amalgamation
    POJ 2482 Stars in Your Window
    hdu 1385 ZOJ 1456 Minimum Transport Cost(经典floyd)
    hdu 1907 John
    VMware 虚拟机 安装 UBuntu 9.10 命令模式转换成窗口模试
    #pragma CODE_SEG __NEAR_SEG NON_BANKED详解
    Ubuntu 下Hadoop 伪分布式 hadoop0.20.2.tar.gz 的安装
    文件拷贝代码以及疑问
  • 原文地址:https://www.cnblogs.com/dudefu/p/5307729.html
Copyright © 2011-2022 走看看