阿翔编程学-操作Excel文件的类

package com.jxsafe.source.common.applications.source.classinfo.random;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.jxsafe.source.common.applications.source.classinfo.random.imp.IExcel;

/**
 *
 * @author caoxiang
 * 操作Excel文件的类
 * 上传文件,打包Zip,读写Excel,删除,创建Excel文件。
 * @Data 060817
 */
public class Excel implements IExcel {
 
 //Excel 文件要存放的位置,假定在C盘SafeExcel目录下
 public static String UPath = "C://SafeExcel";
 //全局数据行
 public static int numberLock=0;
 //保存数据
 public  static String[] totalArr=null;
 //保存数据
 public  static String[] totalArray=null;
 //保存数据行的List
 public static ArrayList list=new ArrayList();
 //记录行总数
 public static int count;
 //共享数组
 public static String[] Layout;
 //工作簿名称,可以取中文(就是另存为名称).
 public static String outputFile = "C:/SafeExcel/SafeExcelReport.xls";
 //数据库对象
 MySqlConnection MySql=new MySqlConnection();
 //Excel标题
 public static String[] title=null;
 
    /**
     *
     * @param rows    获的行数
     * @param cel     获得列数
     * @param text    获得标题
     * @param map     获得参数
     * @return Excel  生成横向的Excel
     */
 
 public static void ExcelRow(int rows, int cel, String[] title ,String[] body) {   
  try{
   //如果UPath不存在,则创建路径    
   if (!new java.io.File(UPath).isDirectory() ) {
    new java.io.File(UPath).mkdirs();
   }
   File objFile = new File(outputFile);
   HSSFWorkbook workbook = null;  
   HSSFSheet sheet = null;
   String table_name = "sheet1";
   //创建文件
   if (!objFile.exists() ) {   //文件不存在
    //创建新的Excel 工作簿
    System.out.println("检测到文件不存在,正在创建文件...");
    workbook = new HSSFWorkbook();
    //在Excel工作簿中建一工作表,其名为缺省值
    sheet = workbook.createSheet(table_name);
    //新建一输出文件流
    FileOutputStream fOut = new FileOutputStream(outputFile);
    //把相应的Excel 工作簿存盘
    workbook.write(fOut);
    fOut.flush();
    //操作结束,关闭文件
    fOut.close();
   }
   //如果文件存在,将直接插入数据.
   //创建对Excel工作簿文件的引用
   FileInputStream fis = new FileInputStream(outputFile);
   workbook = new HSSFWorkbook(fis);
   //创建对工作表的引用。
   sheet = workbook.getSheet(table_name);
   //也可用getSheetAt(int index)按索引引用,
   //在Excel文档中,第一张工作表的缺省索引是0,
   //读取左上端单元
   /********************显示标题*************************/
   for(int i=0; i<rows; i++){              //控制行
    for(int j=0; j<cel; j++){           //控制列
                    //插入之前必需先创建
     //在索引0的位置创建行(最顶端的行)
     HSSFRow row = sheet.createRow((short)i);
     //在索引0的位置创建单元格(左上端)
     HSSFCell cell = row.createCell((short)j);
     //定义单元格为字符串类型
     //这两名非常重要,缺少,则不能显示中文,
     //即使你调用编码转换方法,也不行.
     cell.setCellType(HSSFCell.CELL_TYPE_STRING);
     //指定编码格式
     cell.setEncoding(HSSFCell.ENCODING_UTF_16);
     //在单元格中输入一些内容              
     //调用编码转换方法,只针对中文
     title[j] = getUnicode(title[j],"gb2312");
     cell.setCellValue(title[j]);
     System.out.println("标题为 : " + cell.getStringCellValue());
     //新建一输出文件流
     FileOutputStream fOut = new FileOutputStream(outputFile);
     //把相应的Excel 工作簿存盘
     workbook.write(fOut);
     fOut.flush();
     // 操作结束,关闭文件
     fOut.close();
    }
   }
      //************************显示正文******************/
   for(int i=1; i<=rows; i++){              //控制行
    for(int j=0; j<cel; j++){            //控制列
     //在索引0的位置创建行(最顶端的行)
     HSSFRow row = sheet.createRow((short)i);
     //在索引0的位置创建单元格(左上端)
     HSSFCell cell = row.createCell((short)j);
     //定义单元格为字符串类型
     //这两名非常重要,缺少,则不能显示中文,
     cell.setCellType(HSSFCell.CELL_TYPE_STRING);
     //指定编码格式
     cell.setEncoding(HSSFCell.ENCODING_UTF_16);
     //在单元格中输入一些内容              
     //调用编码转换方法,只针对中文
     body[j] = getUnicode(body[j],"gb2312");
     cell.setCellValue(body[j]);
     System.out.println("正文为 : " + cell.getStringCellValue());
     //新建一输出文件流
     FileOutputStream fOut = new FileOutputStream(outputFile);
     //把相应的Excel 工作簿存盘
     workbook.write(fOut);
     fOut.flush();
     // 操作结束,关闭文件
     fOut.close();
    }
   }
   fis.close();
   System.out.println("文件已生成......");
  } catch( Exception e ) {
   System.out.println("已运行 xlCreate() : " + e );
  }
 }

    /**
     *
     * @param rows    获的行数
     * @param cel     获得列数
     * @param text    获得标题
     * @param map     获得参数
     * @return Excel  生成纵向的Excel
     */
 
 public static void ExcelCell(int rows, int cel, String[] title ,String[] body) {
  try{
   //如果UPath不存在,则创建路径    
   if (!new java.io.File(UPath).isDirectory() ) {
    new java.io.File(UPath).mkdirs();
   }
   File objFile = new File(outputFile);
   HSSFWorkbook workbook = null;  
   HSSFSheet sheet = null;
   String table_name = "sheet1";
   //************************创建文件*********************/
   if (!objFile.exists() ) {   //文件不存在
    //创建新的Excel 工作簿
    System.out.println("检测到文件不存在,正在创建文件...");
    workbook = new HSSFWorkbook();
    //在Excel工作簿中建一工作表,其名为缺省值
    sheet = workbook.createSheet(table_name);
    //新建一输出文件流
    FileOutputStream fOut = new FileOutputStream(outputFile);
    //把相应的Excel 工作簿存盘
    workbook.write(fOut);
    fOut.flush();
    //操作结束,关闭文件
    fOut.close();
   }
   //******************如果文件存在,将直接插入数据.
   //创建对Excel工作簿文件的引用
   FileInputStream fis = new FileInputStream(outputFile);
   workbook = new HSSFWorkbook(fis);
   //创建对工作表的引用。
   sheet = workbook.getSheet(table_name);
   //********************显示标题*************************/
   for(int i=0; i<cel; i++){                //控制行
    for(int j=0; j<rows; j++){           //控制列
        //插入之前必需先创建
     //在索引0的位置创建行(最顶端的行)
     HSSFRow row = sheet.createRow((short)i);
     //在索引0的位置创建单元格(左上端)
     HSSFCell cell = row.createCell((short)j);
        //格式设置,这里我设置的是表格的字体大小和颜色
     HSSFFont font = workbook.createFont();
     font.setColor(HSSFFont.COLOR_RED);
     font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
     //创建格式
     HSSFCellStyle cellStyle= workbook.createCellStyle();
     //应用格式
     cell.setCellStyle(cellStyle);
     //定义单元格为字符串类型
     //这两名非常重要,缺少,则不能显示中文,
     cell.setCellType(HSSFCell.CELL_TYPE_STRING);
     //指定编码格式
     cell.setEncoding(HSSFCell.ENCODING_UTF_16);
     //在单元格中输入一些内容              
     //调用编码转换方法,只针对中文
     title[i] = getUnicode(title[i],"gb2312");
     cell.setCellValue(title[i]);
     System.out.println("标题为 : " + cell.getStringCellValue());
     //新建一输出文件流
     FileOutputStream fOut = new FileOutputStream(outputFile);
     //把相应的Excel 工作簿存盘
     workbook.write(fOut);
     fOut.flush();
     // 操作结束,关闭文件
     fOut.close();
    }
   }
      //************************显示正文******************/
   for(int i=0; i<cel; i++){                  //控制行
    for(int j=1; j<=rows; j++){            //控制列
     //在索引0的位置创建行(最顶端的行)
     HSSFRow row = sheet.createRow((short)i);
     //在索引0的位置创建单元格(左上端)
     HSSFCell cell = row.createCell((short)j);
     //定义单元格为字符串类型
     //这两名非常重要,缺少,则不能显示中文,
     cell.setCellType(HSSFCell.CELL_TYPE_STRING);
     //指定编码格式
     cell.setEncoding(HSSFCell.ENCODING_UTF_16);
     //在单元格中输入一些内容              
     //调用编码转换方法,只针对中文
     body[i] = getUnicode(body[i],"gb2312");
     cell.setCellValue(body[i]);
     System.out.println("正文为 : " + cell.getStringCellValue());
     //新建一输出文件流
     FileOutputStream fOut = new FileOutputStream(outputFile);
     //把相应的Excel 工作簿存盘
     workbook.write(fOut);
     fOut.flush();
     // 操作结束,关闭文件
     fOut.close();
    }
   }
   fis.close();
   System.out.println("文件已生成......");
  } catch( Exception e ) {
   System.out.println("已运行 xlCreate() : " + e );
  }
 }
 
 /**
  *
  * @param toEncoded ,encoding
  * @return String
  * 解决中文转换问题
  *
  */
 public static String getUnicode(String toEncoded, String encoding) {
     String retString = "";
     if ( toEncoded.equals("") || toEncoded.trim().equals("") ) {
         return toEncoded;
     }
         try {
             byte[] b = toEncoded.getBytes(encoding);
             sun.io.ByteToCharConverter  convertor = sun.io.ByteToCharConverter.getConverter(encoding);
             char [] c = convertor.convertAll(b);
             for ( int i=0; i< c.length; i++) {
                 retString += String.valueOf(c[i]);
             }
          } catch ( java.io.UnsupportedEncodingException usee ) {
                System.out.println("不支持"+encoding+"编码方式");
                usee.printStackTrace();
          } catch ( sun.io.MalformedInputException mfie ) {
             System.out.println("输入参数无效!!!");
             mfie.printStackTrace();
            }
            return retString;
   }
 
 /* (non-Javadoc)
  * @see com.jxsafe.source.common.applications.source.classinfo.random.IExcel#uploadFile()
  */
 
    public void uploadFile() {
        try {
            File file=new File(outputFile);
            FileInputStream fis = new FileInputStream(outputFile);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            OutputStream bos = new FileOutputStream(UPath);
            //建立一个上传文件的输出流
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ( (bytesRead = fis.read(buffer, 0, 8192)) != -1) {
                bos.write(buffer, 0, bytesRead);//将文件写入服务器
            }
            bos.close();
            fis.close();
      } catch(Exception e) {
            System.out.println(e.toString());   
      }
      try{
          ArrayList mylist=new ArrayList();
          //UploadActionList load=new UploadActionList();
          //创建对Excel工作簿文件的引用
          HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(outputFile));
          //创建对工作表的引用。
          //本例是按名引用(让我们假定那张表有着缺省名"Sheet1")
          //HSSFSheet sheet = workbook.getSheet("Sheet1");
          HSSFSheet sheet = workbook.getSheetAt(0);
          //也可用getSheetAt(int index)按索引引用,
          //在Excel文档中,第一张工作表的缺省索引是0,
          //其语句为:HSSFSheet sheet = workbook.getSheetAt(0);
          //读取左上端单元
          HSSFRow row = sheet.getRow(0);
          HSSFCell cell1 = row.getCell((short)0);
          HSSFCell cell2 = row.getCell((short)1);
          //输出单元内容,cell.getStringCellValue()就是取所在单元的值
          System.out.println("左上端单元是: " + cell1.getNumericCellValue());
      }catch(Exception e) {
          System.out.println("已运行xlRead() : " + e );
      }
      File f=new File("c://aa.txt");
      f.deleteOnExit();
    }

 /**
  * 删除文件
  *
  * @param path
  */
    public  static void   deleteFolder(File dir)  { 
        try  {
           
            File filelist[] = dir.listFiles();  
            int  listlen = filelist.length;
           
            for(int i=0;i<listlen;i++) {  
               
                if(filelist[i].isDirectory()) {
                   
                    deleteFolder(filelist[i]);
                   
                } else  {  
         
                    filelist[i].delete();
                }  
            }
            dir.delete();//删除当前目录 
           
        }  catch (Exception e) {
           
            System.out.println(e.toString());
        }
       
 
    }    
   
    /**
     *
     * @param args
     * @throws IOException
     * 把xls文件压缩
     */
   
    static final int BUFFER = 2048;
   
    public static void Zip () {

        try {
           
            //获得系统时间
            SimpleDateFormat dataTime = new SimpleDateFormat ("yyyy-MM-dd");
           
            //构造一个字符输入流
            Calendar c = Calendar.getInstance();
            String zipFileName = dataTime.format(c.getTime())+"_SafeExcelReport.zip";
            BufferedInputStream origin = null;
           
            //创建一个压缩文件
            FileOutputStream dest = new   FileOutputStream("C://"+zipFileName);
            ZipOutputStream out = new ZipOutputStream(new   BufferedOutputStream(dest));

            //建立字符流对象
            byte data[] = new byte[BUFFER];
        
            //指定要压缩的文件
            File f = new File(outputFile);
           
            System.out.println("压缩的文件为: "+f.getName());
           
            //构造一个文件输入流
            FileInputStream fi = new  FileInputStream(f);

            origin = new  BufferedInputStream(fi, BUFFER);
            ZipEntry entry = new ZipEntry(f.getName().replace(File.separatorChar,'/'));
       
            out.putNextEntry(entry);

            //将文件写入压缩文件中
            int count;                
            while((count = origin.read(data, 0, BUFFER)) != -1) {
           
                out.write(data, 0, count);

            }
           
            origin.close();  
            out.close();
            System.out.println("文件压缩成功........");

            //文件压缩成功后把先前创建的文件删除
         File dir = new File(UPath);
       
         System.out.println("读取文件时不能删除备份文件........");

        } catch(Exception e) {
           
            System.out.println("文件压缩失败。。"+e.getMessage()+e.toString());

        }
     }
   
     //程序入口
   
     public static void main(String[] args) {
        
         try {
            
             IExcel e = new Excel();
             //计算总数

             String[] first = {name[0], sex[0], Class[0], English[0], Math[0], Zy[0], kaoqin[0], jiangc[0]};
             count=name.length;
            
             for(int c=0; c<count; c++) {
                
                 String[] Layout = {name[c], sex[c], Class[c], English[c], Math[c], Zy[c], kaoqin[c], jiangc[c]};
                 e.setTwoArr(Layout);
                 list=setList(c,Layout);
                
                 if( c<count ) {
                    
                      //存储到List中
                    
                      for(int m = 0; m < list.size(); m++) {
                     
                          String[]  myStr2 = (String[])list.get(m);
                        
                          setArr(myStr2);
                     
                      }
                 }
             }

             ExcelRow(1, 8, title, getArr());
        
             Zip();
            
       } catch(Exception e) {
          
             System.out.println(e.toString()+e.getMessage()+e.getCause());
      
       }
      
     }
    
     //将数组保存到一个 List
     public static ArrayList setList(int i, String[] arr) {
        
         try {
            
             list.add(i,arr);
           
             for(int k = 0; k < list.size(); k++) {
                
                 String[] s1 = (String[])list.get(i);
                
                 setArr(s1);
                
                 for(int j = 0; j < s1.length; j++) {
                    
                 System.out.println("数据行记录 : "+s1[j]);
                
                 }
             }
            
             numberLock++;
            
             System.out.println("已经存储了 "+numberLock+"行 记录");
            
        
             return list;
        
         } catch(Exception e) {
            
             return null;
        
         } finally {
             
         }
     }
    
     //获得数组
     public static String[] getArr() {
        
         return totalArr;
        
     }
    
     //保存数组的方法
     public  static void setArr(String[] Arr) {
        
         totalArr = Arr;
        
     }
    
     //保存数组的方法
     /* (non-Javadoc)
  * @see com.jxsafe.source.common.applications.source.classinfo.random.IExcel#setTwoArr(java.lang.String[])
  */
    public  void setTwoArr(String[] Arr) {
        
         Layout = Arr;
        
     }
    
     //计算总数
     public static int CountNumber(String[] myStr) {
        
         count++;
         return count;
        
     }
    
     //获得数组
     public static String[] getAnArr() {
        
         return totalArray;
        
     }
    
     //保存数组的方法
     public  static void setAnArr(String[] Arr) {
        
         totalArray = Arr;
        
     }
    
     //Excel文件中的数据写入到数据库
     public static void readXsl(int rowNumber, int cellNumber)
     {
  try{
  // 创建对Excel工作簿文件的引用
  System.out.println(outputFile);
  HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(outputFile));
  
  // 创建对工作表的引用。
  // 本例是按名引用(让我们假定那张表有着缺省名"Sheet1")
  //HSSFSheet sheet = workbook.getSheet("sheet1");
  // 也可用getSheetAt(int index)按索引引用,
  // 在Excel文档中,第一张工作表的缺省索引是0,
  HSSFSheet sheet = workbook.getSheetAt(0);
  
  // 读取左上端单元
  for(int i=1; i<i; i++){                  //控制行
     
   for(int j=1; j<=cellNumber; j++){             //控制列
    
    //在索引0的位置创建行(最顶端的行)
    HSSFRow row = sheet.createRow((short)i);
    
    //在索引0的位置创建单元格(左上端)
    HSSFCell cell = row.createCell((short)j);
    
    //定义单元格为字符串类型
    //这两名非常重要,缺少,则不能显示中文,
    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    
    //指定编码格式
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    
    //在单元格中输入一些内容              
    //调用编码转换方法,只针对中文
    
    System.out.println("正文为 : " + cell.getStringCellValue());
   }
  }
  }catch(Exception e) {
     
      System.out.println("已运行xlRead() : " + e );
     
  }
   }
}


//                           数据库类的实现
/**
 *
 * @author caoxiang
 * 操作数据库的类
 * 连接数据库,添加数据,删除数据
 */

class MySqlConnection {
   
    private Connection connection;
    private Statement mysqlMent;
   
    //通过构造函数连接MySql数据库
    public MySqlConnection() {
       
        try {
           
            String driverName="com.mysql.jdbc.Driver";
            //数据库用户名
            String userName="root";
           
            //密码
            String userPasswd="linlin520";
           
            //数据库名
            String dbName="linlin";
           
            //连接字符串
            String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
           
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            connection=DriverManager.getConnection(url);
            System.out.println("数据库连接成功了....");
            mysqlMent=connection.createStatement();
            System.out.println("数据库语句对象已经创建.....");
           
        } catch(Exception e) {
           
           System.out.println(e.toString());
          
         }
    }
   
    //添加用户
    public boolean addUser(String username,String password) {
       
        try {
           
            StringBuffer sqlBuffer = new StringBuffer();
            sqlBuffer.append(" INSERT INTO ");
            sqlBuffer.append(" user_table ");
            sqlBuffer.append(" VALUES( ");
            sqlBuffer.append(" '"+username+"','"+password+"' )");
           
            int number = mysqlMent.executeUpdate(sqlBuffer.toString());
           
            if(number > 0) {
               
                return true;
               
            } else {
               
                return false;
               
            }
        } catch(Exception e) {
           
            return false;
           
        }
    }
   
    //用户登录
    public boolean loginUser(String username,String password) {
       
        StringBuffer sqlBuffer = new StringBuffer();
       
        try {
           
            sqlBuffer.append(" SELECT ");
            sqlBuffer.append(" * ");
            sqlBuffer.append(" FROM ");
            sqlBuffer.append(" user_table ");
            sqlBuffer.append(" WHERE ");
            sqlBuffer.append(" username='"+username+"' ");
            sqlBuffer.append(" AND ");
            sqlBuffer.append(" password='"+password+"' ");
           
            ResultSet userRs=mysqlMent.executeQuery(sqlBuffer.toString());
           
            if(userRs == null || !userRs.next()) {
               
                return false;
               
            } else {
               
                return true;
               
            }
           
        } catch(Exception e) {
           
            return false;
           
        }   
    }
   
    //获得所有用户的资料
    public List getAllUser(){
       
        try {
           
    StringBuffer sb = new StringBuffer();
    sb.append("select username ");
    sb.append(" from user_table");
    
    List dicList = (List)mysqlMent.executeQuery(sb.toString());
    
    return dicList; 
    
        } catch(Exception e) {
           
            return null;
           
        }
   }
   
}

//                                    Check类的实现
/**
 *
 * @author caoxiang
 * Check类
 * 包括 NULL转换成空字符串,字符串(YYYYMMDD)格式的日期判断
 * 获取当前系统日期,判断日期字符串格式的正确性,给日期字符串添加
 * 根据指定日期,获取当天是星期几,删除指定的文件,数值型和空
 * 返回true :数值以外,返回false: 字符串里不能含有'+'
 * 判断一个字符格式的数组是否符合 [a-z A-Z 0-9] 中的字符要求
 * null或空字符串的验证,对电子邮件格式的Check
 */

class checkMessage {
   
    public checkMessage() {
   
        System.out.println("已经调用了checkMessage类执行check操作....");
   
    }

    /**
  * NULL转换成空字符串<BR><BR>
  *
  * @param   str 要转换的字符串
  * @return  转换后的字符串
  */
 public static String doNullToEmpty(String str) {
    
  String retStr = str;
  
  if (str == null) {
     
   retStr = "";
   
  } else if(str.toLowerCase().equals("null")) {
     
   retStr = "";
   
  }
  
  return retStr;
  
 }
 
 
 /** 字符串(YYYYMMDD)格式的日期判断
  *
  * @param  String  要验证的字符串 YYYYMMDD
  * @return boolean  正确true 错误 false
  */
 
 public static boolean checkDate(String date) {
  
     //验证的字符串长度不是8位的情况,错误返回
      if (date.length() != 8) {
         
    return false;
    
  }

  //验证的字符串要是数值型
  if (!checkValueNum(date,false) || date.startsWith("-")) {
     
   return false;
   
  }
  
  String st_YYYY = (date.substring(0,4));
  String st_MM = (date.substring(4,6));
  String st_DD = (date.substring(6,8));

                         
  //判断字符串是否是正确的日期
  SimpleDateFormat sd_DtFmt = new SimpleDateFormat("yyyyMMdd",Locale.JAPAN);
  Calendar cl_chkDate = Calendar.getInstance();
  cl_chkDate.setTime(sd_DtFmt.parse(date,new ParsePosition(0)));
  
  if (cl_chkDate.get(Calendar.YEAR) != Integer.parseInt(st_YYYY)) {      
   
      sd_DtFmt=null;
    cl_chkDate=null;
   return false;
   
  }
  
  if (cl_chkDate.get(Calendar.MONTH)+1 != Integer.parseInt(st_MM)) {  
   
      sd_DtFmt=null;
   cl_chkDate=null;
   return false;
  
  }
  
  if (cl_chkDate.get(Calendar.DATE) != Integer.parseInt(st_DD)) {   
   
      sd_DtFmt=null;
    cl_chkDate=null;
   
    return false;
  } 
  
  
  return true;
  }
 

    /**
     * 获取当前系统日期<br>
     * @param format 日期格式
     * @return 返回系统日期
     * @throws java.lang.Exception
     */
 
    public static String getDate(String format)  {
       
        SimpleDateFormat fm = new SimpleDateFormat(format);
        return fm.format(new java.util.Date());
       
    }

 /** 判断日期字符串格式的正确性
  *
  * @param  String  检测的字符串
  * @return boolean 正确 true; 错误 false
  */
   
 public static boolean checkDateStyle(String date) {
    
     //字符串长度不等于10,错误返回
      if (date.length() != 10) {
  
          return false;
  
      }
      
      //判断[/]的位置是否正确
      if (!date.substring(4,5).equals("/") || !date.substring(7,8).equals("/")) {
      
          return false;
      
      }
      
  String st_YYYY = (date.substring(0,4));
  String st_MM = (date.substring(5,7));
  String st_DD = (date.substring(8,10));
  
  if (!checkValueNum(st_YYYY,false) || !checkValueNum(st_MM,false) || !checkValueNum(st_DD,false)) {
  
      return false;
  
  }

  //判断日期是否正确
  SimpleDateFormat sd_DtFmt = new SimpleDateFormat("yyyy/MM/dd",Locale.JAPAN);
  Calendar cl_chkDate = Calendar.getInstance();
  cl_chkDate.setTime(sd_DtFmt.parse(date,new ParsePosition(0)));
  
  if (cl_chkDate.get(Calendar.YEAR) != Integer.parseInt(st_YYYY)) {      
     
      sd_DtFmt=null;
    cl_chkDate=null;
  
    return false;
  }
  
  if (cl_chkDate.get(Calendar.MONTH)+1 != Integer.parseInt(st_MM)) {  
   
      sd_DtFmt=null;
   cl_chkDate=null;
   return false;
   
  }
  
  if (cl_chkDate.get(Calendar.DATE) != Integer.parseInt(st_DD)) {   
   
      sd_DtFmt=null;
    cl_chkDate=null;
    return false;
   
  } 
  
  return true;
  
 }
 
 /**
     * 根据指定日期,获取当天是星期几
     * @param year String
     * @param month String
     * @param day String
     * @return String
     */
 
    public  static String  getWeekDay (String year,String month,String day) {
     
        String strWeekday="";
     
     try {
        
      GregorianCalendar cal = new GregorianCalendar();
      cal.setLenient(false);
      cal.clear();
      cal.set(Integer.parseInt( year) , Integer.parseInt(month) - 1 ,Integer.parseInt( day) );
      strWeekday =String.valueOf( cal.get(java.util.Calendar.DAY_OF_WEEK)-1);
     
     } catch (IllegalArgumentException e) {
        
      strWeekday="";
      
     }
     
     return strWeekday;
     
    }
   
    /**
     * 给日期字符串添加/
     * <p>
     *  转换规则如下<br>
     * 字符串长度是8位:YYYYMMDD-->YYYY/MM/DD<br>
     * 字符串长度是6位:YYMMDD-->YY/MM/DD<br>
     * 字符串长度是4位:MMDD-->MM/DD<br>
     *  字符串长度是0位,""返回<br>
     * </p>
     * @param value 要转换的日期字符串
     * @return 转换后的字符串
     */
   
    public static String setDateSlash(String value) {
       
        if (value == null) {
           
            return "";
           
        } else if (value.trim().length() > 8) {
           
         value = value.substring(0,8);
         
        } else {
           
         value = value.trim() ;
      
        }
       
        if (value.length() == 4) {
           
            return value.substring(0, 2) + "/" + value.substring(2, 4);
       
        }
        else if (value.length() == 6) {
           
            return value.substring(0, 2) + "/" + value.substring(2, 4) + "/" +
                value.substring(4, 6);
           
        }
        else if (value.length() == 8) {
           
            return value.substring(0, 4) + "/" + value.substring(4, 6) + "/" +
                value.substring(6, 8);
           
        }
        else {
           
            return "";
           
        }
    }
   
   
    /**  
  * @str.length > size return false
  * @str.length <= size return true
  */
   
 public static boolean checkByteLength(String str, int size) {
    
     byte[] value = str.getBytes();
    
     if (value.length > size) {
        
         return false;
        
     }
  return true;
 }
 
   /**
     *
     * <P>删除指定的文件</P>
     *
     * @param path 文件路径
     * @return 正确(True)/错误(Flase)
     */
 
    public static boolean deleteFile(String fullPath) {
       
        try {
           
            if (fullPath != null && fullPath.trim().length() > 0) {
               
                File file = new File(fullPath.trim());
               
                if (file.isFile() && file.exists()) {
                   
                    file.delete();
                   
                }
            }
           
            return true;
           
        } catch (Exception e) {
           
            return false;
           
        }
    }
   

    /**
     * null或空字符串的验证
     * <p>
     * @param value 要验证的字符串
     * @return null和"",true返回。否则false返回
     */
   
    public static boolean isNull(String value) {
       
        try {
           
            if (value == null)
               
                return true;
           
            if (value.trim().length() == 0)
               
                return true;
           
            else
               
                return false;
           
        }
        catch (Exception e) {
           
            return false;
           
        }
    }


 
 /**
  * 数值型和空,返回true :数值以外,返回false: 字符串里不能含有'+')
  * @param num 要判断的字符串
  * @param decimal (小数OK --> true:小数NG ---> false)
  */
   
 private static boolean checkValueNum(String num,boolean decimal){
  
     boolean result = false;
  int dot = 0;
  
  if(num == null || num.trim().length() == 0){
     
   result = true;
   
  }else{  
   for(int i = 0; i < num.length(); i++){ 
      
    char number = num.charAt(i);    
    //数字以外的情况验证
    if(!Character.isDigit(number)){
     //小数点
     if(i != 0 && number == '.'){
        
      //小数点允许的情况
      if(decimal){
         
       if(dot == 0){
          
        dot = 1;
        
       }else{
          
        return result;
        
       }
      // 小数点不允许的情况
      }else{
         
       return result;
       
      }
     //负数的情况
     }else if(i == 0 &&  number == '-'){  
        
      if (num.length() == 1) {
         
       return result; 
       
      }     
     }else{
        
      return result;
      
     }
    }
   }  
   result = true;
  }
 
  return result;
 }
   
    private static boolean ascnumcode(byte byt) {
  
        if ( (byt != 34) == false || (byt != 39) == false)
           
            return false;
       
        else if ( (byt >= 33 && byt <= 126) == false)
           
            return false;
       
        else
           
            return true;
    }
 
    public static boolean isAlphabetOrNumericOrSymbol(String value) {
        try {

            byte[] b = value.getBytes("SJIS");

            for (int i = 0; i < b.length; i++) {
               
                if (ascnumcode(b[i]) == false)
                   
                    return false;
               
            }

            return true;
        }
        catch (Exception e) {
           
            return false;
           
        }
    }
 
 /**
     * EMail 对电子邮件格式的Check
     * @param value 电子邮件字符串
     * @return 如果电子邮件格式正确就返回 true, 否则就返回 false
     */
   
    public static boolean isEmailAddress(String value) {
       
        try {
           
            if (isNull(value)) {
              
                return true;
            }
            if (isAlphabetOrNumericOrSymbol(value) == false) {
               
                return false;
            }
            if (value.indexOf("@") < 1) {
               
                return false;
            }
            if (value.indexOf("@") != value.lastIndexOf("@")) {
              
                return false;
            }
            if (value.indexOf(" ") != -1 || value.indexOf(",") != -1) {
              
                return false;
            }
            if (value.charAt(0) == '@' || value.charAt(0) == '.') {
               
                return false;
            }

            int n = value.indexOf("@");
            String address = value.substring(0, n);
            String domain = value.substring(n + 1);

            if (domain.indexOf(".") < 1) {
               
                return false;
            }
           
            char c;
           
            for (int i = 0; i < domain.length(); i++) {
               
                c = domain.charAt(i);
               
                if ("#!%'$&|~*`/?+[]".indexOf(c) != -1) {
                   
                    return false;
                }
            }
            if (domain.indexOf("..") != -1) {
               
                return false;
               
            }
            if (domain.charAt(0) == '.' ||
                domain.charAt(domain.length() - 1) == '.') {
              
                return false;
            }
           
            String tld = domain.substring(domain.lastIndexOf('.') + 1);
          
            boolean tldc = true;
           
            for (int i = 0; i < tld.length(); i++) {
               
                c = tld.charAt(i);
               
                if ("0123456789".indexOf(c) == -1) {
                   
                    tldc = false;
                    break;
                   
                }
            }
            if (tldc == true) {
               
                return false;
            }

            return true;
        }
        catch (Exception e) {
           
            return false;
           
        }
    }
   
    //判断一个字符格式的数据是否符合 [a-z A-Z 0-9] 中的字符要求
    public static boolean checkChar(String str) {
    
       Pattern pattern = Pattern.compile("[a-z A-Z 0-9]*");
       Matcher isStr = pattern.matcher(str);  
       if( !isStr.matches() ) {
        
           return false;
       }
      
       return true;
    }
   
    //判断一个字符格式的数组是否符合 [a-z A-Z 0-9] 中的字符要求
    public static boolean checkArr(String[] str) {
    
       Pattern pattern = Pattern.compile("[a-z A-Z 0-9]*");
      
       StringBuffer buffer = new StringBuffer();
      
     for(int i=0;i<str.length;i++) {
        
         buffer.append(str[i]);
        
     }
    
       Matcher isStr = pattern.matcher(buffer); 
      
       if( !isStr.matches() ) {
        
           return false;
       }
      
       return true;
    }
    public static void download() {
       
        //如果下载文件还有乱码问题,需要修改相应代码      
         /*String filename = new String( request.getParameter("filename").getBytes("GBK"),"8859_1"); 
         String filepath = request.getRealPath("uploadmanager/uploadfiles/" + filename);       
         response.setContentType("application/octet-stream");      
          //设置IE下载对话框里显示的文件名,同样也需要注意乱码问题       
         response.addHeader("Content-Disposition", "attachment; filename=" + new String(filename.getBytes("GBK"),"8859_1"));        java.io.OutputStream os =  null;      
         java.io.FileInputStream fis = null;      
         try{    os = response.getOutputStream();
           fis = new java.io.FileInputStream(filepath); 
          byte[] b = new byte[8192];  
          int i = 0; 
          while ( (i = fis.read(b)) > 0 ){   
            os.write(b, 0, i); 
          }                 
          os.flush();  
         } catch ( Exception e )
         {}   
        finally{            
               if(fis != null){    
                         fis.close();  
                           fis = null;         
                  }  
                       if(os != null){    
                         os.close();        
                     os = null;               
          }          
         }*/ 
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值