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