java獲得文件的方法整理

直接放結論:
最佳實踐:Class.class.getResourceAsStream()
理由:可以得到各種各樣的,而且還可以讀取jar包裏的文件。

需要注意的是當用Class類的getResource或者getResourceAsStream的時候如果要取絕對路徑,那麼要加上“/”

如果使用ClassLoader類的這兩個同名的方法,那麼不能加“/”!

  返回 空參數 “/”參數 相對路徑寫法 絕對路徑寫法classLoader的不加/ 是否可以獲得文件 是否可以獲得文件夾
TestPath.class.getResource("") URL 當前類所在的目錄 classes目錄 "1.txt" "/com/luhao/path/1.txt" 可以 可以
TestPath.class.getClassLoader().getResource(""); URL classes目錄 null "com/luhao/path/1.txt" 可以 可以
Class.class.getResourceAsStream() InputStream null null "1.txt" "/com/luhao/path/1.txt" 可以 雖然能得到但不能用
TestPath.class.getClassLoader().getResourceAsStream() InputStream classes目錄的ins null "com/luhao/path/1.txt" 可以 雖然能得到但不能用
System.getProperty("user.dir"); String,獲得工程目錄            
System.getProperty("java.class.path") String,獲得classPath路徑            
new File("").getCanonicalPath(); 工程目錄            
package com.luhao.path;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

/**
 * <p>Title: TestPath.java</p>
 * <p>Description: java獲取文件路徑的各種方法</p>
 * <p>Company: 北京九恆星科技股份有限公司</p>
 *
 * @author luhao
 * @since 2020-03-23 11:25
 */

/**
 * 	返回	空參數	“/”參數	相對路徑寫法	絕對路徑寫法classLoader的不加/	是否可以獲得文件	是否可以獲得文件夾
 * TestPath.class.getResource("")	URL	當前類所在的目錄	classes目錄	"1.txt"	"/com/luhao/path/1.txt"	可以	可以
 * TestPath.class.getClassLoader().getResource("");	URL	classes目錄	null	無	"com/luhao/path/1.txt"	可以	可以
 * Class.class.getResourceAsStream()	InputStream	null	null	"1.txt"	"/com/luhao/path/1.txt"	可以	雖然能得到但不能用
 * TestPath.class.getClassLoader().getResourceAsStream()	InputStream	classes目錄的ins	null	無	"com/luhao/path/1.txt"	可以	雖然能得到但不能用
 * System.getProperty("user.dir");	String,獲得工程目錄						
 * System.getProperty("java.class.path")	String,獲得classPath路徑
 * new File("").getCanonicalPath();	工程目錄
 */
public class TestPath {

    //總結方法一共以下:
    // TestPath.class.getResource(""); 帶/是classes路徑,不帶是當前類所在的包路徑
    // TestPath.class.getClassLoader().getResource(""); 沒有帶/的寫法,直接進入classes路徑
    // System.out.println(System.getProperty("user.dir")); 工程目錄
    // System.out.println(System.getProperty("java.class.path")); 所有的classpath目錄
    // Class.class.getResourceAsStream("/com/luhao/path/TestPath.class"); 從classes目錄取
    // TestPath.class.getResourceAsStream("1.txt"); 相對路徑


    public static void main(String[] args) {
        testClassgetResource();
        testClassLoaderGetResource();
        testClassGetResourceAsStream();
        testClassLoderGetResourceAsStream();
        String property = System.getProperty("user.dir");
        String property1 = System.getProperty("java.class.path");
        System.out.println(property); //工程目錄
        System.out.println(property1); //所有的classpath目錄
        try {
            String canonicalPath = new File("").getCanonicalPath();
            System.out.println(canonicalPath);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static void testClassgetResource(){
        System.out.println("-TestPath.class.getResource(\"\")-");
        URL resource = TestPath.class.getResource("/com/luhao/path/1.txt");//帶/是classes路徑,不帶是當前類所在的包路徑
        System.out.println(resource.getPath());
        URL resource1 = TestPath.class.getResource("1.txt");//帶/是classes路徑,不帶是當前類所在的包路徑
        System.out.println(resource1.getPath());
        URL resource2 = TestPath.class.getResource("");//帶/是classes路徑,不帶是當前類所在的包路徑
        System.out.println(resource2.getPath());
        URL resource3 = TestPath.class.getResource("/");//帶/是classes路徑,不帶是當前類所在的包路徑
        System.out.println(resource3.getPath());
        System.out.println("-TestPath.class.getResource(\"\")end-");
    }

    public static void testClassLoaderGetResource(){
        System.out.println("testClassLoaderGetResource--start");
        URL resource001 = TestPath.class.getClassLoader().getResource("");
        System.out.println(resource001.getPath());
        URL resource002 = TestPath.class.getClassLoader().getResource("/");
        System.out.println(resource002);
        URL resource003 = TestPath.class.getClassLoader().getResource("com/luhao/path/1.txt");
        System.out.println(resource003);
        URL resource004 = TestPath.class.getClassLoader().getResource("com/luhao/path");
        System.out.println(resource004);
    }

    public static void testClassGetResourceAsStream(){
        System.out.println("astream--");
        System.out.println(Class.class.getResourceAsStream(""));//null
        System.out.println(Class.class.getResourceAsStream("/"));//null
        System.out.println(Class.class.getResourceAsStream("1.txt"));
        InputStream ins = Class.class.getResourceAsStream("/com/luhao/path/TestPath.class");//從classes目錄取
        InputStream ins2 = Class.class.getResourceAsStream("/com/luhao/path");//從classes目錄取
        System.out.println(ins);
        byte[] ints = new byte[1024];
        try {
            while(-1 != ins2.read(ints)){
                System.out.println(new String(ints));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("astream--");
    }


    public static void testClassLoderGetResourceAsStream(){
        System.out.println("loder--astream--");
        System.out.println(TestPath.class.getClassLoader().getResourceAsStream(""));
        System.out.println(TestPath.class.getClassLoader().getResourceAsStream("/"));//null
        System.out.println(TestPath.class.getClassLoader().getResourceAsStream("com/luhao/path/1.txt"));
        InputStream ins = TestPath.class.getClassLoader().getResourceAsStream("com/luhao/path/TestPath.class");//從classes目錄取
        InputStream ins2 = TestPath.class.getClassLoader().getResourceAsStream("com/luhao/path");//從classes目錄取
        System.out.println(ins);
        byte[] ints = new byte[1024];
        try {
            while(-1 != ins2.read(ints)){
                System.out.println(new String(ints));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("astream--");
    }

    public static void test1() {

        File f = new File(TestPath.class.getResource("/").getPath());
        System.out.println(f);//E:\Project\test_and_bestpractice\target\classes

        File f2 = new File(TestPath.class.getResource("").getPath());
        System.out.println(f2);//E:\Project\test_and_bestpractice\target\classes\com\luhao\path
    }

    public static void test2() {
        File directory = new File("");//參數爲空
        String courseFile = null;
        try {
            courseFile = directory.getCanonicalPath();
            System.out.println(courseFile);//E:\Project\test_and_bestpractice
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void test3() {
        URL xmlpath0 = TestPath.class.getClassLoader().getResource("");
        System.out.println(xmlpath0);
        URL xmlpath1 = TestPath.class.getClassLoader().getResource("/");
        System.out.println(xmlpath1);
        URL xmlpath = TestPath.class.getClassLoader().getResource("com/luhao/path/TestPath.class");
        System.out.println(xmlpath);//file:/E:/Project/test_and_bestpractice/target/classes/com/luhao/path/TestPath.class
    }

    public static void test4() {
        System.out.println(System.getProperty("user.dir")); //E:\Project\test_and_bestpractice
    }

    public static void test5() {
        System.out.println(System.getProperty("java.class.path"));//classpath 一大堆,所有的classPath
    }

    public static void test6() {
        InputStream ins = Class.class.getResourceAsStream("/com/luhao/path/TestPath.class");
        System.out.println(ins);
    }

    public static void test7() {
        InputStream ins = TestPath.class.getResourceAsStream("1.txt");
        System.out.println(ins);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章