上一篇 利用反射动态获取当前工程下的文件路径_并打成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