我给你一个方法:用这个方法来取得附件的名字:
 public static String getISOFileName(Part body){
        //设置一个标志,判断文件名从Content-Disposition中获取还是从Content-Type中获取
        boolean flag=true;
        if(body==null){
            return null;
        }
        String[] cdis;
        try{
            cdis=body.getHeader("Content-Disposition");
        }
        catch(Exception e){
            return null;
        }
        if(cdis==null){
            flag=false;
        }
        if(!flag){
            try{
                cdis=body.getHeader("Content-Type");
            }
            catch(Exception e){
                return null;
            }
        }
        if(cdis==null){
            return null;
        }
        if(cdis[0]==null){
            return null;
        }
        //从Content-Disposition中获取文件名
        if(flag){
            int pos=cdis[0].indexOf("filename=");
            if(pos<0){
                return null;
            }
            //如果文件名带引号
            if(cdis[0].charAt(cdis[0].length()-1)=='"'){
                return cdis[0].substring(pos+10,cdis[0].length()-1);
            }
            return cdis[0].substring(pos+9,cdis[0].length());
        }
        else{
            int pos=cdis[0].indexOf("name=");
            if(pos<0){
                return null;
            }
            //如果文件名带引号
            if(cdis[0].charAt(cdis[0].length()-1)=='"'){
                return cdis[0].substring(pos+6,cdis[0].length()-1);
            }
            return cdis[0].substring(pos+5,cdis[0].length());
        }
    }

解决方案 »

  1.   

    调用格式:
      strname= new String(getISOFileName(part).getBytes("ISO-8859-1"),"gb2312");
      

  2.   

    但是当编码不是iso-8859-1时,用
    strname=MimeUtility.decodeText(getISOFileName(part));
    这是javamail提供的解码方法。
    用这两中方法就能册地解决javamail附件的中文问题了。
    方法就是首先用上面的一种方法得到附件的名字,然后创建文件流,然后扑获
    java.io.FileNotFoundException:异常,加入,有异常了,那就用另一种方法在异常处理部分创建文件流,这样就能保证,把附件保存到被地服务器上了。你明白了吗?我就是这样做的,目前为止能处理任何附件。