注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

千鸟

本blog所有日志均系原创 转载请注明出处

 
 
 

日志

 
 

java 方便的处理路径  

2007-06-09 17:31:11|  分类: J2SE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近在写的插件,对文件读写的时候要对路径进行统一而准确的处理

发现了一些问题: 用的最多的路径获取方式 getClass().getResoure(“参数”) 获得的路径返回的是这个样子:file:/c:/adaf/dfa”以“file”开头的路径。如果是在打包在jar里获得的路径就更麻烦了:“jar:file:c:/adaf/afa.jar!/dfa”

有的时候还涉及到中文路径乱码。

这个时候程序的路径定位就比较麻烦了

我的解决办法是:

1.首先对URL路径格式反编码成“utf-8”java.net.URLDecoder.decode(filename, "UTF-8");

2.去掉路径里的file 或者 jar

3.去掉空格将路径中的空格ascii码“%20”用unicode码”/ “代替

4.将windows下路径的”\\“通通替换成”/“

5.提升路径。如将“c:/aaa/bbb/ccc.jar/df” 输入提升的层次,如2,就变成了“c:/aaa/bbb/”

下面是这个程序的用法介绍

MainPath mainpath=new MainPath("/")   //参数可以用: "/"是包的最上层路径; "../"类所在文件夹的上一层;"/image/gg.gif"这个是最准确的定位方式

mainpath.getMainPath();获得的路径和getClass().getResoure(“参数”)层次相同,但是路径被过滤了一下,getClass().getResoure(“参数”)报错说找不到的路径,现在却可以用了。

mainpath.getProjectPath(int steps); 参数指获得路径相对 mainpath.getMainPath();提升多少层



package com.soulnew.util;


import com.soulnew.Exception.ParameterNullException;
import java.io.UnsupportedEncodingException;
import java.net.URL;


/**
 *
 * @author soulnew@gmail.com
 * @ blog:     http://souljava.blog.163.com
 */
/*
 MainPath used for set the main path of the program
 */
public class MainPath {
   
    String MainPath,ProjectPath;
    public MainPath(String filename) {
        URL path=getClass().getResource(filename);
        if(path==null){
            return;
        }
        this.setMainPath(path.toString());
    }
    public MainPath() {
       
            java.net.URL path = getClass().getResource("/");
            this.MainPath = path.toString();
       
    }
    public void setMainPath(String MainPath) {
        this.MainPath = MainPath;
    }
   
    public void setProject(String ProjectPath) {
        this.ProjectPath = ProjectPath;
    }
   
    public String getMainPath() {
        MainPath=this.getStringUTF8(MainPath);
        MainPath=this.changeSpace(MainPath);
        MainPath=this.delHead(MainPath);
        return MainPath;
    }
   
    public String getProjectPath(int step){
        ProjectPath=this.getMainPath();
        ProjectPath=getLastStep(ProjectPath,step);
        return ProjectPath;
    }
    public String getProjectPath(){
        return this.getMainPath();
    }
   
    /*get the last step of the path
     */
    public String getLastStep(String path,int step){
        if(step==0)
            return path;
        else{
            if(path.indexOf("/")!=-1){
                return getLastStep(path.substring(0,path.lastIndexOf("/")),--step);
            }else if(path.indexOf("\\")!=-1){
                return getLastStep(path.substring(0,path.lastIndexOf("\\")),--step);
            }else{
                return path;
            }
        }
    }
   
   
    /*
     change String encode to UTF-8
     */
    public static String getStringUTF8(String filename){
        try {
         
        // this.setMainPath(java.net.URLDecoder.decode(path.toString(), "UTF-8"));
            filename = java.net.URLDecoder.decode(filename, "UTF-8");
         // filename=
         // StringBuffer sb=new StringBuffer(filename);
          //filename=sb.toString();
        } catch (UnsupportedEncodingException ex) {
            ex.printStackTrace();
        }
        return filename;
    }
   
    /*
     change %20 to unicode \
     */
    public static String changeSpace(String string){
        StringBuffer sb=new StringBuffer(string);
        int pos=sb.indexOf("%20");
        while(pos!=-1){
            sb.replace(pos, pos+3, "\ ");
            pos=sb.indexOf("%20");
        }
        return sb.toString();
    }
    /*
     get the path with the begin "file:"
     */
    public static String delHead(String filepath){
        if(filepath==null)
            System.out.print("del head");
        if(filepath.indexOf("file:")!=-1){
           
            filepath=filepath.substring(filepath.indexOf("file:")+6, filepath.length());
        }
        return filepath;
    }
    public static void main(String args[]){
       // MainPath mp=new MainPath("/images/gif.gif");
       // MainPath mp=new MainPath();
        MainPath mp=new MainPath("/");
        System.out.print(mp.getMainPath());
        System.out.print("\nproget:\n");
        System.out.print(mp.getProjectPath(1));
       
    }
}


  评论这张
 
阅读(615)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017