阿翔编程学-操作Excel文件的类
2007-05-31 14:51
162 查看
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;
}
}*/
}
}
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;
}
}*/
}
}
相关文章推荐
- VC操作Excel文件编程相关内容总结
- VC操作Excel文件编程相关内容总结
- VC操作Excel文件编程相关内容总结
- VC操作Excel文件编程相关内容总结
- 结合OleDb编程操作Excel文件
- VC操作Excel文件编程相关内容
- VC操作Excel文件编程相关内容总结
- VC操作Excel文件编程相关内容总结
- VC操作Excel文件编程相关内容总结
- VC操作Excel文件编程相关内容总结
- 阿翔编程学-Java文件操作
- VC操作Excel文件编程相关内容总结
- 一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作
- 【python小记】python操作excel文件
- linux-C编程-文件操作
- Excel VBA 中 Excel文件的操作
- WINDOWS中关于剪切板的编程操作
- 串口通讯编程一日通4(串口基本操作)
- [JAVA100例]038、操作Excel文件(java100例)
- 转,windows编程中关于文件的操作