﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-TNT blog-文章分类-JAVA</title><link>http://www.blogjava.net/terrywu/category/11703.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 16 Aug 2007 08:03:40 GMT</lastBuildDate><pubDate>Thu, 16 Aug 2007 08:03:40 GMT</pubDate><ttl>60</ttl><item><title>log4j.properties使用</title><link>http://www.blogjava.net/terrywu/articles/137164.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Thu, 16 Aug 2007 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/137164.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/137164.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/137164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/137164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/137164.html</trackback:ping><description><![CDATA[<p>log4j.properties 使用<br>一.参数意义说明<br>输出级别的种类<br>ERROR、WARN、INFO、DEBUG<br>ERROR 为严重错误 主要是程序的错误<br>WARN 为一般警告，比如session丢失<br>INFO 为一般要显示的信息，比如登录登出<br>DEBUG 为程序的调试信息</p>
<p>配置日志信息输出目的地<br>log4j.appender.appenderName = fully.qualified.name.of.appender.class<br>1.org.apache.log4j.ConsoleAppender（控制台）<br>2.org.apache.log4j.FileAppender（文件）<br>3.org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）<br>4.org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件）<br>5.org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）</p>
<p><br>配置日志信息的格式<br>log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br>1.org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br>2.org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br>3.org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br>4.org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）</p>
<p>控制台选项<br>Threshold=DEBUG:指定日志消息的输出最低层次。<br>ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br>Target=System.err：默认情况下是：System.out,指定输出控制台</p>
<p>FileAppender 选项<br>Threshold=DEBUF:指定日志消息的输出最低层次。<br>ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br>File=mylog.txt:指定消息输出到mylog.txt文件。<br>Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。</p>
<p>RollingFileAppender 选项<br>Threshold=DEBUG:指定日志消息的输出最低层次。<br>ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br>File=mylog.txt:指定消息输出到mylog.txt文件。<br>Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br>MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时，将会自动滚动，即将原来的内容移到mylog.log.1文件。<br>MaxBackupIndex=2:指定可以产生的滚动文件的最大数。 </p>
<p>log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n<br>日志信息格式中几个符号所代表的含义：<br>&nbsp;-X号: X信息输出时左对齐；<br>&nbsp;%p: 输出日志信息优先级，即DEBUG，INFO，WARN，ERROR，FATAL,<br>&nbsp;%d: 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921<br>&nbsp;%r: 输出自应用启动到输出该log信息耗费的毫秒数<br>&nbsp;%c: 输出日志信息所属的类目，通常就是所在类的全名<br>&nbsp;%t: 输出产生该日志事件的线程名<br>&nbsp;%l: 输出日志事件的发生位置，相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main (TestLog4.java:10)<br>&nbsp;%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。<br>&nbsp;%%: 输出一个"%"字符<br>&nbsp;%F: 输出日志消息产生时所在的文件名称<br>&nbsp;%L: 输出代码中的行号<br>&nbsp;%m: 输出代码中指定的消息,产生的日志具体信息<br>&nbsp;%n: 输出一个回车换行符，Windows平台为"\r\n"，Unix平台为"\n"输出日志信息换行<br>&nbsp;可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如：<br>&nbsp;1)%20c：指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，默认的情况下右对齐。<br>&nbsp;2)%-20c:指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，"-"号指定左对齐。<br>&nbsp;3)%.30c:指定输出category的名称，最大的宽度是30，如果category的名称大于30的话，就会将左边多出的字符截掉，但小于30的话也不会有空格。<br>&nbsp;4)%20.30c:如果category的名称小于20就补空格，并且右对齐，如果其名称长于30字符，就从左边较远输出的字符截掉。 </p>
<p>二.文件配置Sample1<br>log4j.rootLogger=DEBUG,A1,R<br>#log4j.rootLogger=INFO,A1,R</p>
<p># ConsoleAppender 输出<br>log4j.appender.A1=org.apache.log4j.ConsoleAppender<br>log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br>log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n</p>
<p># File 输出 一天一个文件,输出路径可以定制,一般在根路径下<br>log4j.appender.R=org.apache.log4j.DailyRollingFileAppender<br>log4j.appender.R.File=blog_log.txt<br>log4j.appender.R.MaxFileSize=500KB<br>log4j.appender.R.MaxBackupIndex=10<br>log4j.appender.R.layout=org.apache.log4j.PatternLayout<br>log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n</p>
<p>文件配置Sample2<br>下面给出的Log4J配置文件实现了输出到控制台，文件，回滚文件，发送日志邮件，输出到数据库日志表，自定义标签等全套功能。<br>log4j.rootLogger=DEBUG,CONSOLE,A1,im <br>#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE </p>
<p>log4j.addivity.org.apache=true </p>
<p><br>################### <br># Console Appender <br>################### <br>log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender <br>log4j.appender.Threshold=DEBUG <br>log4j.appender.CONSOLE.Target=System.out <br>log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout <br>log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br>#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]
n%c[CATEGORY]%n%m[MESSAGE]%n%n </p>
<p><br>##################### <br># File Appender <br>##################### <br>log4j.appender.FILE=org.apache.log4j.FileAppender <br>log4j.appender.FILE.File=file.log <br>log4j.appender.FILE.Append=false <br>log4j.appender.FILE.layout=org.apache.log4j.PatternLayout <br>log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br># Use this layout for LogFactor 5 analysis </p>
<p>&nbsp;</p>
<p>######################## <br># Rolling File <br>######################## <br>log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender <br>log4j.appender.ROLLING_FILE.Threshold=ERROR <br>log4j.appender.ROLLING_FILE.File=rolling.log <br>log4j.appender.ROLLING_FILE.Append=true <br>log4j.appender.ROLLING_FILE.MaxFileSize=10KB <br>log4j.appender.ROLLING_FILE.MaxBackupIndex=1 <br>log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout <br>log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
<p><br>#################### <br># Socket Appender <br>#################### <br>log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender <br>log4j.appender.SOCKET.RemoteHost=localhost <br>log4j.appender.SOCKET.Port=5001 <br>log4j.appender.SOCKET.LocationInfo=true <br># Set up for Log Facter 5 <br>log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout <br>log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
</p>
<p><br>######################## <br># Log Factor 5 Appender <br>######################## <br>log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender <br>log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000 </p>
<p><br>######################## <br># SMTP Appender <br>####################### <br>log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender <br>log4j.appender.MAIL.Threshold=FATAL <br>log4j.appender.MAIL.BufferSize=10 <br><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#77;&#65;&#73;&#76;&#46;&#70;&#114;&#111;&#109;&#61;&#99;&#104;&#101;&#110;&#121;&#108;&#64;&#104;&#111;&#108;&#108;&#121;&#99;&#114;&#109;&#46;&#99;&#111;&#109;">log4j.appender.MAIL.From=chenyl@hollycrm.com</a> <br>log4j.appender.MAIL.SMTPHost=mail.hollycrm.com <br>log4j.appender.MAIL.Subject=Log4J Message <br><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#77;&#65;&#73;&#76;&#46;&#84;&#111;&#61;&#99;&#104;&#101;&#110;&#121;&#108;&#64;&#104;&#111;&#108;&#108;&#121;&#99;&#114;&#109;&#46;&#99;&#111;&#109;">log4j.appender.MAIL.To=chenyl@hollycrm.com</a> <br>log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout <br>log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
<p><br>######################## <br># JDBC Appender <br>####################### <br>log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender <br>log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test <br>log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver <br>log4j.appender.DATABASE.user=root <br>log4j.appender.DATABASE.password= <br>log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') <br>log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout <br>log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
<p><br>log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender <br>log4j.appender.A1.File=SampleMessages.log4j <br>log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j' <br>log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout </p>
<p>################### <br>#自定义Appender <br>################### <br>log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender </p>
<p>log4j.appender.im.host = mail.cybercorlin.net <br>log4j.appender.im.username = username <br>log4j.appender.im.password = password <br>log4j.appender.im.recipient = <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#111;&#114;&#108;&#105;&#110;&#64;&#99;&#121;&#98;&#101;&#114;&#99;&#111;&#114;&#108;&#105;&#110;&#46;&#110;&#101;&#116;">corlin@cybercorlin.net</a> </p>
<p>log4j.appender.im.layout=org.apache.log4j.PatternLayout <br>log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<p><br>三.高级使用<br>实验目的：<br>&nbsp;1.把FATAL级错误写入2000NT日志<br>&nbsp;2. WARN，ERROR，FATAL级错误发送email通知管理员<br>&nbsp;3.其他级别的错误直接在后台输出 </p>
<p><br>&nbsp;实验步骤：<br>&nbsp;输出到2000NT日志<br>&nbsp;1.把Log4j压缩包里的NTEventLogAppender.dll拷到WINNT\SYSTEM32目录下<br>&nbsp;2.写配置文件log4j.properties</p>
<p>&nbsp;# 在2000系统日志输出<br>&nbsp;log4j.logger.NTlog=FATAL, A8<br>&nbsp;# APPENDER A8<br>&nbsp;log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender<br>&nbsp;log4j.appender.A8.Source=JavaTest<br>&nbsp;log4j.appender.A8.layout=org.apache.log4j.PatternLayout<br>&nbsp;log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n</p>
<p>&nbsp;3.调用代码：<br>&nbsp;Logger logger2 = Logger.getLogger("NTlog"); //要和配置文件中设置的名字相同<br>&nbsp;logger2.debug("debug!!!");<br>&nbsp;logger2.info("info!!!");<br>&nbsp;logger2.warn("warn!!!");<br>&nbsp;logger2.error("error!!!");<br>&nbsp;//只有这个错误才会写入2000日志<br>&nbsp;logger2.fatal("fatal!!!");</p>
<p><br>&nbsp;发送email通知管理员：<br>&nbsp;1. 首先下载JavaMail和JAF, <br>&nbsp; <a href="http://java.sun.com/j2ee/ja/javamail/index.html">http://java.sun.com/j2ee/ja/javamail/index.html</a> <br>&nbsp; <a href="http://java.sun.com/beans/glasgow/jaf.html">http://java.sun.com/beans/glasgow/jaf.html</a> <br>&nbsp;在项目中引用mail.jar和activation.jar。<br>&nbsp;2. 写配置文件<br>&nbsp;# 将日志发送到email<br>&nbsp;log4j.logger.MailLog=WARN,A5<br>&nbsp;#&nbsp; APPENDER A5<br>&nbsp;log4j.appender.A5=org.apache.log4j.net.SMTPAppender<br>&nbsp;log4j.appender.A5.BufferSize=5<br>&nbsp;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#65;&#53;&#46;&#84;&#111;&#61;&#99;&#104;&#117;&#110;&#106;&#105;&#101;&#64;&#50;&#54;&#51;&#46;&#110;&#101;&#116;">log4j.appender.A5.To=chunjie@263.net</a><br>&nbsp;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#65;&#53;&#46;&#70;&#114;&#111;&#109;&#61;&#101;&#114;&#114;&#111;&#114;&#64;&#101;&#114;&#114;&#111;&#114;&#46;&#99;&#111;&#109;">log4j.appender.A5.From=error@error.com</a><br>&nbsp;log4j.appender.A5.Subject=ErrorLog<br>&nbsp;log4j.appender.A5.SMTPHost=smtp.263.net<br>&nbsp;log4j.appender.A5.layout=org.apache.log4j.PatternLayout<br>&nbsp;log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n<br>&nbsp;3.调用代码：<br>&nbsp;//把日志发送到mail<br>&nbsp;Logger logger3 = Logger.getLogger("MailLog");<br>&nbsp;logger3.warn("warn!!!");<br>&nbsp;logger3.error("error!!!");<br>&nbsp;logger3.fatal("fatal!!!");</p>
<p>&nbsp;在后台输出所有类别的错误：<br>&nbsp;1. 写配置文件<br>&nbsp;# 在后台输出<br>&nbsp;log4j.logger.console=DEBUG, A1<br>&nbsp;# APPENDER A1<br>&nbsp;log4j.appender.A1=org.apache.log4j.ConsoleAppender<br>&nbsp;log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br>&nbsp;log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n<br>&nbsp;2．调用代码<br>&nbsp;Logger logger1 = Logger.getLogger("console");<br>&nbsp;logger1.debug("debug!!!");<br>&nbsp;logger1.info("info!!!");<br>&nbsp;logger1.warn("warn!!!");<br>&nbsp;logger1.error("error!!!");<br>&nbsp;logger1.fatal("fatal!!!");</p>
<p>&nbsp;--------------------------------------------------------------------<br>&nbsp;全部配置文件：log4j.properties<br>&nbsp;# 在后台输出<br>&nbsp;log4j.logger.console=DEBUG, A1<br>&nbsp;# APPENDER A1<br>&nbsp;log4j.appender.A1=org.apache.log4j.ConsoleAppender<br>&nbsp;log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br>&nbsp;log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n</p>
<p>&nbsp;# 在2000系统日志输出<br>&nbsp;log4j.logger.NTlog=FATAL, A8<br>&nbsp;# APPENDER A8<br>&nbsp;log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender<br>&nbsp;log4j.appender.A8.Source=JavaTest<br>&nbsp;log4j.appender.A8.layout=org.apache.log4j.PatternLayout<br>&nbsp;log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n</p>
<p>&nbsp;# 将日志发送到email<br>&nbsp;log4j.logger.MailLog=WARN,A5<br>&nbsp;#&nbsp; APPENDER A5<br>&nbsp;log4j.appender.A5=org.apache.log4j.net.SMTPAppender<br>&nbsp;log4j.appender.A5.BufferSize=5<br>&nbsp;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#65;&#53;&#46;&#84;&#111;&#61;&#99;&#104;&#117;&#110;&#106;&#105;&#101;&#64;&#50;&#54;&#51;&#46;&#110;&#101;&#116;">log4j.appender.A5.To=chunjie@263.net</a><br>&nbsp;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#65;&#53;&#46;&#70;&#114;&#111;&#109;&#61;&#101;&#114;&#114;&#111;&#114;&#64;&#101;&#114;&#114;&#111;&#114;&#46;&#99;&#111;&#109;">log4j.appender.A5.From=error@error.com</a><br>&nbsp;log4j.appender.A5.Subject=ErrorLog<br>&nbsp;log4j.appender.A5.SMTPHost=smtp.263.net<br>&nbsp;log4j.appender.A5.layout=org.apache.log4j.PatternLayout<br>&nbsp;log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n</p>
<p>&nbsp;全部代码：Log4jTest.java<br>&nbsp; <br>/* <br>&nbsp; * 创建日期 2003-11-13 <br>&nbsp; */ <br>&nbsp;package edu.bcu.Bean; <br>&nbsp;import org.apache.log4j.*; <br>&nbsp;//import org.apache.log4j.nt.*; <br>&nbsp;//import org.apache.log4j.net.*; <br>&nbsp;/** <br>&nbsp; * @author yanxu <br>&nbsp; */ <br>&nbsp;public class Log4jTest <br>&nbsp;{ <br>&nbsp; public static void main(String args[]) <br>&nbsp; { <br>&nbsp;&nbsp; PropertyConfigurator.configure("log4j.properties"); <br>&nbsp;&nbsp; //在后台输出 <br>&nbsp;&nbsp; Logger logger1 = Logger.getLogger("console"); <br>&nbsp;&nbsp; logger1.debug("debug!!!"); <br>&nbsp;&nbsp; logger1.info("info!!!"); <br>&nbsp;&nbsp; logger1.warn("warn!!!"); <br>&nbsp;&nbsp; logger1.error("error!!!"); <br>&nbsp;&nbsp; logger1.fatal("fatal!!!"); </p>
<p>&nbsp;&nbsp; //在NT系统日志输出 <br>&nbsp;&nbsp; Logger logger2 = Logger.getLogger("NTlog"); <br>&nbsp;&nbsp; //NTEventLogAppender nla = new NTEventLogAppender(); <br>&nbsp;&nbsp; logger2.debug("debug!!!"); <br>&nbsp;&nbsp; logger2.info("info!!!"); <br>&nbsp;&nbsp; logger2.warn("warn!!!"); <br>&nbsp;&nbsp; logger2.error("error!!!"); <br>&nbsp;&nbsp; //只有这个错误才会写入2000日志 <br>&nbsp;&nbsp; logger2.fatal("fatal!!!"); </p>
<p>&nbsp;&nbsp; //把日志发送到mail <br>&nbsp;&nbsp; Logger logger3 = Logger.getLogger("MailLog"); <br>&nbsp;&nbsp; //SMTPAppender sa = new SMTPAppender(); <br>&nbsp;&nbsp; logger3.warn("warn!!!"); <br>&nbsp;&nbsp; logger3.error("error!!!"); <br>&nbsp;&nbsp; logger3.fatal("fatal!!!"); <br>&nbsp; } <br>&nbsp;} <br>&nbsp;</p>
<br><img src ="http://www.blogjava.net/terrywu/aggbug/137164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2007-08-16 11:19 <a href="http://www.blogjava.net/terrywu/articles/137164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java日期操作常用方法</title><link>http://www.blogjava.net/terrywu/articles/58961.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Wed, 19 Jul 2006 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/58961.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/58961.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/58961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/58961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/58961.html</trackback:ping><description><![CDATA[
取得指定月份的第一天与取得指定月份的最后一天  <br />
http://iamin.blogdriver.com/iamin/847990.html  <br />
        /**  <br />
          *  取得指定月份的第一天  <br />
          *  <br />
          *  @param  strdate  String  <br />
          *  @return  String  <br />
          */  <br />
        public  String  getMonthBegin(String  strdate)  <br />
        {  <br />
                java.util.Date  date  =  parseFormatDate(strdate);  <br />
                return  formatDateByFormat(date,"yyyy-MM")  +  "-01";  <br />
        }  <br />
  <br />
        /**  <br />
          *  取得指定月份的最后一天  <br />
          *  <br />
          *  @param  strdate  String  <br />
          *  @return  String  <br />
          */  <br />
        public  String  getMonthEnd(String  strdate)  <br />
        {  <br />
                java.util.Date  date  =  parseFormatDate(getMonthBegin(strdate));  <br />
                Calendar  calendar  =  Calendar.getInstance();  <br />
                calendar.setTime(date);  <br />
                calendar.add(Calendar.MONTH,1);  <br />
                calendar.add(Calendar.DAY_OF_YEAR,  -1);  <br />
                return  formatDate(calendar.getTime());  <br />
        }  <br />
  <br />
        /**  <br />
          *  常用的格式化日期  <br />
          *  <br />
          *  @param  date  Date  <br />
          *  @return  String  <br />
          */  <br />
        public  String  formatDate(java.util.Date  date)  <br />
        {  <br />
                return  formatDateByFormat(date,"yyyy-MM-dd");  <br />
        }  <br />
  <br />
        /**  <br />
          *  以指定的格式来格式化日期  <br />
          *  <br />
          *  @param  date  Date  <br />
          *  @param  format  String  <br />
          *  @return  String  <br />
          */  <br />
        public  String  formatDateByFormat(java.util.Date  date,String  format)  <br />
        {  <br />
                String  result  =  "";  <br />
                if(date  !=  null)  <br />
                {  <br />
                        try  <br />
                        {  <br />
                                SimpleDateFormat  sdf  =  new  SimpleDateFormat(format);  <br />
                                result  =  sdf.format(date);  <br />
                        }  <br />
                        catch(Exception  ex)  <br />
                        {  <br />
                                LOGGER.info("date:"  +  date);  <br />
                                ex.printStackTrace();  <br />
                        }  <br />
                }  <br />
                return  result;  <br />
        }  <br />
---------------------------------------------------------------  <br />
  <br />
package  com.app.util;  <br />
  <br />
/**  <br />
  *  日期操作  <br />
  *    <br />
  *  @author  xxx  <br />
  *  @version  2.0  jdk1.4.0  tomcat5.1.0  *  Updated  Date:2005/03/10  <br />
  */  <br />
public  class  DateUtil  {  <br />
            /**  <br />
              *  格式化日期  <br />
              *    <br />
              *  @param  dateStr  <br />
              *                        字符型日期  <br />
              *  @param  format  <br />
              *                        格式  <br />
              *  @return  返回日期  <br />
              */  <br />
            public  static  java.util.Date  parseDate(String  dateStr,  String  format)  {  <br />
                        java.util.Date  date  =  null;  <br />
                        try  {  <br />
                                    java.text.DateFormat  df  =  new  java.text.SimpleDateFormat(format);  <br />
                                    String  dt=Normal.parse(dateStr).replaceAll(  <br />
                                                            "-",  "/");  <br />
                                    if((!dt.equals(""))&amp;&amp;(dt.length()&lt;format.length())){  <br />
                                                dt+=format.substring(dt.length()).replaceAll("[YyMmDdHhSs]","0");  <br />
                                    }  <br />
                                    date  =  (java.util.Date)  df.parse(dt);  <br />
                        }  catch  (Exception  e)  {  <br />
                        }  <br />
                        return  date;  <br />
            }  <br />
  <br />
            public  static  java.util.Date  parseDate(String  dateStr)  {  <br />
                        return  parseDate(dateStr,  "yyyy/MM/dd");  <br />
            }  <br />
  <br />
            public  static  java.util.Date  parseDate(java.sql.Date  date)  {  <br />
                        return  date;  <br />
            }  <br />
              <br />
            public  static  java.sql.Date  parseSqlDate(java.util.Date  date)  {  <br />
                        if  (date  !=  null)  <br />
                                    return  new  java.sql.Date(date.getTime());  <br />
                        else  <br />
                                    return  null;  <br />
            }  <br />
  <br />
            public  static  java.sql.Date  parseSqlDate(String  dateStr,  String  format)  {  <br />
                        java.util.Date  date  =  parseDate(dateStr,  format);  <br />
                        return  parseSqlDate(date);  <br />
            }  <br />
  <br />
            public  static  java.sql.Date  parseSqlDate(String  dateStr)  {  <br />
                        return  parseSqlDate(dateStr,  "yyyy/MM/dd");  <br />
            }  <br />
  <br />
              <br />
            public  static  java.sql.Timestamp  parseTimestamp(String  dateStr,  <br />
                                    String  format)  {  <br />
                        java.util.Date  date  =  parseDate(dateStr,  format);  <br />
                        if  (date  !=  null)  {  <br />
                                    long  t  =  date.getTime();  <br />
                                    return  new  java.sql.Timestamp(t);  <br />
                        }  else  <br />
                                    return  null;  <br />
            }  <br />
  <br />
            public  static  java.sql.Timestamp  parseTimestamp(String  dateStr)  {  <br />
                        return  parseTimestamp(dateStr,  "yyyy/MM/dd  HH:mm:ss");  <br />
            }  <br />
  <br />
            /**  <br />
              *  格式化输出日期  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @param  format  <br />
              *                        格式  <br />
              *  @return  返回字符型日期  <br />
              */  <br />
            public  static  String  format(java.util.Date  date,  String  format)  {  <br />
                        String  result  =  "";  <br />
                        try  {  <br />
                                    if  (date  !=  null)  {  <br />
                                                java.text.DateFormat  df  =  new  java.text.SimpleDateFormat(format);  <br />
                                                result  =  df.format(date);  <br />
                                    }  <br />
                        }  catch  (Exception  e)  {  <br />
                        }  <br />
                        return  result;  <br />
            }  <br />
  <br />
            public  static  String  format(java.util.Date  date)  {  <br />
                        return  format(date,  "yyyy/MM/dd");  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回年份  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回年份  <br />
              */  <br />
            public  static  int  getYear(java.util.Date  date)  {  <br />
                        java.util.Calendar  c  =  java.util.Calendar.getInstance();  <br />
                        c.setTime(date);  <br />
                        return  c.get(java.util.Calendar.YEAR);  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回月份  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回月份  <br />
              */  <br />
            public  static  int  getMonth(java.util.Date  date)  {  <br />
                        java.util.Calendar  c  =  java.util.Calendar.getInstance();  <br />
                        c.setTime(date);  <br />
                        return  c.get(java.util.Calendar.MONTH)  +  1;  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回日份  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回日份  <br />
              */  <br />
            public  static  int  getDay(java.util.Date  date)  {  <br />
                        java.util.Calendar  c  =  java.util.Calendar.getInstance();  <br />
                        c.setTime(date);  <br />
                        return  c.get(java.util.Calendar.DAY_OF_MONTH);  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回小时  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回小时  <br />
              */  <br />
            public  static  int  getHour(java.util.Date  date)  {  <br />
                        java.util.Calendar  c  =  java.util.Calendar.getInstance();  <br />
                        c.setTime(date);  <br />
                        return  c.get(java.util.Calendar.HOUR_OF_DAY);  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回分钟  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回分钟  <br />
              */  <br />
            public  static  int  getMinute(java.util.Date  date)  {  <br />
                        java.util.Calendar  c  =  java.util.Calendar.getInstance();  <br />
                        c.setTime(date);  <br />
                        return  c.get(java.util.Calendar.MINUTE);  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回秒钟  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回秒钟  <br />
              */  <br />
            public  static  int  getSecond(java.util.Date  date)  {  <br />
                        java.util.Calendar  c  =  java.util.Calendar.getInstance();  <br />
                        c.setTime(date);  <br />
                        return  c.get(java.util.Calendar.SECOND);  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回毫秒  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回毫秒  <br />
              */  <br />
            public  static  long  getMillis(java.util.Date  date)  {  <br />
                        java.util.Calendar  c  =  java.util.Calendar.getInstance();  <br />
                        c.setTime(date);  <br />
                        return  c.getTimeInMillis();  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回字符型日期  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回字符型日期  <br />
              */  <br />
            public  static  String  getDate(java.util.Date  date)  {  <br />
                        return  format(date,  "yyyy/MM/dd");  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回字符型时间  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回字符型时间  <br />
              */  <br />
            public  static  String  getTime(java.util.Date  date)  {  <br />
                        return  format(date,  "HH:mm:ss");  <br />
            }  <br />
  <br />
            /**  <br />
              *  返回字符型日期时间  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @return  返回字符型日期时间  <br />
              */  <br />
            public  static  String  getDateTime(java.util.Date  date)  {  <br />
                        return  format(date,  "yyyy/MM/dd  HH:mm:ss");  <br />
            }  <br />
  <br />
            /**  <br />
              *  日期相加  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @param  day  <br />
              *                        天数  <br />
              *  @return  返回相加后的日期  <br />
              */  <br />
            public  static  java.util.Date  addDate(java.util.Date  date,  int  day)  {  <br />
                        java.util.Calendar  c  =  java.util.Calendar.getInstance();  <br />
                        c.setTimeInMillis(getMillis(date)  +  ((long)  day)  *  24  *  3600  *  1000);  <br />
                        return  c.getTime();  <br />
            }  <br />
  <br />
            /**  <br />
              *  日期相减  <br />
              *    <br />
              *  @param  date  <br />
              *                        日期  <br />
              *  @param  date1  <br />
              *                        日期  <br />
              *  @return  返回相减后的日期  <br />
              */  <br />
            public  static  int  diffDate(java.util.Date  date,  java.util.Date  date1)  {  <br />
                        return  (int)  ((getMillis(date)  -  getMillis(date1))  /  (24  *  3600  *  1000));  <br />
            }              <br />
}  <br />
---------------------------------------------------------------  <br />
  <br />
我来个简单点的,也许有点用  <br />
  <br />
Calendar  now  =  Calendar.getInstance();  <br />
int  year  =  now.get(Calendar.YEAR);  <br />
int  date  =  now.get(Calendar.DAY_OF_MONTH);  <br />
int  month  =  now.get(Calendar.MONTH)  +  1;  <br />
int  hour  =  now.get(Calendar.HOUR);  <br />
int  min  =  now.get(Calendar.MINUTE);  <br />
int  sec  =  now.get(Calendar.SECOND);  <br /><img src ="http://www.blogjava.net/terrywu/aggbug/58961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2006-07-19 12:15 <a href="http://www.blogjava.net/terrywu/articles/58961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 随机数字 浮点数 字符串产生 </title><link>http://www.blogjava.net/terrywu/articles/49465.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Thu, 01 Jun 2006 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/49465.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/49465.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/49465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/49465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/49465.html</trackback:ping><description><![CDATA[
		<p>JSP中经常用到随机数字或字符(如密码产生 sessionid产生)可以使用taglib标签产生,本人使用bean产生随机数:<br /></p>
		<p>1.可以产生10000000 和 99999999之间随机数</p>
		<p>2.可以产生规定数字之间的随机数,如25 100之间</p>
		<p>3.可以使用algorithm 和 provider产生一个SecureRandom随机数字或字符串<br />object instead of a Random object: 71 </p>
		<p>4.可以产生浮点浮点随机数;</p>
		<p>5.可以产生a-zA-Z0-9之间的规定长度个字符串</p>
		<p>6.可以产生规定长度的小写字母字符串</p>
		<p>7.可以产生任意字符串.<br /></p>
		<p>以下jsp bean 在Tomcat Win2000 下调试通过:</p>
		<table cellspacing="5" cellpadding="3" width="100%" align="center" border="0">
				<tbody>
						<tr>
								<td bgcolor="#c0d09f">
										<p>/*<br />*<br />* 随机数字bean<br />*/ </p>
										<p>package mycollect;</p>
										<p>import java.util.*;<br />import java.security.SecureRandom;<br />import java.security.NoSuchAlgorithmException;<br />import java.security.NoSuchProviderException;</p>
										<p>
												<br />public class RandomNum {</p>
										<p>private Long randomnum = null;<br />private Float randomfloat = null;<br />private boolean floatvalue = false;<br />private long upper = 100;<br />private long lower = 0;<br />private String algorithm = null;<br />private String provider = null;<br />private boolean secure = false;<br />private Random random = null;<br />private SecureRandom secrandom = null;</p>
										<p>private final float getFloat() {<br />if (random == null)<br />return secrandom.nextFloat();<br />else<br />return random.nextFloat();<br />}</p>
										<p>public final void generateRandomObject() throws Exception {</p>
										<p>// check to see if the object is a SecureRandom object<br />if (secure) {<br />try {<br />// get an instance of a SecureRandom object<br />if (provider != null)<br />// search for algorithm in package provider<br />secrandom = SecureRandom.getInstance(algorithm, provider);<br />else<br />secrandom = SecureRandom.getInstance(algorithm);<br />} catch (NoSuchAlgorithmException ne) {<br />throw new Exception(ne.getMessage());<br />} catch (NoSuchProviderException pe) {<br />throw new Exception(pe.getMessage());<br />}<br />} else<br />random = new Random();<br />}</p>
										<p>/**<br />* generate the random number<br />*<br />*/<br />private final void generaterandom() {</p>
										<p>int tmprandom = 0; // temp storage for random generated number<br />Integer rand;</p>
										<p>// check to see if float value is expected<br />if (floatvalue)<br />randomfloat = new Float(getFloat());<br />else<br />randomnum = new Long(lower + (long) ((getFloat() * (upper - lower))));<br />}</p>
										<p>public final Number getRandom() {<br />generaterandom(); <br />if (floatvalue)<br />return randomfloat;<br />else<br />return randomnum;<br />}</p>
										<p>public final void setRange(long low, long up) {</p>
										<p>// set the upper and lower bound of the range<br />lower = low;<br />upper = up;</p>
										<p>// check to see if a float value is expected<br />if ((lower == 0) &amp;&amp; (upper == 1))<br />floatvalue = true;<br />}</p>
										<p>/**<br />* set the algorithm name<br />*<br />* @param value name of the algorithm to use for a SecureRandom object<br />*<br />*/<br />public final void setAlgorithm(String value) {<br />algorithm = value;<br />secure = true; // a SecureRandom object is to be used<br />}</p>
										<p>public final void setProvider(String value) <br />{<br />provider = value;<br />}<br /><br />public final void setRange(String value) throws Exception <br />{<br />try <br />{<br />upper = new Integer(value.substring(value.indexOf('-') + 1)).longValue();<br />} catch (Exception ex) {<br />throw new Exception("upper attribute could not be" +<br />" turned into an Integer default value was used"); <br />}<br /><br />try <br />{<br />lower = new Integer(value.substring(0, value.indexOf('-'))).longValue();<br />} catch (Exception ex) {<br />throw new Exception("lower attribute could not be" +<br />" turned into an Integer default value was used"); <br />}</p>
										<p>if ((lower == 0) &amp;&amp; (upper == 1))<br />floatvalue = true;</p>
										<p>if (upper &lt; lower)<br />throw new Exception("You can't have a range where the lowerbound" +<br />" is higher than the upperbound.");<br /><br />}<br /></p>
										<p>}<br /></p>
								</td>
						</tr>
				</tbody>
		</table>
		<table cellspacing="5" cellpadding="3" width="100%" align="center" border="0">
				<tbody>
						<tr>
								<td bgcolor="#ccccff">
										<p>//随机字符串bean</p>
										<p>
												<br />package mycollect; </p>
										<p>import java.util.*;<br />import java.security.SecureRandom;<br />import java.security.NoSuchAlgorithmException;<br />import java.security.NoSuchProviderException;</p>
										<p>public class RandomStrg {</p>
										<p>private String randomstr;<br />private boolean allchars = false;<br />//欠缺是8位字符串 <br />private Integer length = new Integer(8);<br />private HashMap hmap;<br />private ArrayList lower = null;<br />private ArrayList upper = null;<br />private char[] single = null;<br />private int singlecount = 0;<br />private boolean singles = false;<br />private String algorithm = null;<br />private String provider = null;<br />private boolean secure = false;<br />private Random random = null;<br />private SecureRandom secrandom = null;</p>
										<p>private final float getFloat() {<br />if (random == null)<br />return secrandom.nextFloat();<br />else<br />return random.nextFloat();<br />}</p>
										<p>/**<br />* generate the Random object that will be used for this random number <br />* generator<br />*<br />*/<br />public final void generateRandomObject() throws Exception {</p>
										<p>// check to see if the object is a SecureRandom object<br />if (secure) {<br />try {<br />// get an instance of a SecureRandom object<br />if (provider != null)<br />// search for algorithm in package provider<br />random = SecureRandom.getInstance(algorithm, provider);<br />else<br />random = SecureRandom.getInstance(algorithm);<br />} catch (NoSuchAlgorithmException ne) {<br />throw new Exception(ne.getMessage());<br />} catch (NoSuchProviderException pe) {<br />throw new Exception(pe.getMessage());<br />}<br />} else<br />random = new Random();<br />}</p>
										<p>/**<br />* generate the random string<br />*<br />*/<br />private final void generaterandom() {</p>
										<p>if (allchars)<br />for (int i = 0; i &lt; length.intValue(); i++)<br />randomstr = randomstr + new Character((char)((int) 34 + <br />((int)(getFloat() * 93)))).toString();<br />else if (singles) {<br />// check if there are single chars to be included</p>
										<p>if (upper.size() == 3) {<br />// check for the number of ranges max 3 uppercase lowercase digits</p>
										<p>// build the random string<br />for (int i = 0; i &lt; length.intValue(); i++) {<br />// you have four groups to choose a random number from, to make<br />// the choice a little more random select a number out of 100</p>
										<p>// get a random number even or odd<br />if (((int) (getFloat() * 100)) % 2 == 0) {</p>
										<p>// the number was even get another number even or odd<br />if (((int) (getFloat() * 100)) % 2 == 0)<br />// choose a random char from the single char group<br />randomstr = randomstr + randomSingle().toString();<br />else<br />// get a random char from the first range<br />randomstr = randomstr + randomChar((Character)lower.get(2),<br />(Character)upper.get(2)).toString();<br />} else {<br />// the number was odd</p>
										<p>if (((int) (getFloat() * 100)) % 2 == 0)<br />// choose a random char from the second range<br />randomstr = randomstr + randomChar((Character)lower.get(1),<br />(Character)upper.get(1)).toString();<br />else<br />// choose a random char from the third range<br />randomstr = randomstr + randomChar((Character)lower.get(0), <br />(Character)upper.get(0)).toString();<br />}<br />}<br />} else if (upper.size() == 2) {<br />// single chars are to be included choose a random char from<br />// two different ranges</p>
										<p>// build the random char from single chars and two ranges<br />for (int i = 0; i &lt; length.intValue(); i++) {<br />// select the single chars or a range to get each random char<br />// from</p>
										<p>if (((int)(getFloat() * 100)) % 2 == 0) {</p>
										<p>// get random char from the single chars<br />randomstr = randomstr + randomSingle().toString();<br />} else if (((int) (getFloat() * 100)) % 2 == 0) {</p>
										<p>// get the random char from the first range<br />randomstr = randomstr + randomChar((Character)lower.get(1),<br />(Character)upper.get(1)).toString();<br />} else {</p>
										<p>// get the random char from the second range<br />randomstr = randomstr + randomChar((Character)lower.get(0),<br />(Character)upper.get(0)).toString();<br />}<br />}<br />} else if (upper.size() == 1) {</p>
										<p>// build the random string from single chars and one range<br />for (int i = 0; i &lt; length.intValue(); i++) {<br />if (((int) getFloat() * 100) % 2 == 0)<br />// get a random single char<br />randomstr = randomstr + randomSingle().toString();<br />else<br />// get a random char from the range<br />randomstr = randomstr + randomChar((Character)lower.get(0),<br />(Character)upper.get(0)).toString();<br />}<br />} else {<br />// build the rand string from single chars<br />for (int i = 0; i &lt; length.intValue(); i++)<br />randomstr = randomstr + randomSingle().toString();<br />}<br />} else {</p>
										<p>// no single chars are to be included in the random string<br />if (upper.size() == 3) {</p>
										<p>// build random strng from three ranges<br />for (int i = 0; i &lt; length.intValue(); i++) {</p>
										<p>if (((int) (getFloat() * 100)) % 2 == 0) {</p>
										<p>// get random char from first range<br />randomstr = randomstr + randomChar((Character)lower.get(2),<br />(Character)upper.get(2)).toString();<br />} else if (((int) (getFloat() * 100)) % 2 == 0) {</p>
										<p>// get random char form second range<br />randomstr = randomstr + randomChar((Character)lower.get(1),<br />(Character)upper.get(1)).toString();<br />} else {</p>
										<p>// get random char from third range<br />randomstr = randomstr + randomChar((Character)lower.get(0),<br />(Character)upper.get(0)).toString();<br />}<br />}<br />} else if (upper.size() == 2) {</p>
										<p>// build random string from two ranges<br />for (int i = 0; i &lt; length.intValue(); i++) {<br />if (((int) (getFloat() * 100)) % 2 == 0)<br />// get random char from first range<br />randomstr = randomstr + randomChar((Character)lower.get(1),<br />(Character)upper.get(1)).toString();<br />else<br />// get random char from second range<br />randomstr = randomstr + randomChar((Character)lower.get(0),<br />(Character)upper.get(0)).toString();<br />}<br />} else</p>
										<p>// build random string<br />for (int i = 0; i &lt; length.intValue(); i++)<br />// get random char from only range<br />randomstr = randomstr + randomChar((Character)lower.get(0), <br />(Character)upper.get(0)).toString();<br />}<br />}</p>
										<p>/**<br />* generate a random char from the single char list<br />*<br />* @returns - a randomly selscted character from the single char list<br />*<br />*/<br />private final Character randomSingle() {</p>
										<p>return (new Character(single[(int)((getFloat() * singlecount) - 1)]));<br />}</p>
										<p>/**<br />* generate a random character<br />*<br />* @param lower lower bound from which to get a random char<br />* @param upper upper bound from which to get a random char<br />*<br />* @returns - a randomly generated character<br />*<br />*/<br />private final Character randomChar(Character lower, Character upper) {<br />int tempval;<br />char low = lower.charValue();<br />char up = upper.charValue();</p>
										<p>// get a random number in the range lowlow - lowup<br />tempval = (int)((int)low + (getFloat() * ((int)(up - low))));</p>
										<p>// return the random char<br />return (new Character((char) tempval));<br />}</p>
										<p>/**<br />* get the randomly created string for use with the <br />* &amp;lt;jsp:getProperty name=&lt;i&gt;"id"&lt;/i&gt; property="randomstr"/&amp;gt;<br />*<br />* @return - randomly created string<br />*<br />*/<br />public final String getRandom() {</p>
										<p>randomstr = new String();</p>
										<p>generaterandom(); // generate the first random string</p>
										<p>if (hmap != null) {</p>
										<p>while (hmap.containsKey(randomstr)) {<br />// random string has already been created generate a different one<br />generaterandom();<br />}</p>
										<p>hmap.put(randomstr, null); // add the new random string<br />}</p>
										<p>return randomstr;<br />}</p>
										<p>/**<br />* set the ranges from which to choose the characters for the random string<br />*<br />* @param low set of lower ranges<br />* @param up set of upper ranges<br />*<br />*/<br />public final void setRanges(ArrayList low, ArrayList up) {<br />lower = low;<br />upper = up;<br />}</p>
										<p>
												<br />/**<br />* set the hashmap that is used to check the uniqueness of random strings<br />*<br />* @param map hashmap whose keys are used to insure uniqueness of random strgs<br />*<br />*/<br />public final void setHmap(HashMap map) {<br />hmap = map;<br />}</p>
										<p>/**<br />* set the length of the random string<br />*<br />* @param value length of the random string<br />*<br />*/<br />public final void setLength(String value) {<br />length = new Integer(value);<br /><br />}</p>
										<p>/**<br />* set the algorithm name<br />*<br />* @param value name of the algorithm to use for a SecureRandom object<br />*<br />*/<br />public final void setAlgorithm(String value) {<br />algorithm = value;<br />secure = true; // a SecureRandom object is to be used<br />}</p>
										<p>/**<br />* set the provider name<br />*<br />* @param value name of the package to check for the algorithm<br />*<br />*/<br />public final void setProvider(String value) {<br />provider = value;<br />}</p>
										<p>/**<br />* set the allchars flag<br />*<br />* @param value boolean value of the allchars flag<br />*<br />*/<br />public final void setAllchars(boolean value) {<br />allchars = value;<br />}</p>
										<p>/**<br />* set the array of single chars to choose from for this random string and the<br />* number of chars in the array<br />*<br />* @param chars the array of single chars<br />* @param value the number of single chars<br />*<br />*/<br />public final void setSingle(char[] chars, int value) {<br />single = chars; // set the array of chars<br />singlecount = value; // set the number of chars in array single<br />singles = true; // set flag that single chars are in use<br />}<br /><br />public final void setCharset(String value) <br />{<br />// values tells the method whether or not to check for single chars<br />boolean more = true;</p>
										<p>// create the arraylists to hold the upper and lower bounds for the char<br />// ranges<br />lower = new ArrayList(3);<br />upper = new ArrayList(3);</p>
										<p>// user has chosen to use all possible characters in the random string<br />if (value.compareTo("all") == 0) {<br />allchars = true; // set allchars flag<br />// all chars are to be used so there are no single chars to sort <br />// through<br />more = false;<br />}else if ((value.charAt(1) == '-') &amp;&amp; (value.charAt(0) != '\\')) {<br />// run through the ranges at most 3 <br />while (more &amp;&amp; (value.charAt(1) == '-')){</p>
										<p>// check to make sure that the dash is not the single char<br />if (value.charAt(0) == '\\')<br />break;<br />else {<br />// add upper and lower ranges to there list<br />lower.add(new Character(value.charAt(0)));<br />upper.add(new Character(value.charAt(2)));<br />}</p>
										<p>// check to see if there is more to the charset<br />if (value.length() &lt;= 3)<br />more = false;<br />else<br />// create a new string so that the next range if there is one<br />// starts it<br />value = value.substring(3);<br />}<br />}</p>
										<p>// if more = false there are no single chars in the charset<br />if (more) {</p>
										<p>single = new char[30]; // create single</p>
										<p>// create a set of tokens from the string of single chars<br />StringTokenizer tokens = new StringTokenizer(value);</p>
										<p>while (tokens.hasMoreTokens()) {<br />// get the next token from the string<br />String token = tokens.nextToken();</p>
										<p>if (token.length() &gt; 1)<br />// char is a - add it to the list<br />single[singlecount++] = '-';</p>
										<p>// add the current char to the list<br />single[singlecount++] = token.charAt(0);<br />}<br />}<br />if ((lower == null) &amp;&amp; (single == null))<br />setCharset("a-zA-Z0-9"); <br />}<br />}<br /></p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<strong>JSP调用语句</strong>:</p>
		<table cellspacing="5" cellpadding="3" width="80%" align="center" bgcolor="#cccccc" border="0">
				<tbody>
						<tr>
								<td bgcolor="#ccffff">&lt;%@ page contentType="text/html;charset=ISO8859_1" %&gt; <br />&lt;%@ page import="java.util.*" %&gt; 
<p>&lt;jsp:useBean id="RNUM" scope="page" class="mycollect.RandomNum" /&gt;<br />&lt;jsp:useBean id="RSTR" scope="page" class="mycollect.RandomStrg" /&gt;</p><p>&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;随机数字 浮点数 字符串&lt;/title&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;/head&gt;</p><p>&lt;body&gt;<br />&lt;h3&gt;随机数字 浮点数 字符串&lt;/h3&gt;<br />&lt;%<br />//Random generator = new Random();<br />//int limit = 10;<br />//int randomNumber = (int)(generator.nextDouble() * limit);</p><p><br />out.println("&lt;p&gt;创建在10000000 和 99999999之间的随机数:");<br />RNUM.setRange("10000000-99999999");<br />RNUM.generateRandomObject();<br />out.println("&lt;b&gt;"+RNUM.getRandom().intValue()+"&lt;/b&gt;");</p><p>out.println("&lt;p&gt;在n 25 和 100之间创建一个随机数:");<br />RNUM.setRange("25-100");<br />RNUM.generateRandomObject();<br />out.println("&lt;b&gt;"+RNUM.getRandom().intValue()+"&lt;/b&gt;");</p><p>%&gt;<br />&lt;p&gt;Create the same random number between 25 and 100, only use the &lt;br&gt;<br />algorithm and provider attributes to indicate the use of a SecureRandom&lt;br&gt;<br />object instead of a Random object:<br />&lt;% <br />RNUM.setRange("25-100");<br />RNUM.setAlgorithm("SHA1PRNG");<br />RNUM.setProvider("SUN");<br />RNUM.generateRandomObject();<br />out.println("&lt;b&gt;"+RNUM.getRandom().intValue()+"&lt;/b&gt;");</p><p>out.println("&lt;p&gt;Create a random float value:");<br />RNUM.setRange("0-1");<br />RNUM.generateRandomObject();<br />String radio= new java.text.DecimalFormat("###.##########").format(RNUM.getRandom());<br />out.println("&lt;b&gt;"+radio+"&lt;/b&gt;");</p><p>out.println("&lt;p&gt;===========================================");</p><p>out.println("&lt;p&gt;在a-zA-Z0-9之间,也就是数字和26个字母混合的随机字符串,(欠缺是8位,该功能适合创建随机密码和sessionid)");<br />RSTR.setCharset("a-zA-Z0-9");<br />RSTR.generateRandomObject();<br />out.println("&lt;b&gt;"+RSTR.getRandom()+"&lt;/b&gt;");</p><p><br />out.println("&lt;p&gt;Create a random string 15 lowercase letters long:");<br />RSTR.setCharset("a-z");<br />RSTR.setLength("15");<br />RSTR.generateRandomObject();<br />out.println("&lt;b&gt;"+RSTR.getRandom()+"&lt;/b&gt;");</p><p>out.println("&lt;p&gt;Create a random string with only caps:");<br />RSTR.setCharset("A-Z");<br />RSTR.generateRandomObject();<br />out.println("&lt;b&gt;"+RSTR.getRandom()+"&lt;/b&gt;");</p><p>out.println("&lt;p&gt;Create a random string 10 characters long with the charset a-fF-K ! \\ $ % # ^ - * ? notice that the - and had to be escaped with a :");<br />RSTR.setCharset("a-fF-K!\\$%#^-*?");<br />RSTR.setLength("10");<br />RSTR.generateRandomObject();<br />out.println("&lt;b&gt;"+RSTR.getRandom()+"&lt;/b&gt;");</p><p><br />out.println("&lt;p&gt;Create a random string of all the characters and digits:");<br />RSTR.setCharset("all");<br />RSTR.generateRandomObject();<br />out.println("&lt;b&gt;"+RSTR.getRandom()+" &lt;/b&gt;");</p><p>%&gt;&lt;p&gt;<br />Create the same random string of all the characters and digits, only use&lt;br&gt;<br />the algorithm and provider attributes to indicate the use of a SecureRandom&lt;br&gt;<br />object instead of a Random object:<br />&lt;%<br />RSTR.setCharset("all");<br />RSTR.setAlgorithm("SHA1PRNG");<br />RSTR.setProvider("SUN");<br />RSTR.generateRandomObject();<br />out.println("&lt;b&gt;"+RSTR.getRandom()+"&lt;/b&gt;");</p><p>%&gt;</p><p>&lt;/body&gt;<br />&lt;/html&gt;<br /></p></td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/terrywu/aggbug/49465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2006-06-01 10:41 <a href="http://www.blogjava.net/terrywu/articles/49465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BASE64编码与解码 </title><link>http://www.blogjava.net/terrywu/articles/49464.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Thu, 01 Jun 2006 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/49464.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/49464.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/49464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/49464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/49464.html</trackback:ping><description><![CDATA[/**<br />    * Encode a string using Base64 encoding. Used when storing passwords<br />    * as cookies.<br />    *<br />    * This is weak encoding in that anyone can use the decodeString<br />    * routine to reverse the encoding.<br />    *<br />    * @param str<br />    * @return String<br />    */<br />   public static String encodeString(String str)  {<br />       sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();<br />       return encoder.encodeBuffer(str.getBytes()).trim();<br />   }
<p>   /**<br />    * Decode a string using Base64 encoding.<br />    *<br />    * @param str<br />    * @return String<br />    */<br />   public static String decodeString(String str) {<br />       sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder();<br />       try {<br />           return new String(dec.decodeBuffer(str));<br />       } catch (IOException io) {<br />               throw new RuntimeException(io.getMessage(), io.getCause());<br />       }<br />    }<br /></p><img src ="http://www.blogjava.net/terrywu/aggbug/49464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2006-06-01 10:40 <a href="http://www.blogjava.net/terrywu/articles/49464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA对文件的操作</title><link>http://www.blogjava.net/terrywu/articles/49463.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Thu, 01 Jun 2006 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/49463.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/49463.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/49463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/49463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/49463.html</trackback:ping><description><![CDATA[import java.io.*; 
<p>public class FileOperate {<br />  public FileOperate() {<br />  }</p><p>  /**<br />   * 新建目录<br />   * @param folderPath String 如 c:/fqf<br />   * @return boolean<br />   */<br />  public void newFolder(String folderPath) {<br />    try {<br />      String filePath = folderPath;<br />      filePath = filePath.toString();<br />      java.io.File myFilePath = new java.io.File(filePath);<br />      if (!myFilePath.exists()) {<br />        myFilePath.mkdir();<br />      }<br />    }<br />    catch (Exception e) {<br />      System.out.println("新建目录操作出错");<br />      e.printStackTrace();<br />    }<br />  }</p><p>  /**<br />   * 新建文件<br />   * @param filePathAndName String 文件路径及名称 如c:/fqf.txt<br />   * @param fileContent String 文件内容<br />   * @return boolean<br />   */<br />  public void newFile(String filePathAndName, String fileContent) {</p><p>    try {<br />      String filePath = filePathAndName;<br />      filePath = filePath.toString();<br />      File myFilePath = new File(filePath);<br />      if (!myFilePath.exists()) {<br />        myFilePath.createNewFile();<br />      }<br />      FileWriter resultFile = new FileWriter(myFilePath);<br />      PrintWriter myFile = new PrintWriter(resultFile);<br />      String strContent = fileContent;<br />      myFile.println(strContent);<br />      resultFile.close();</p><p>    }<br />    catch (Exception e) {<br />      System.out.println("新建目录操作出错");<br />      e.printStackTrace();</p><p>    }</p><p>  }</p><p>  /**<br />   * 删除文件<br />   * @param filePathAndName String 文件路径及名称 如c:/fqf.txt<br />   * @param fileContent String<br />   * @return boolean<br />   */<br />  public void delFile(String filePathAndName) {<br />    try {<br />      String filePath = filePathAndName;<br />      filePath = filePath.toString();<br />      java.io.File myDelFile = new java.io.File(filePath);<br />      myDelFile.delete();</p><p>    }<br />    catch (Exception e) {<br />      System.out.println("删除文件操作出错");<br />      e.printStackTrace();</p><p>    }</p><p>  }</p><p>  /**<br />   * 删除文件夹<br />   * @param filePathAndName String 文件夹路径及名称 如c:/fqf<br />   * @param fileContent String<br />   * @return boolean<br />   */<br />  public void delFolder(String folderPath) {<br />    try {<br />      delAllFile(folderPath); //删除完里面所有内容<br />      String filePath = folderPath;<br />      filePath = filePath.toString();<br />      java.io.File myFilePath = new java.io.File(filePath);<br />      myFilePath.delete(); //删除空文件夹</p><p>    }<br />    catch (Exception e) {<br />      System.out.println("删除文件夹操作出错");<br />      e.printStackTrace();</p><p>    }</p><p>  }</p><p>  /**<br />   * 删除文件夹里面的所有文件<br />   * @param path String 文件夹路径 如 c:/fqf<br />   */<br />  public void delAllFile(String path) {<br />    File file = new File(path);<br />    if (!file.exists()) {<br />      return;<br />    }<br />    if (!file.isDirectory()) {<br />      return;<br />    }<br />    String[] tempList = file.list();<br />    File temp = null;<br />    for (int i = 0; i &lt; tempList.length; i++) {<br />      if (path.endsWith(File.separator)) {<br />        temp = new File(path + tempList[i]);<br />      }<br />      else {<br />        temp = new File(path + File.separator + tempList[i]);<br />      }<br />      if (temp.isFile()) {<br />        temp.delete();<br />      }<br />      if (temp.isDirectory()) {<br />        delAllFile(path+"/"+ tempList[i]);//先删除文件夹里面的文件<br />        delFolder(path+"/"+ tempList[i]);//再删除空文件夹<br />      }<br />    }<br />  }</p><p>  /**<br />   * 复制单个文件<br />   * @param oldPath String 原文件路径 如：c:/fqf.txt<br />   * @param newPath String 复制后路径 如：f:/fqf.txt<br />   * @return boolean<br />   */<br />  public void copyFile(String oldPath, String newPath) {<br />    try {<br />      int bytesum = 0;<br />      int byteread = 0;<br />      File oldfile = new File(oldPath);<br />      if (oldfile.exists()) { //文件存在时<br />        InputStream inStream = new FileInputStream(oldPath); //读入原文件<br />        FileOutputStream fs = new FileOutputStream(newPath);<br />        byte[] buffer = new byte[1444];<br />        int length;<br />        while ( (byteread = inStream.read(buffer)) != -1) {<br />          bytesum += byteread; //字节数 文件大小<br />          System.out.println(bytesum);<br />          fs.write(buffer, 0, byteread);<br />        }<br />        inStream.close();<br />      }<br />    }<br />    catch (Exception e) {<br />      System.out.println("复制单个文件操作出错");<br />      e.printStackTrace();</p><p>    }</p><p>  }</p><p>  /**<br />   * 复制整个文件夹内容<br />   * @param oldPath String 原文件路径 如：c:/fqf<br />   * @param newPath String 复制后路径 如：f:/fqf/ff<br />   * @return boolean<br />   */<br />  public void copyFolder(String oldPath, String newPath) {</p><p>    try {<br />      (new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹<br />      File a=new File(oldPath);<br />      String[] file=a.list();<br />      File temp=null;<br />      for (int i = 0; i &lt; file.length; i++) {<br />        if(oldPath.endsWith(File.separator)){<br />          temp=new File(oldPath+file[i]);<br />        }<br />        else{<br />          temp=new File(oldPath+File.separator+file[i]);<br />        }</p><p>        if(temp.isFile()){<br />          FileInputStream input = new FileInputStream(temp);<br />          FileOutputStream output = new FileOutputStream(newPath + "/" +<br />              (temp.getName()).toString());<br />          byte[] b = new byte[1024 * 5];<br />          int len;<br />          while ( (len = input.read(b)) != -1) {<br />            output.write(b, 0, len);<br />          }<br />          output.flush();<br />          output.close();<br />          input.close();<br />        }<br />        if(temp.isDirectory()){//如果是子文件夹<br />          copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);<br />        }<br />      }<br />    }<br />    catch (Exception e) {<br />      System.out.println("复制整个文件夹内容操作出错");<br />      e.printStackTrace();</p><p>    }</p><p>  }</p><p>  /**<br />   * 移动文件到指定目录<br />   * @param oldPath String 如：c:/fqf.txt<br />   * @param newPath String 如：d:/fqf.txt<br />   */<br />  public void moveFile(String oldPath, String newPath) {<br />    copyFile(oldPath, newPath);<br />    delFile(oldPath);</p><p>  }</p><p>  /**<br />   * 移动文件到指定目录<br />   * @param oldPath String 如：c:/fqf.txt<br />   * @param newPath String 如：d:/fqf.txt<br />   */<br />  public void moveFolder(String oldPath, String newPath) {<br />    copyFolder(oldPath, newPath);<br />    delFolder(oldPath);</p><p>  }<br />}<br /></p><img src ="http://www.blogjava.net/terrywu/aggbug/49463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2006-06-01 10:39 <a href="http://www.blogjava.net/terrywu/articles/49463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java.Math API</title><link>http://www.blogjava.net/terrywu/articles/49462.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Thu, 01 Jun 2006 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/49462.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/49462.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/49462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/49462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/49462.html</trackback:ping><description><![CDATA[
		<div>Math.PI 记录的圆周率<br />Math.E&amp;nbsp;记录e的常量<br />Math中还有一些类似的常量，都是一些工程数学常用量。<br /><br />Math.abs 求绝对值<br />Math.sin 正弦函数&amp;nbsp;Math.asin 反正弦函数<br />Math.cos 余弦函数&amp;nbsp;Math.acos 反余弦函数<br />Math.tan 正切函数&amp;nbsp;Math.atan 反正切函数&amp;nbsp;Math.atan2 商的反正切函数<br />Math.toDegrees 弧度转化为角度&amp;nbsp;Math.toRadians 角度转化为弧度<br />Math.ceil 得到不小于某数的最大整数<br />Math.floor 得到不大于某数的最大整数<br />Math.IEEEremainder 求余<br />Math.max 求两数中最大<br />Math.min 求两数中最小<br />Math.sqrt 求开方<br />Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常<br />Math.exp 求e的任意次方<br />Math.log10 以10为底的对数<br />Math.log 自然对数<br />Math.rint 求距离某数最近的整数（可能比某数大，也可能比它小）<br />Math.round 同上，返回int型或者long型（上一个函数返回double型）<br />Math.random 返回0，1之间的一个随机数</div>
<img src ="http://www.blogjava.net/terrywu/aggbug/49462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2006-06-01 10:38 <a href="http://www.blogjava.net/terrywu/articles/49462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>