利用反射动态获取当前工程下的文件路径_解决中文路径乱码问题

上一篇 利用反射动态获取当前工程下的文件路径_并打成jar包 中:

如果有中文路径的话会出现乱码,今天使用的时候发现了这个问题。重新解决了,这个问题,之前获取的路径中有些文件分隔符不是windows的文件分割符,这样有时候通过复制粘贴到win搜索框中不能解析,于是把生成的文件路径统一转换成Windows的形式:

代码:

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;  

public class FilePath
{    
    private static String binPathToSrcPath(Class class1) throws UnsupportedEncodingException
    {
        String packagePath=FilePath.getBinPackagePath(class1);
//        System.out.println(packagePath);
        int lastindex=packagePath.lastIndexOf("bin");
        String before=packagePath.substring(0,lastindex);
//        System.out.println(before);
        String after=packagePath.substring(lastindex+3);
//        System.out.println(after);
//        System.out.println(before+"src"+after);
//        System.out.println();
        return before+"src"+after;
    }
    private static String ToWindowsPath(String path)
    {
        return path.replace('/', '\\');
    }
    //当前的工程下的路径    
    public static String getProjectPath() throws UnsupportedEncodingException    
    {    
        String projectPath=URLDecoder.decode(System.getProperty("user.dir").toString()+"\\","utf-8");
        if(projectPath.contains("/"))//如果不是Windows的地址格式
        {
            System.out.println("哈哈");
            return ToWindowsPath(projectPath);
        }
        return   projectPath;
    }    
    public static String getProjectPath(Class class1) throws UnsupportedEncodingException    
    {    
    //获取src路径  
        String path = class1.getClassLoader().getResource("").toString();    
        // System.out.println("编译后src路径:"+path);//file:/D:/dev/workspase2Spring/XMLreader/bin/    
        //文件定位到src路径  
        File file=new File(path);//定位到这个目录下面  
        path=file.getParent();//返回src路径的父路径,也就是工程路径  
//      结果 path=file:\D:\dev\workspase4javaBasis\FilePath  
        int m = path.indexOf("\\");// file:\<----点位到file:后面的反斜杠    
        path = path.substring(m + 1);// 从反斜杠之后的一位开始截取字符串    
        // System.out.println("编译后src路径:"+path);    
        return URLDecoder.decode(path,"utf-8");    
    }
    public static String getSrcPath() throws UnsupportedEncodingException
    {
        return URLDecoder.decode(System.getProperty("user.dir").toString()+"\\src\\","utf-8");
    }
  //编译之后src下的文件路径,根据工程路径拼接    
    public static String getBinPath() throws UnsupportedEncodingException    
    {    
        return URLDecoder.decode(System.getProperty("user.dir").toString()+"\\bin\\","utf-8");    
    }
    //根据反射获取编译之后的src下面的文件路径    
    public static String getBinPath(Class class1) throws UnsupportedEncodingException    
    {    
        String path = class1.getClassLoader().getResource("").toString();    
        // System.out.println("编译后src路径:"+path);//file:/D:/dev/workspase2Spring/XMLreader/bin/    
        int m = path.indexOf("/");// file:/<----点位到file:后面的反斜杠    
        path = path.substring(m + 1);// 从反斜杠之后的一位开始截取字符串    
        // System.out.println("编译后src路径:"+path);
        path =URLDecoder.decode(path,"utf-8");//转码,不然中文乱码
        if(path.contains("/"))
        {
//            System.out.println("hh ");
            return ToWindowsPath(path);
        }
        return path;    
    }
    public static String getSrcPackagePath(Class class1) throws UnsupportedEncodingException
    {
        return binPathToSrcPath(class1);
    }
  //根据反射获取编译之后包下面的文件路径    
    public static String getBinPackagePath(Class class1) throws UnsupportedEncodingException    
    {    
    //获取包路径  
        String thisPackagePath=class1.getResource("").toString();    
//        System.out.println("路径:"+thisPackagePath);    
        int m=thisPackagePath.indexOf("/");//去掉前面的file:    
        thisPackagePath=thisPackagePath.substring(m+1);    
//        System.out.println("路径:"+thisPackagePath);
        thisPackagePath=URLDecoder.decode(thisPackagePath,"utf-8");
        if(thisPackagePath.contains("/"))
        {
//            System.out.println("哈哈");
            return ToWindowsPath(thisPackagePath);
        }
        return thisPackagePath;//返回当前包返回的路径。    
    }  
  
//    public static void main(String[] args) throws UnsupportedEncodingException  
//    {  
//        System.out.println(FilePath.getProjectPath(FilePath.class));  
//    }  
} 

测试:

import java.io.UnsupportedEncodingException;
import com.lan.filepath.FilePath;

public class TestFilePath
{
	public static void main(String[] args) throws UnsupportedEncodingException
	{
		System.out.println("工程路径               :"+FilePath.getProjectPath());
		System.out.println("工程路径               :"+FilePath.getProjectPath(TestFilePath.class));
		System.out.println("src目录               :"+FilePath.getSrcPath());
		System.out.println("bin目录               :"+FilePath.getBinPath());
		System.out.println("bin目录               :"+FilePath.getBinPath(TestFilePath.class));
		System.out.println("bin下面的包目录:"+FilePath.getBinPackagePath(TestFilePath.class));
		System.out.println("src下面的包目录:"+FilePath.getSrcPackagePath(TestFilePath.class));
	}
}

运行结果:

工程路径               :C:\Users\Administrator\Desktop\学习8\java\笔记\javaIO\coreJava\
工程路径               :C:\Users\Administrator\Desktop\学习8\java\笔记\javaIO\coreJava
src目录               :C:\Users\Administrator\Desktop\学习8\java\笔记\javaIO\coreJava\src\
bin目录               :C:\Users\Administrator\Desktop\学习8\java\笔记\javaIO\coreJava\bin\
bin目录               :C:\Users\Administrator\Desktop\学习8\java\笔记\javaIO\coreJava\bin\
bin下面的包目录:C:\Users\Administrator\Desktop\学习8\java\笔记\javaIO\coreJava\bin\com\lan\dataoutputstream\
src下面的包目录:C:\Users\Administrator\Desktop\学习8\java\笔记\javaIO\coreJava\src\com\lan\dataoutputstream\

jar包百度云:

链接:https://pan.baidu.com/s/1L1BdAY5AditpoqfKVBpRuQ 密码:kmcy



你可能感兴趣的:(java)