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”)即可解码。
推荐使用方法四。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值