直接放結論:
最佳實踐: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);
}
}