您的位置:首页 > 编程语言

阿翔编程学-操作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;
}
}*/
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: