Java获取文件路径及路径乱码问题

System.getProperty(“user.dir”)
构造:File(path)
构造:FileInputStream(“path”)
XXX.class.getResource("").getPath()
XXX.class.getClassLoader().getResource("").getPath()
(以下演示均为Windows系统)
相对路径:src/test/resources/test.txt
绝对路径:D:\glearning\my_opensource\somproject\src\main\resources\test\test.txt
“.”符号:java文件所在的当前目录(编译后是.class文件所在的当前目录)
“…”符号:java文件所在的上一级目录(编译后.class文件的上一级目录)
“/”符号:以/开头的,在URL类中表示项目的根路径(maven编译后就是target目录的位置)。

  1. System.getProperty(“user.dir”)
    表示当前用户目录,即jvm调用目录
  2. File(path)与FileInputStream(path)

java获取项目路径中文乱码

解决方法

import java.io.UnsupportedEncodingException;  
import java.net.URI;  
import java.net.URL;  
import java.net.URLDecoder;  
  
public class Test01 {  
  
    public static void main(String[] args) {  
        getPathMethod01();  
        getPathMethod02();  
        getPathMethod03();  
        getPathMethod04();  
    }  
    private static String getPathMethod01(){  
        String p = System.getProperty("user.dir");  
        System.out.println("方法一路径:"+p);  
        //方法一路径:E:\test\test04练  习
        return p;  
    }  
      
    private static String getPathMethod02(){  
        URL url= Test01.class.getResource("");  
        String p = url.getPath();  
        System.out.println("方法二路径:"+p);  
		//方法二路径:/E:/test/test04%e7%bb%83%20%20%e4%b9%a0/bin/com/fei/
        try {  
            System.out.println("方法二解码路径:"+URLDecoder.decode(p, "UTF-8"));  
			//方法二解码路径:/E:/test/test04练  习/bin/com/fei/
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  
        return p;  
    }  
      
    private static String getPathMethod03(){  
        URL url= Test01.class.getResource("/");  
        String p = url.getPath();  
        System.out.println("方法三路径:"+p); 
		//方法三路径:/E:/test/test04%e7%bb%83%20%20%e4%b9%a0/bin/
        try {  
            System.out.println("方法三解码路径:"+URLDecoder.decode(p, "UTF-8"));  
			//方法三解码路径:/E:/test/test04练  习/bin/
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  
        return p;  
    }  
    private static String getPathMethod04(){  
        try {  
            URI uri = Test01.class.getResource("/").toURI();  
            String p = uri.getPath();  
            System.out.println("方法四路径:"+p);  
			//方法四路径:/E:/test/test04练  习/bin/
            return p;  
        } catch (Exception e) {  
            e.printStackTrace();  
            throw new RuntimeException(e);  
        }  
    }  
}  

通过看代码和运行结果可以看到,用url.getPath()获取到的路径被utf-8编码了,用URLDecoder.decode(p, “UTF-8”)即可解码。
推荐使用方法四。

你可能感兴趣的:(java,java,开发语言,后端)