Zip文件壓縮(加密||非加密||壓縮指定目錄||壓縮目錄下的單個文件||根據路徑壓縮||根據流壓縮)

一、寫入Excel,並加密壓縮、不保存文件java

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

String folderFileName="Q10152900H1I002016060071.zip";數組

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

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

/*將生成的Excel文件壓縮成同名的zip 文件   加密密碼:dddd*/
   String zipFileName=folderFileName+".zip";ui

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();3d

二、加密碼壓縮並保存源文件和壓縮文件excel

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

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*|\t|\r|\n");    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;     }    }

相關文章
相關標籤/搜索