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("");URLclasses目录null"com/luhao/path/1.txt"可以可以
Class.class.getResourceAsStream()InputStreamnullnull"1.txt""/com/luhao/path/1.txt"可以虽然能得到但不能用
TestPath.class.getClassLoader().getResourceAsStream()InputStreamclasses目录的insnull"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);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值