Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)

1、写入Excel,并加密压缩、不保存文件

String dcxh = String.format("%03d", keyValue);

String folderFileName="Q10152900H1I002016060071.zip";

File file=new File(folderFileName+".xls");
   fos=new FileOutputStream(file);
   //设置sheet 页中文名字
      workbook.setSheetName(0, "身份信息");

workbook.write(fos);//写入文件
      workbook.close();
      fos.flush();
      fos.close();

/*将生成的Excel文件压缩成同名的zip 文件   加密密码:dddd*/
   String zipFileName=folderFileName+".zip";

zipFile=StringOperator.addFilesWithAESEncryptionByStream(file,zipFileName,zippassword);//通过文件流加密

response.setCharacterEncoding("utf-8");
   response.setContentType("application/octet-stream");
   response.addHeader("Content-disposition", "attachment;filename="+folderFileName+".zip");
   is=new FileInputStream(zipFile.getFile());
   bis=new BufferedInputStream(is);
   os=response.getOutputStream();
   bos=new BufferedOutputStream(os);
   
   int read=0;
   byte[] bytes=new byte[8072];
   while ((read=bis.read(bytes, 0, bytes.length))!=-1) {
    bos.write(bytes, 0, read);
   }
   bos.flush();

2、加密码压缩并保存源文件和压缩文件

        String realPath = request.getSession().getServletContext().getRealPath("/");
        
//         String realPath=getClass().getResource("/").getFile().toString();

String nowDateStr=DateUtils.getSysDateTime("yyyyMM");//当前日期

String folderFileName=orgcode+nowDateStr+dcxh+"1";

/**根据路径**/
   String filePath=rootPath+"/"+folderFileName;
   StringOperator.deletePath(filePath);
   File file=new File(filePath);
   file.delete();
   FileUtil.mkDirs(filePath);
   String fileName=filePath+"/"+folderFileName+".xls";
   fos=new FileOutputStream(fileName);

workbook.setSheetName(0, "身份信息");

workbook.write(fos);//写入文件
      workbook.close();
      fos.flush();
      fos.close();

/*将生成的Excel文件压缩成同名的zip 文件   加密密码:ddddd*/
   String zipFileName=folderFileName+".zip";

//在对应Excel文件的同目录下生成对应的同名的zip压缩文件
   //StringOperator.zip(fileName, filePath+File.separator+zipFileName);//未加密
   StringOperator.addFilesWithAESEncryption(fileName,zipFileName,filePath,zippassword);//加密

response.setCharacterEncoding("utf-8");
   response.setContentType("application/octet-stream");
   response.addHeader("Content-disposition", "attachment;filename="+folderFileName+".zip");
   is=new FileInputStream(zipFile.getFile());
   bis=new BufferedInputStream(is);
   os=response.getOutputStream();
   bos=new BufferedOutputStream(os);
   
   int read=0;
   byte[] bytes=new byte[8072];
   while ((read=bis.read(bytes, 0, bytes.length))!=-1) {
    bos.write(bytes, 0, read);
   }
   bos.flush();

===============文件操作类===================

package com.chinazyjr.common;

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern;

import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.util.Zip4jConstants;

import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Expand; import org.apache.tools.ant.taskdefs.Zip; import org.apache.tools.ant.types.FileSet; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream;

public class StringOperator {     public StringOperator() {     }     public static void main(String args[]){

     String b="上海市嘉定区新郁路68弄";      String c="(人民币)叁万元整";      String a="23.46";      //System.out.println("dddd="+getDimeConvertPenny(new Double("18989.99").doubleValue()));      //System.out.println("dddd="+getPennyConvertDime(new Double("1019.00").doubleValue()));      double f=2.34;      //if(f==0){      //DecimalFormat format = new DecimalFormat("##0");      String w="23400.33";      String w1="2222.00";      String w2="5000.00";      String w3="60000.00";            System.out.println("endRec=="+ getUpInt(w));      System.out.println("endRec=="+ getUpInt(w1));      System.out.println("endRec=="+ getUpInt(w2));      System.out.println("endRec=="+ getUpInt(w3));

     //System.out.println("endRec=="+GetFindCount("安徽省市庐阳区合瓦路251号1幢1号","合肥"));      String x="安徽省合肥市庐阳区合瓦路251号1幢1号";      String v="合肥";       if(x.indexOf(v)!=-1){        System.out.println("aaaa==");       }      //}       /*int excelDiv=60000;       int recordDiv=3;       for(int i=0;i<recordDiv;i++){     int startRec=excelDiv*i+1;     int endRec=excelDiv*(i+1);     System.out.println("startRec=="+startRec);     System.out.println("endRec=="+endRec);       }       */            }         /**      * 功能:获取整数:例如2222.00为3000      * @param str String      * @return 返回int类型      */     public static int getUpInt(String str) {         int rslt = 0;         if (str == null || str.trim().equals("")) {             return rslt;         }         str = str.trim();         int pos=str.indexOf(".");         String startStr=str.substring(0,pos);        // 5500       //  23300         if(startStr.length()<=3){          rslt=1000;         }         else{          String beginStr=startStr.substring(0,startStr.length()-3);          String endStr=startStr.substring(startStr.length()-3);          if(endStr.equals("000")){           rslt=new Integer(startStr).intValue();          }          else{           Integer upInteger=new Integer(beginStr)+1;           String tempStr=upInteger.toString()+"000";           rslt=new Integer(tempStr).intValue();          }                   }

        return rslt;     }             /**      * 功能:获取整数:例如22.33结果为23,22.00为22      * @param str String      * @return 返回int类型      */     public static int getInt(String str) {         int rslt = 0;         if (str == null || str.trim().equals("")) {             return rslt;         }         str = str.trim();         int pos=str.indexOf(".");         String startStr=str.substring(0,pos);         String endStr=str.substring(pos+1);         if (new Long(endStr)>0) {             rslt=new Integer(startStr).intValue()+1;         }         else{           rslt=new Integer(startStr).intValue();         }         return rslt;     }

        //元转分     public static long getDimeConvertPenny(double dime){         double d = 0;         if(dime!=0){          String dimeStr=String.valueOf(dime);          String[] dimeAry=dimeStr.split("\.");          int len=dimeAry.length;          if(len==1){           d=new Double(dimeStr+"00").doubleValue();          }          else{           int dimePenny=new Integer(dimeAry[1]).intValue();           if(dimePenny==0){            d=new Double(dimeAry[0]+"00").doubleValue();           }           else{            int length=dimeAry[1].length();            if(length==1){             d=new Double(dimeAry[0]+dimeAry[1]+"0").doubleValue();            }            else{             d=new Double(dimeAry[0]+dimeAry[1]).doubleValue();            }           }          }         }         return (long)d;        }         //分转元     public static double getPennyConvertDime(double dime){         double d = 0;         if(dime!=0){          String dimeStr=String.valueOf((long)dime);          String[] dimeAry=dimeStr.split("\.");          int len=dimeAry.length;          String tempDimeStr1="";          String tempDimeStr2="";          if(len==1){           if(dimeStr.length()==1){               tempDimeStr2="0"+dimeStr;           }           else{               tempDimeStr1=dimeStr.substring(0,dimeStr.length()-2);               tempDimeStr2=dimeStr.substring(dimeStr.length()-2);           }          }          else{           if(dimeAry[0].length()==1){            tempDimeStr2="0"+dimeAry[0];           }           else{            tempDimeStr1=dimeAry[0].substring(0,dimeAry[0].length()-2);               tempDimeStr2=dimeAry[0].substring(dimeAry[0].length()-2);           }          }          d=new Double(tempDimeStr1+"."+tempDimeStr2).doubleValue();         }         return d;        }         public static int getStringNumber(String stringNum){         String str = null;         int num = 0;         if(stringNum != null){             for(int i = 0; i < stringNum.length(); i++) {                 char c = stringNum.charAt(i);                 if(c >= '0' && c <= '9' || c == '.'){                     if(str != null){                         str = str + Character.toString(c);                     }                     else{                          str = Character.toString(c);                     }                                   }             }             if(str != null){                 num = Integer.parseInt(str);             }         }         return num;        }         /**       * 删除单个文件       * @param   sPath    被删除文件的文件名       * @return 单个文件删除成功返回true,否则返回false       */      public static boolean deleteFile(String sPath) {          boolean flag = false;           File file = new File(sPath);           // 路径为文件且不为空则进行删除           if (file.isFile() && file.exists()) {               file.delete();               flag = true;           }           return flag;       }          //删除目录下文件     public static void deletePath(String filepath) throws Exception {      File f = new File(filepath);//定义文件路径                  if(f.exists() && f.isDirectory()){//判断是文件还是目录           //若有则把文件放进数组,并判断是否有下级目录           File delFile[]=f.listFiles();           int i =f.listFiles().length;           for(int j=0;j<i;j++){               if(delFile[j].isDirectory()){                deletePath(delFile[j].getAbsolutePath());//递归调用del方法并取得子目录路径                }                delFile[j].delete();//删除文件           }         }     }

        /**       * 解压缩       * @param destDir 生成的目标目录下   c:/a       * @param sourceZip 源zip文件      c:/upload.zip       * 结果则是 将upload.zip文件解压缩到c:/a目录下       */      public static void unZip(String destDir,String sourceZip){                try{               Project prj1 = new Project();                              Expand expand = new Expand();                              expand.setProject(prj1);               expand.setEncoding("GBK");                            expand.setSrc(new File(sourceZip));                              expand.setOverwrite(false);//是否覆盖                 File f = new File(destDir);                              expand.setDest(f);                              expand.execute();           }         catch(Exception e) {               e.printStackTrace();           }       }           /**       * 压缩  指定文件      *        * @param sourceFile       *            压缩的源文件 如: c:/upload       * @param targetZip       *            生成的目标文件 如:c:/upload.zip       */      public static void zip(String sourceFile,String targetZip){                        Project prj = new Project();                          Zip zip = new Zip();                          zip.setProject(prj);                          zip.setDestFile(new File(targetZip));//设置生成的目标zip文件File对象                          FileSet fileSet = new FileSet();                          fileSet.setProject(prj);                          fileSet.setFile(new File(sourceFile));                     zip.addFileset(fileSet);               zip.execute();         }               /**       * 压缩  指定目录下的文件      *        * @param sourceFile       *            压缩的源文件 如: c:/upload       * @param targetZip       *            生成的目标文件 如:c:/upload.zip       */      public static void zipDir(String sourceFile,String targetZip){                        Project prj = new Project();                          Zip zip = new Zip();                          zip.setProject(prj);                          zip.setDestFile(new File(targetZip));//设置生成的目标zip文件File对象                          FileSet fileSet = new FileSet();                          fileSet.setProject(prj);                          fileSet.setDir(new File(sourceFile));//设置将要进行压缩的源文件File对象            zip.addFileset(fileSet);               zip.execute();         }      /**   * Desc:加密压缩ZIP文件   * @author chen_xhua   * @date 2016年5月27日   * @param sourcefile  要压缩的具体路径+文件  D:\aaa.xls   * @param zipFileName  压缩后的文件名.zip  aaa.zip   * @param targetFilePath 压缩到的文件目录  D:\   * void   */  public static void addFilesWithAESEncryption(String sourcefile,String zipFileName,String targetFilePath,String zippassword) {         try {             ZipFile zipFile = new ZipFile(targetFilePath+File.separator+zipFileName);             ArrayList<File> filesToAdd = new ArrayList<File>();             filesToAdd.add(new File(sourcefile));             ZipParameters parameters = new ZipParameters();             parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);             parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);              parameters.setEncryptFiles(true);             parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);             parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);             parameters.setPassword(zippassword);             zipFile.addFiles(filesToAdd, parameters);         } catch (Exception e) {             e.printStackTrace();         }     }    /**   * Desc:根据文件流   加密压缩ZIP文件   * @author chen_xhua   * @date 2016年6月20日   * @param file   * @param zipFileName   * @param zippassword   * @return ZipFile   *   */  public static ZipFile addFilesWithAESEncryptionByStream(File file,String zipFileName,String zippassword) {   ZipFile zipFile = null;         try {          zipFile = new ZipFile(zipFileName);             ArrayList<File> filesToAdd = new ArrayList<File>();             filesToAdd.add(file);             ZipParameters parameters = new ZipParameters();             parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);             parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);              parameters.setEncryptFiles(true);             parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);             parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);             parameters.setPassword(zippassword);             zipFile.addFiles(filesToAdd, parameters);         } catch (Exception e) {             e.printStackTrace();         }         return zipFile;     }         /**      * 实现将多个文件进行压缩,生成指定目录下的指定名字的压缩文件      * Parameters:      * filename :指定生成的压缩文件的名称      * dirPath :指定生成的压缩文件所存放的目录      * list :List集合:用于存放多个File(文件)      * author:chen_xhua 2016-05-25      * */

 public static void createZip(String fileName, String dirPath,List<File> list) {          File file = new File(dirPath);          System.err.println(dirPath);          File zipFile = new File(dirPath+File.separator+fileName);          InputStream input = null;              try {            ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));            zipOut.setEncoding(System.getProperty("sun.jnu.encoding"));            zipOut.setComment(file.getName());                  if (file.isDirectory()) {                      for (int i = 0; i < list.size(); ++i) {                          input = new FileInputStream(list.get(i));                          zipOut.putNextEntry(new ZipEntry( file.getName()+ File.separator + list.get(i).getName()));                          int temp = 0;                          while ((temp = input.read()) != -1) {                           System.out.println("sss"+temp);                              zipOut.write(temp);                          }                          input.close();                          System.out.println("["+list.get(i).getName()+"] zip to File:["+fileName+"] success ");                      }                  }                  zipOut.close();          } catch (Exception e) {                     }        }

        public static String getSubString(String str,int pstart,int pend){        String resu="";        int beg=0;        int end=0;        int count1=0;        char[] temp=new char[str.length()];        str.getChars(0,str.length(),temp,0);        boolean[] bol=new boolean[str.length()];        for(int i=0;i<temp.length;i++){         bol[i]=false;         if((int)temp[i]>255){//说明是中文          count1++;          bol[i]=true;         }        }

       if(pstart>str.length()+count1){         resu=null;        }        if(pstart>pend){         resu=null;        }        if(pstart<1){         beg=0;        }else{         beg=pstart-1;        }        if(pend>str.length()+count1){         end=str.length()+count1;        }else{         end=pend;//在substring的末尾一样        }        //下面开始求应该返回的字符串        if(resu!=null){         if(beg==end){          int count=0;          if(beg==0){           if(bol[0]==true)            resu=null;           else            resu=new String(temp,0,1);          }else{           int len=beg;//zheli           for(int y=0;y<len;y++){//表示他前面是否有中文,不管自己            if(bol[y]==true)             count++;             len--;//想明白为什么len--           }           //for循环运行完毕后,len的值就代表在正常字符串中,目标beg的上一字符的索引值           if(count==0){//说明前面没有中文            if((int)temp[beg]>255)//说明自己是中文             resu=null;//返回空            else             resu=new String(temp,beg,1);           }else{//前面有中文,那么一个中文应与2个字符相对            if((int)temp[len+1]>255)//说明自己是中文             resu=null;//返回空            else             resu=new String(temp,len+1,1);           }          }         }else{//下面是正常情况下的比较          int temSt=beg;          int temEd=end-1;//这里减掉一          for(int i=0;i<temSt;i++){           if(bol[i]==true)            temSt--;          }//循环完毕后temSt表示前字符的正常索引          for(int j=0;j<temEd;j++){           if(bol[j]==true)            temEd--;          }//循环完毕后temEd-1表示最后字符的正常索引          if(bol[temSt]==true)//说明是字符,说明索引本身是汉字的后半部分,那么应该是不能取的          {           int cont=0;           for(int i=0;i<=temSt;i++){            cont++;            if(bol[i]==true)             cont++;           }           if(pstart==cont)//是偶数不应包含,如果pstart<cont则要包含            temSt++;//从下一位开始          }          if(bol[temEd]==true){//因为temEd表示substring 的最面参数,此处是一个汉字,下面要确定是否应该含这个汉字           int cont=0;           for(int i=0;i<=temEd;i++){            cont++;            if(bol[i]==true)             cont++;           }           if(pend<cont)//是汉字的前半部分不应包含            temEd--;//所以只取到前一个          }          if(temSt==temEd){           resu=new String(temp,temSt,1);          }else if(temSt>temEd){           resu=null;          }else{           resu=str.substring(temSt,temEd+1);          }         }        }        return resu;//返回结果       }         /**       * @param str       *            字符串       *            需要截取的字节数       * @return 中文字符串长度       */      public static int getSubStringLen(String str) {           if (null == str) {               return 0;           }           // 截取了的字节数           int len = 0;           for (char c : str.toCharArray()) {               if (isChinese(c)) {                   // 如果是中文,字节数加2                   len += 2;               } else {                   // 如果不是中文,字节数加1                   len++;               }           }           return len;       }           /**       * @param str       *            字符串       * @param bytes       *            需要截取的字节数       * @return 结果       */      public static String getSubString(String str, int bytes) {           if (null == str) {               return null;           }             StringBuffer sb = new StringBuffer();           // 截取了的字节数           int len = 0;           for (char c : str.toCharArray()) {               if (isChinese(c)) {                   // 如果是中文,字节数加2                   len += 2;               } else {                   // 如果不是中文,字节数加1                   len++;               }               if (len > bytes) {                   // 如果字节数大于了需要截取的,则终止                   break;               } else {                   sb.append(c);               }           }           return sb.toString();       }         /**       * 判断一个字符是不是中文        */      public static boolean isChinese(char c) {           Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);           if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS                   || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS                   || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A                   || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION                   || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION                   || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {               return true;           }           return false;       }  

        public static int getMaxValue(int[] dataAry){      int max=dataAry[0];      for(int i=0;i<dataAry.length;i++) {          if(max<dataAry[i])           max = dataAry[i];      }         return max;     }         public static String getNumberFormatStr(double d){      NumberFormat  currentFormat=NumberFormat.getInstance();      String  str=currentFormat.format(new Double(d));         return str;     }         /**      * 查找某一字符串中TempString,特定子串TempSubString的出现次数      * @param TempString: 字符串      * @param TempSubString: 子串      * @return: 次数      */     public static int GetFindCount(String TempString,String TempSubString){         if(TempString==null) return 0;         StringTokenizer TempStringTokenizer=new StringTokenizer(TempString,TempSubString);         return TempStringTokenizer.countTokens();     }

    /**      * 将字符串定义改为字符串数组      * @param TempString: 字符串      * @param Separator: 分隔符      * @return: 字符串数组      */     public static String[] ChangeStringToArray(String TempString,String Separator){         if(TempString==null || TempString.trim().equalsIgnoreCase("")){             return null;         }

        int count=0;         String CountString = TempString;         int loc=0;         while (!CountString.equalsIgnoreCase("")) {             if (CountString.indexOf(Separator) != -1) {                 loc = CountString.indexOf(Separator);                 count++;                 CountString = CountString.substring(loc + 1);                 if(CountString.indexOf(Separator)==-1 && CountString.trim().equalsIgnoreCase(""))                 {                     count++;                 }             } else {                 count++;                 CountString="";             }         }

        String[] TempStringArray=new String[count];         try         {             int j=0;             for(int i=0;i<count;i++)             {                 if(TempString.indexOf(Separator)!=-1)                 {                     j=TempString.indexOf(Separator);                     TempStringArray[i]=TempString.substring(0,j);                     TempString=TempString.substring(j+1);                 }else{                     TempStringArray[i]=TempString;                 }             }         }         catch(Exception e)         {             System.out.println("转换的过程中出现错误!"+e.getMessage());             e.printStackTrace();         }         return TempStringArray;     }

    /**      * 替换字符串中的子串为另一字符串      * @param TempString: 替换字符串      * @param ToReplaceString: 要替换字符串      * @param ReplaceString: 另一字符串      * @return: 替换后的字符串      */     public static String StringReplace(String TempString,String ToReplaceString,String ReplaceString)     {         String ReturnString=TempString;         int StringLength=0;

        if(TempString==null)    return null;

        if(ToReplaceString!=null)         {             if(TempString.length()==ToReplaceString.length() && TempString.compareTo(ToReplaceString)==0)             {                 return ReplaceString;             }

            StringLength=ToReplaceString.length();         }         if(ReturnString != null && ReturnString.length()>StringLength)         {             int max=0;             String S4="";             for(int i=0;i<TempString.length();i++)             {                 max=i+ToReplaceString.length()>TempString.length()?TempString.length():i+StringLength;                 String S3=TempString.substring(i,max);                 if(!S3.equals(ToReplaceString))                 {                     S4+=S3.substring(0,1);                 }else{                     S4+=ReplaceString;                     i+=StringLength-1;               }             }             ReturnString=S4;         }

        return ReturnString;     }

    /**      * 把NULL转换为""      * @param TempString: 要转换的字符串      * @return: 转换后的字符串      */     public static String ChangeNullToString(String TempString)     {         if(TempString==null)             return "";         return TempString.trim();     }

    /**      * 字符处理      * @param TempString: 要处理的字符串      * @return: 处理后的字符串      */     public static String GetCnCode(String TempString)     {

        String CnString=null;

        try         {             if(TempString==null)    return null;             byte[] TempBytes = TempString.getBytes("ISO8859-1");             CnString=new String(TempBytes,"GB2312");         }         catch(Exception e)         {             System.out.print("字符转换出错!"+e.getMessage());             e.printStackTrace();         }

        return CnString;     }

    /**      * 将空字符串——>"0"      * @param W_ChangeString:要转换的字符串      * @return:转换后的字符串      */     public static String ChangeNullToZero(String W_ChangeString)     {         if(W_ChangeString==null || W_ChangeString.trim().equalsIgnoreCase(""))         {             W_ChangeString="0";         }

        return W_ChangeString;     }

    /**      * 将科学计数法的double转换为正常现实的String      * @param tempDoubleValue:要转换的double      * @return:转换后的String      */     public static String ChangeDoubleToString(double tempDoubleValue)     {         DecimalFormat format=new DecimalFormat("####.00");         String tempString="";         tempString=format.format(tempDoubleValue);

        return tempString;     }

    /**      * 按字节截取字符串      * @param tmpStr String      * @param beginIndex int      * @param endIndex int      * @return String      */     public static String substringByBytes(String tmpStr,int beginIndex, int endIndex)     {         byte[] tmpBytes=tmpStr.getBytes();         int len=endIndex-beginIndex;         byte[] returnBytes=new byte[len];         System.arraycopy(tmpBytes,beginIndex,returnBytes,0,len);

//        int index=0; //        for(int i=beginIndex;i<endIndex;++i) //        { //            returnBytes[index]=tmpBytes[i]; //            index++; //        }

        return new String(returnBytes);     }

    /**      * 向一维数组中加入一项      * @param tempArray:一维数组      * @param tempValue:要添加的项      * @return:新字符串数组      */     public String[] AddNewItemToStringArray(String[] tempArray,String tempValue)     {         return null;     }

    public String[][] AddNewItemToStringArray(String[][] tempArray,String[] AddArrayOne,String[] AddArrayTwo)     {         return null;     }

    /**      * 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)      *      * @param char      *            c, 需要判断的字符      * @return boolean, 返回true,Ascill字符      */     public static boolean isLetter(char c) {         int k = 0x80;         return c / k == 0 ? true : false;     }

    /**      * 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1      *      * @param String      *            s ,需要得到长度的字符串      * @return int, 得到的字符串长度      */     public static int length(String s) {         if (s == null)             return 0;         char[] c = s.toCharArray();         int len = 0;         for (int i = 0; i < c.length; i++) {             len++;             if (!isLetter(c[i])) {                 len++;             }         }         return len;     }

    /**      * 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位      *      * @author patriotlml      * @param String      *            origin, 原始字符串      * @param int      *            len, 截取长度(一个汉字长度按2算的)      * @return String, 返回的字符串      */     public static String substring(String origin, int len) {         if (origin == null || origin.equals("") || len<1)             return "";         byte[] strByte = new byte[len];         if (len > length(origin)){             return origin;}         System.arraycopy(origin.getBytes(), 0, strByte, 0, len);         int count = 0;         for (int i = 0; i < len; i++) {             int value = strByte[i];             if (value < 0) {                 count++;             }         }         if (count % 2 != 0) {             len = (len == 1) ? ++len : --len;         }         return new String(strByte, 0, len);     }             /**   *   * @author Administrator   * @version 创建时间:Mar 17, 2010 3:18:01 PM;   * @see 将字符串转换为整形,如果出现异常,则返回0   * @param sValue   * @return   */  public static int parseStringToInt(String sValue) {   int result = 0;   try {    result = Integer.parseInt(sValue);   } catch (Exception ex) {    result = Double.valueOf(parseStringToDouble(sValue)).intValue();   }   return result;  }

 /**   * @see   * @author Administrator   * @version 创建时间:May 20, 2010 3:14:09 PM;   * @param sValue   * @return   */  public static double parseStringToDouble(String sValue) {   double result = 0;   try {    result = Double.parseDouble(sValue);    if (Double.isNaN(result)) {     result = 0;    }   } catch (Exception ex) {    // ex.printStackTrace();   }   return result;  }    /**

   * 提供精确的加法运算。

   * @param v1 被加数

   * @param v2 加数

   * @return 两个参数的和

   */

   public static double add(double v1,double v2){

       BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));

       return b1.add(b2).doubleValue();    }       public static double addRecursion(double v1,int offset){         double d1=0;     d1=add(v1,v1);     for(int i=2;i<offset;i++){      d1=add(d1,v1);     }        return d1;    }       public static double addMore(Map<Integer,Double> map){     double d1=0;     int size=map.size();     if(size==1){     d1=map.get(1);     }     if(size==2){      d1=add(map.get(1),map.get(2));     }     if(size>2){      d1=add(map.get(1),map.get(2));      for(int i=3;i<map.size();i++){       d1=add(d1,map.get(i));      }     }        return d1;    }

   /**

   * 提供精确的减法运算。

   * @param v1 减数

   * @param v2 bei减数

   * @return 两个参数的差

   */

   public static double sub(double v1,double v2){

       BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));

       return b1.subtract(b2).doubleValue();    }    /**

   * 提供精确的乘法运算。

   * @param v1 被乘数

   * @param v2 乘数

   * @return 两个参数的积

   */

   public static double mul(double v1,double v2){

       BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));

       return b1.multiply(b2).doubleValue();    }      /**

   * 提供精确的小数位四舍五入处理。

   * @param v 需要四舍五入的数字

   * @param scale 小数点后保留几位

   * @return 四舍五入后的结果

   */

   public static double round(double v,int scale){        if(scale<0){            throw new IllegalArgumentException("The scale must be a positive integer or zero");        }

       BigDecimal b = new BigDecimal(Double.toString(v));        BigDecimal one = new BigDecimal("1");               return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();    }       public static double div(double v1,double v2,int scale){

       if(scale<0){

           throw new IllegalArgumentException("The scale must be a positive integer or zero");        }

       BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));

       return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();    }

 /**   * @see   * @author Administrator   * @version 创建时间:May 20, 2010 3:14:09 PM;   * @param sValue   * @return   */  public static String formatStringToDouble(String sValue) {   String result = "0";   try {    int len = sValue.length();    boolean decimalFlag = false;// 是否为科学计数法    boolean is_position = false;// 是否为负数    boolean decimal_positon = false;// 科学计数法的正负之分    boolean isPositionStart = false;// 计数部分小数是否开始    boolean isException = false;// 是否有异常

   StringBuffer decimalStrb = new StringBuffer();// 小数部分    StringBuffer positionStrb = new StringBuffer();// 整数部分    StringBuffer z_Strb = new StringBuffer();// 科学计数法部分    for (int i = 0; i < len; i++) {     char c = sValue.charAt(i);     if (c == '-' && i == 0) {      is_position = true;      continue;     }     if (c == 'E')// 科学计数法     {      decimalFlag = true;      if ((i + 1) < len && sValue.charAt(i + 1) == '-')// 科学计数法为负数      {       decimal_positon = true;       i++;      }      continue;     }     if (c == '.') {      isPositionStart = true;      continue;     }     if (('c' < '0' || c > '9')) {      isException = true;      break;     }

    if (decimalFlag) {      z_Strb.append(c);      continue;     }     if (isPositionStart) {      decimalStrb.append(c);     } else {      positionStrb.append(c);     }

   }

   if (!isException) {     StringBuffer resultstrb = new StringBuffer();

    if (decimalFlag)// 为科学计数法     {      int dec_len = parseStringToInt(z_Strb.toString());      if (decimal_positon) {       dec_len = -1 * dec_len;      }      int z_len = positionStrb.length();      int s_len = decimalStrb.length();

     resultstrb.append(positionStrb).append(decimalStrb);      int add = z_len + dec_len;

     if (add <= 0) {       for (; add < 0; add++) {        resultstrb.insert(0, "0");       }       resultstrb.insert(0, "0.");      } else {       if (add < (z_len + s_len)) {        resultstrb.insert(add, ".");       } else {        for (int k = (add - z_len - s_len); k > 0; k--) {         resultstrb.append("0");        }       }      }     } else {      if (decimalStrb.length() <= 0) {       resultstrb.append(positionStrb);      } else {       resultstrb.append(positionStrb).append(".").append(decimalStrb);      }     }     if (is_position) {      resultstrb.insert(0,"-");     }

    result = resultstrb.toString();         }

  } catch (Exception ex) {    // ex.printStackTrace();   }   return result;  }    public static String getSeq(int seq){   String rslt="";   try{    String seqStr=String.valueOf(seq);    if(seqStr.length()==1){     rslt="00000"+seqStr;    }    if(seqStr.length()==2){     rslt="0000"+seqStr;    }    if(seqStr.length()==3){     rslt="000"+seqStr;    }    if(seqStr.length()==4){     rslt="00"+seqStr;    }    if(seqStr.length()==5){     rslt="0"+seqStr;    }    if(seqStr.length()==6){     rslt=seqStr;    }   }   catch(Exception e){    e.printStackTrace();   }   return rslt;  }         /**

     * 输出数字的格式,如:1,234,567.89

     * @param bd BigDecimal 要格式华的数字

     * @param format String 格式 "###,###.00"

     * @return String

     */

  public static String numberFormat(double d, String format) {          BigDecimal bd = new BigDecimal(d);       if (bd == null || "0".equals(bd.toString())) {

        return "";

      }

      DecimalFormat bf = new DecimalFormat(format);

      return bf.format(bd);

  }     /**定义数组存放数字对应的大写 */   private final static String[] STR_NUMBER ={ "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };

  /** 定义数组存放位数的大写 */   private final static String[] STR_MODIFY ={ "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };     /** 定义数组存放分角的大写 */   private final static String[] STR_SMALL={"分","角"};  

/**     * 将一个数字转化为金额     *      * @param tempNumber 传入一个double的变量     * @return 返一个转换好的字符串   */   public static String numberToChinese(double tempNumber){      java.text.DecimalFormat df = new java.text.DecimalFormat("#.##");      String pTemp = String.valueOf(df.format(tempNumber));      StringBuffer sbResult =null;      String fraction=getFraction(pTemp);      if(fraction.equals("")){       sbResult = new StringBuffer(getSign(pTemp) + getInteger(pTemp)+ "元整");      }      else{       sbResult = new StringBuffer(getSign(pTemp) + getInteger(pTemp) + "元" + getFraction(pTemp));      }           return sbResult.toString();   }

  public static String numberToChinese(BigDecimal tempNumber){       return numberToChinese(tempNumber.doubleValue());   }   /**     * 转化整数部分     *      * @param tempString     * @return 返回整数部分   */   private static String getInteger(String tempString){      /** 用来保存整数部分数字串 */      String strInteger = null;//       /** 记录"."所在位置 */      int intDotPos = tempString.indexOf(".");      int intSignPos = tempString.indexOf("-");      if(intDotPos == -1){          intDotPos = tempString.length();      }      /** 取出整数部分 */      strInteger = tempString.substring(intSignPos + 1, intDotPos);      strInteger = new StringBuffer(strInteger).reverse().toString();        StringBuffer sbResult = new StringBuffer();      for(int i = 0; i < strInteger.length(); i++){          sbResult.append(STR_MODIFY[i]);          sbResult.append(STR_NUMBER[strInteger.charAt(i) - 48]);      }        sbResult = sbResult.reverse();        replace(sbResult, "零拾", "零");      replace(sbResult, "零佰", "零");      replace(sbResult, "零仟", "零");      replace(sbResult, "零万", "万");      replace(sbResult, "零亿", "亿");        replace(sbResult, "零零", "零");      replace(sbResult, "零零零", "零");      /** 这两句不能颠倒顺序 */      replace(sbResult, "零零零零万", "");      replace(sbResult, "零零零零", "");      /** 这样读起来更习惯. */      replace(sbResult, "壹拾亿", "拾亿");      replace(sbResult, "壹拾万", "拾万");      /** 删除个位上的零 */      if(sbResult.charAt(sbResult.length() - 1) == '零' && sbResult.length() != 1){          sbResult.deleteCharAt(sbResult.length() - 1);      }      if(strInteger.length() == 2){          replace(sbResult, "壹拾", "拾");      }      /** *//** 将结果反转回来. */      return sbResult.toString();   }

  /**     * 转化小数部分 例:输入22.34返回叁肆     *      * @param tempString     * @return   */   private static String getFraction(String tempString){      String strFraction = null;      int intDotPos = tempString.indexOf(".");      /** *//** 没有点说明没有小数,直接返回 */      if(intDotPos == -1){          return "";      }      String sbStr="";      strFraction = tempString.substring(intDotPos + 1);      if(strFraction.length()==1){       sbStr=STR_NUMBER[strFraction.charAt(0) - 48]+STR_SMALL[1];      }      else{       StringBuffer sbResult = new StringBuffer(strFraction.length());       strFraction = new StringBuffer(strFraction).reverse().toString();       for(int i = 0; i < strFraction.length(); i++){        sbResult.append(STR_SMALL[i]);           sbResult.append(STR_NUMBER[strFraction.charAt(i) - 48]);       }       sbResult = sbResult.reverse();       replace(sbResult, "零角零分", "");       replace(sbResult, "零角", "零");        sbStr=sbResult.toString();       if(sbStr.equals("零")){        sbStr="";       }       else{        sbStr=sbResult.toString();       }      }      return sbStr.toString();   }

  /**     * 判断传入的字符串中是否有-如果有则返回负     *      * @param tempString     * @return   */   private static String getSign(String tempString){     return tempString.indexOf("-") != -1 ? "负" : "";   }     /**    * 替代字符    *     * @param pValue    * @param pSource    * @param pDest   */    private static void replace(StringBuffer pValue, String pSource, String pDest){      if(pValue == null || pSource == null || pDest == null) {          return;      }      /** 记录pSource在pValue中的位置 */      int intPos = 0;      do{          intPos = pValue.toString().indexOf(pSource);          /** 没有找到pSource */          if(intPos == -1){              break;          }          pValue.delete(intPos, intPos + pSource.length());          pValue.insert(intPos, pDest);      } while (true);    }       public  static List<String> parseStringToList(String target,String flag){   StringBuilder sb = new StringBuilder(target);   int st = 0 ;   int ed = sb.indexOf(flag);   List<String> list = new LinkedList<String>();   while ( st>=0 && ed>=0) {      list.add(sb.substring(st, ed));    st = ed+1;    ed = sb.indexOf(flag,st);   }   if(list.size() > 0){    list.add(sb.substring(st, sb.length()));   }   return list;  }       public static String createFilePath(String path){        File file = new File(path);      if (!file.exists()) {       file.mkdirs();      }      return path;    }    //降序     public static void sortDownArray(String [] arrStr){      String temp;      for(int i=0;i<arrStr.length;i++){          for(int j=arrStr.length-1;j>i;j--){              if(arrStr[i].compareTo(arrStr[j])<0){                  temp = arrStr[i];                  arrStr[i] = arrStr[j];                  arrStr[j] = temp;              }          }      }     }     //升序     public static void sortUpArray(String [] arrStr){      String temp;      for(int i=0;i<arrStr.length;i++){          for(int j=arrStr.length-1;j>i;j--){              if(arrStr[i].compareTo(arrStr[j])>0){                  temp = arrStr[i];                  arrStr[i] = arrStr[j];                  arrStr[j] = temp;              }          }      }     }     public static String[] listSort(List<String> list){      String tmpStr1="";      String tmpStr2="";      double lowD=0;      double hightD=0;      int length=list.size();      for(int i=0;i<length;i++){          tmpStr1=(String)list.get(i);          Double tempStr1D=new Double(tmpStr1);          int hcount=0;          int lcount=0;          int ecount=0;          for(int j=0;j<length;j++){           tmpStr2=(String)list.get(j);           Double tempStr2D=new Double(tmpStr2);           if(tempStr1D>tempStr2D){            hcount++;           }           if(tempStr1D==tempStr2D){            ecount++;           }           if(tempStr1D<tempStr2D){            lcount++;           }          }          if(hcount==length-1){           hightD=tempStr1D;          }          else if(ecount==length-1){           lowD=tempStr1D;           hightD=tempStr1D;          }          else if(lcount==length-1){           lowD=tempStr1D;          }      }      String[] hlAry=new String[2];      hlAry[0]=new Double(lowD).toString();      hlAry[1]=new Double(hightD).toString();      return hlAry;          }             public static String replaceBlank(String str) {   String dest = "";   if (str!=null) {    Pattern p = Pattern.compile("\s*| | | ");    Matcher m = p.matcher(str);    dest = m.replaceAll("");   }   return dest;  }          public static boolean isNull(String param){      boolean flag = false;      if(param.equals("")||param==null){       param ="";       return true;      }      return flag;     }    }

原文地址:https://www.cnblogs.com/Defry/p/5600690.html