非常实用的Java工具类_第1页
非常实用的Java工具类_第2页
非常实用的Java工具类_第3页
非常实用的Java工具类_第4页
非常实用的Java工具类_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、package d150814_0_3;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import j

2、ava.io.OutputStream;import java.io.OutputStreamWriter;import java.security.MessageDigest;import java.text.DecimalFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Enumeration;import java.util.Properties;import java.util.jar.JarEntry;import java.util.jar.JarFil

3、e;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;/* * 常用函数集 */public class Util /* * 默认类型 */ public final static String CONTENT_TYPE = "text/html; charset=GBK" /* * 界面风格常数 网格检索 */ public final static int M_VIEW=1; /* * 界面风格常数 单记录编辑 */ public final static int M_EDIT=2; /* * 界面风格

4、常数 网格+记录编辑 */ public final static int M_INP=3; /* * 界面风格常数 网格+记录查询 */ public final static int M_QRY=4; /* * 界面风格常数 网格+嵌入记录编辑 */ public final static int M_LINEINP=5; /* * 界面风格常数 网格+嵌入记录查询 */ public final static int M_LINEQRY=6; /* * 界面风格常数 网格+窗口记录编辑 */ public final static int M_WININP=7; /* * 界面风格常数

5、网格+窗口记录查询 */ public final static int M_WINQRY=8; /* * 界面工作选项不显示菜单 */ public final static int PM_NOMENU=1; /* * 界面工作选项不分页 */ public final static int PM_NOPAGE=2; /* * 界面工作选项模式窗体 */ public final static int PM_MODAL=4; /* * 默认表格背景色 */ public static String GRIDBGCOLOR="#F2F2F2"/A9B6CD /* * 默认编

6、辑背景色 */ public static String EDITBGCOLOR="#F2F2F2"/A9B6CD /* * 默认表格选择记录色 */ public static String HICOLOR="#C8D1C6" /"#ffff99" /"#d0d0d0" /* * 默认表格选中记录色 */ public static String CHOOSECOLOR="#ccffcc" /"#ff99ff" /* * 默认表头背景色 */ public static S

7、tring HEADBGCOLOR="#c0c0c0" /* * 默认表头字体颜色 */ public static String HEADFONTCOLOR="#0000FF" /* * 默认条件背景色 */ public static String CONDBGCOLOR="#d0d0d0" /* * 默认条件标题字体颜色 */ public static String CONDTITLEFONTCOLOR="#0000ff" /* * 默认条件标题背景色 */ public static String CON

8、DTITLEBGCOLOR="#d0d0d0" /* * 返回临时目录 */ public static File tempDir() String temp=System.getProperty("Temp",null); if (temp=null | temp.length()=0) temp="Temp" File f=new File(temp); if (!f.exists() f.mkdir(); return f; /错误处理和记录 static StringBuffer errs=new StringBuffer()

9、; static int ErrNum=0; /* * 错误提示,建议都用此函数输出调试信息 */ public static void Err(String err) ErrNum+; if (ErrNum>100) errs.delete(0,errs.indexOf("n")+1); errs.append(err+"n"); System.err.println(err); /* * 返回最后100行的错误信息 */ public static String Err() return errs.toString(); /* * 字符串截取函

10、数. * * 返回以semi分隔开的第n段字符串.n从1开始 */ public static String middle(String s,String semi,int n) if (s=null) return null; int nn=0; /表示当前层次 boolean found=true; int i=0; if (n<=0) n=1; int len=0; while (i<s.length() char c=s.charAt(i); if (c='(' && !semi.equals("(") &&

11、; !semi.equals("&") nn+; else if (c=')' && !semi.equals(")") && !semi.equals("&") if (nn>0) nn-; else if (nn=0 && found) n-; if (n=0) /找到数据,获得数据就可以了 int j=i+len; int j0=j; while (j<s.length() c=s.charAt(j); if (c='('

12、 && !semi.equals("(") && !semi.equals("&") nn+; else if (c=')' && !semi.equals(")") && !semi.equals("&") if (nn>0) nn-; else if (nn=0) if (j+semi.length()<=s.length() if (s.substring(j,j+semi.length().equal

13、s(semi) return s.substring(j0,j); j+; if (j0<s.length() return s.substring(j0); else return "" else if (len=0) i-; else i+=semi.length()-1; i+; if (i+semi.length()<s.length() found=s.substring(i,i+semi.length().equals(semi); else break; len=semi.length(); return "" /* * 字符串

14、截断函数. * * 返回以semi分隔的第n段及其后面的所有字符的串,包括后面可能的任何符号 */ public static String tail(String s,String semi,int n) int nn=0; /表示当前层次 boolean found=true; int i=0; if (n<=0) n=1; int len=0; while (i<s.length() char c=s.charAt(i); if (c='(' && !semi.equals("(") && !semi.equ

15、als("&") nn+; else if (c=')' && !semi.equals(")") && !semi.equals("&") if (nn>0) nn-; else if (nn=0 && found) n-; if (n=0) /找到数据,获得数据就可以了 int j=i+len; if (j>=s.length() return "" else return s.substring(j); else if

16、 (len=0) i-; else i+=semi.length()-1; i+; if (i+semi.length()<s.length() found=s.substring(i,i+semi.length().equals(semi); else break; len=semi.length(); return "" /* * 日期转换函数. 返回"mm月dd日"格式 */ public static String shortDate(java.util.Date d) SimpleDateFormat fmt=new SimpleDate

17、Format("MM月dd日"); return fmt.format(d); /* * 日期函数转字符串. * * format是日期格式yyyyMMddHHmmss,注意大小写. */ public static String dtos(java.util.Date d,String format) if (d=null) return "" SimpleDateFormat fmt=new SimpleDateFormat(format); String s=fmt.format(d); return s; /* * 字符串专日期. * * 合法的

18、日期格式是"1972-01-01". 允许输入成中文的""替代"-"允许用"."代替"-" 允许没有"-"分隔,但必须是8位数字; 允许日期时间格式串传入(字段只取空格前部分) */ public static java.util.Date stod(String s) if (s.equals("") s="" if (s.length()=8) s=s.substring(0,4)+"-"+s.substring

19、(4,6)+"-"+s.substring(6,8); while (s.indexOf("")>=0) s=middle(s,"",1)+"-"+tail(s,"",2); while (s.indexOf(".")>=0) s=middle(s,".",1)+"-"+tail(s,".",2); return stod(s,"yyyy-MM-dd"); /* * 字符串按格式转为日

20、期. * * 如果空,则返回null; * 如果转换错误, 首先尝试按"日期时间格式"处理,如果仍然错误,返回null */ public static java.util.Date stod(String s,String format) if (s.equals("") s="" if (s.equals("") return null; try SimpleDateFormat fmt=new SimpleDateFormat(format); return fmt.parse(s); catch (Pars

21、eException e) if (format.equals("yyyy-MM-dd HH:mm:ss") try SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd HH:mm"); return fmt.parse(s); catch(ParseException ee) try SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd"); return fmt.parse(s); catch(ParseException

22、 eee) Err("Util.stod ERR:"+eee+" fmt="+format); else Err("Util.stod ERR:"+e+" fmt="+format); return null; /* * 整数简化函数. * * 超过1000,按K处理, 超过1000000按M处理 否则为B */ public static String shortInt(long nn) double f=nn; DecimalFormat fmt=new DecimalFormat("0.0"

23、;); if (f<1000) return f+"B" else if (nn<1000000) return fmt.format(f/1000)+"K" else return fmt.format(f/1000000)+"M" /* * 实数格式化函数. * * format可为#和0的组合,其中可用分号代替逗号表示千分位 */ public static String formatFloat(double f,String format) DecimalFormat fmt=new DecimalFormat(f

24、ormat.replace('',','); String res=fmt.format(f); if (format.equals("#") && res.equals("0") res="" return res; /* * 字符转整数. * * 如果发生错误,返回0 */ public static int stoi(String s) try return Integer.parseInt(s); catch (Exception e) return 0; /* * 字符转长整数

25、. * * 如果发生错误,返回0 */ public static long stol(String s) try return Long.parseLong(s); catch (Exception e) return 0; /* * 字符转浮点数. * * 如果发生错误,返回0 */ public static double stof(String s) try return Double.parseDouble(s); catch (Exception e) return 0; /* * 字符集转换8859格式函数. * * 如果错误,则返回原串 */ public static Str

26、ing toISO(String str) if ( str = null ) return null; try return new String(str.getBytes(), "8859_1"); catch (Exception e) return str; /* * 简单的字符穿编码 */ public static String encode(String ss,String enc) StringBuffer sb=new StringBuffer(""); int x=0; for (int i=0;i<ss.length();i+

27、) int z=ss.charAt(i)enc.charAt(x); x+; if (x>=enc.length() x=0; if (i>0) sb.append('|'); sb.append(Long.toHexString(z); return sb.toString(); /* * 简单的字符穿解码 */ public static String decode(String ss,String enc) if (ss=null) return null; StringBuffer sb=new StringBuffer(""); int

28、 x=0; for (int i=1;i+) try String s=middle(ss,"|",i); if (s.length()=0) break; int z=Long.decode("#"+s).intValue()enc.charAt(x); x+; if (x>=enc.length() x=0; sb.append(char)z); catch (Exception e) return sb.toString(); /BASE64的字符串编码和解码 private static byte basis_64 = 'A'

29、;,'B','C','D','E','F','G','H', 'I','J','K','L','M','N','O','P', 'Q','R','S','T','U','V','W','X', 'Y','Z&

30、#39;,'a','b','c','d','e','f', 'g','h','i','j','k','l','m','n', 'o','p','q','r','s','t','u','v', 'w','x','

31、;y','z','0','1','2','3', '4','5','6','7','8','9','.','$', '?','?','?','?','?','?','?','?', '?','?','?',&

32、#39;?','?','?','?','?', '?','?','?','?','?','?','?','?', '?','?','?','?','?','?','?','?', '?','?','?','?'

33、;,'?','?','?','?', '?','?','?','?','?','?','?','?', '?','?','?','?','?','?','?','?', '?','?','?','?','?&

34、#39;,'?','?','?' ; private static byte index_64 = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60

35、, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 ; private static byte CHA

36、R64(byte c) if (c<0 | c> 127) return -1; return index_64c; /* * 64位编码. * * 返回实际长度,0=fail -1=BufOverflow */ static int encode64(byte in, int inlen, byte out, int outmax) int olen = (inlen + 2) / 3 * 4; if (outmax < olen) return -1; int i=0,j=0; /blah = outi; while (inlen >= 3) byte n=(byt

37、e)(char)inj>>>2)&0x3f); outi=basis_64n; i+; n=(byte)(char)inj << 4) & 0x30) | (char)inj+1>>>4)&0xf)&0x3f); outi=basis_64n; i+; n=(byte)(char)inj+1 << 2) & 0x3c) | (char)inj+2>>>6)&0x3)&0x3f); outi=basis_64n; i+; n=(byte)(char)inj+2 &

38、amp; 0x3f); outi=basis_64n; i+; inlen -= 3; j+=3; if (inlen > 0) byte n=(byte)(char)inj>>>2)&0x3f); outi = basis_64n; byte oval =(byte)(char)inj << 4) & 0x30); if (inlen > 1) oval |= (char)inj+1 >>> 4)&0xf; i+; outi=basis_64oval; i+; outi=(inlen < 2) ? (b

39、yte)'!' : basis_64(byte)(char)inj+1 << 2) & 0x3c); i+; outi= (byte)'!' i+; if (olen < outmax) outi=0; return olen; /* * 64位解码 */ public static int decode64(byte in, int inlen, byte out) int len=0; byte c1,c2,c3,c4; int i=0,j=0; /if (in0 = '.' && in1 = 

40、9; ') i+=2; if (ini =0) return -1; for (int lup = 0; lup < inlen / 4; lup+) c1 = ini; if (CHAR64(c1) = -1) return -1; c2 = ini+1; if (CHAR64(c2) = -1) return -1; c3 = ini+2; if (c3 != '!' && CHAR64(c3) = -1) return -1; c4 = ini+3; if (c4 != '!' && CHAR64(c4) =

41、-1) return -1; /Util.Err("c1="+c1+",c2="+c2+","+c3+","+c4); i+=4; /Util.Err("c1="+CHAR64(c1)+",c2="+CHAR64(c2)+","+CHAR64(c3)+","+CHAR64(c4); outj= (byte)(char)CHAR64(c1) << 2) & 0xfc) | (char)CHAR64(c2) >&g

42、t;> 4); j+; len+; if (c3 != '!') outj=(byte)(char)CHAR64(c2) << 4) & 0xf0) | (char)CHAR64(c3) >>> 2); j+; +len; if (c4 != '!') outj=(byte)(char)CHAR64(c3) << 6) & 0xc0) | (char)CHAR64(c4); j+; +len; outj=0; return len; /* * 字节专字符串 */ public static Stri

43、ng getBytes(byte buf,int from,int len) StringBuffer st=new StringBuffer(""); for (int i=0;i<len;i+) st.append(char)bufi+from); return st.toString(); /* * 字符串64位编码 */ public static String encode(String ss) /Util.Err("encoding "+ss); if (ss=null) return null; if (ss.length()=0)

44、return "" byte x=ss.getBytes(); byte z=new bytex.length+x.length+4; /for (int i=0;i<x.length;i+) Util.Err("x"+i+"="+xi); int size=encode64(x,x.length,z,z.length); if (size<=0) return "" String s=getBytes(z,0,size); x=null; z=null; return s; /* * 64位编码流文件

45、 * param is输入流 * param buf输出 * throws IOException */ public static void encodeStream(InputStream is,StringBuffer buf) throws IOException /Util.Err("encoding "+ss); if (is=null) return; byte x=new byte3072; byte z=new bytex.length+x.length+4; while (true) int size = is.read(x); if (size=-1)

46、 break; int sz = encode64(x, size, z, z.length); if (sz > 0) String s = getBytes(z, 0, sz); buf.append(s); x=null; z=null; /* * 对数据流的64位编码 */ public static void encodeStream(InputStream is,OutputStream os) throws IOException /Util.Err("encoding "+ss); if (is=null) return; byte x=new byt

47、e3072; byte z=new bytex.length+x.length+4; while (true) int size = is.read(x); if (size=-1) break; int sz = encode64(x, size, z, z.length); if (sz > 0) os.write(z,0,sz); x=null; z=null; /* * 对数据流的64位解码 */ public static void decodeStream(InputStream is,OutputStream os) throws IOException if (is=nu

48、ll) return; byte x=new byte4096; byte z=new byte4096; while(true) int nn=0; while (nn<4096) int num = is.read(x); if (num = -1) break; nn+=num; if (nn=0) break; int size=decode64(x,nn,z); os.write(z,0,size); /* * 保存属性到文件 */ public static void saveProperties(File f,Properties p,String but) try Out

49、putStreamWriter m = new OutputStreamWriter(new FileOutputStream(f),"UTF8");for (Enumeration e=p.keys();e.hasMoreElements();)String key=(String)e.nextElement();String val=(String)p.get(key);if (but!=null && but.length()>0)if (key.startsWith(but) continue;if (key.length()=0) conti

50、nue;m.write(key+"="+val+"rn");m.close(); catch (Exception e) Util.Err("saveProperties ERR:"+e); /* * 对zip文件的读函数. * * entry为目录和文件名 */ public static InputStream loadZipStream(String fn,String entry) File f=new File(fn); if (!f.exists() return null; try ZipFile z = new Zip

51、File(f); ZipEntry en = z.getEntry(entry); if (en = null) return null; return z.getInputStream(en); catch(Exception e) return null; /* * 对jar文件的读函数. * * entry为目录和文件名 */ public static InputStream loadJarStream(String fn,String entry) File f=new File(fn); if (!f.exists() return null; try JarFile z = ne

52、w JarFile(f); JarEntry en = z.getJarEntry(entry); if (en = null) return null; return z.getInputStream(en); catch(Exception e) return null; /* * 转换为Java格式字符串. * * m: 1=单引号处理 2=双引号处理 3=都处理 */ public static String stos(String s,int m) StringBuffer b=new StringBuffer(s); int i=0; while (i<b.length() if (b.charAt(i)='"' && (

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论