??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久亚洲欧洲日产国码aⅴ,亚洲AV成人精品一区二区三区,国产gv天堂亚洲国产gv刚刚碰http://www.tkk7.com/wufalong/category/25522.html思想有多q,我们p走多q!zh-cnSun, 16 Dec 2007 23:01:21 GMTSun, 16 Dec 2007 23:01:21 GMT60判断是否存在中文http://www.tkk7.com/wufalong/articles/168110.htmlcrazycrazySun, 16 Dec 2007 13:07:00 GMThttp://www.tkk7.com/wufalong/articles/168110.htmlhttp://www.tkk7.com/wufalong/comments/168110.htmlhttp://www.tkk7.com/wufalong/articles/168110.html#Feedback0http://www.tkk7.com/wufalong/comments/commentRss/168110.htmlhttp://www.tkk7.com/wufalong/services/trackbacks/168110.htmlҎ(gu)一
String temp = "";
temp.getBytes().length == temp.length()
判断不太准确..当数字等为全角的时候也为双字节

Ҏ(gu)?br />正则表达?br />Pattern   p   =   Pattern.compile("[\\u4E00-\\u9FA5]+");   
Matcher   m   =   p.matcher(temp);     
boolean   result   =   m.find();



crazy 2007-12-16 21:07 发表评论
]]>
java正则表达?/title><link>http://www.tkk7.com/wufalong/articles/167928.html</link><dc:creator>crazy</dc:creator><author>crazy</author><pubDate>Sat, 15 Dec 2007 04:19:00 GMT</pubDate><guid>http://www.tkk7.com/wufalong/articles/167928.html</guid><wfw:comment>http://www.tkk7.com/wufalong/comments/167928.html</wfw:comment><comments>http://www.tkk7.com/wufalong/articles/167928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wufalong/comments/commentRss/167928.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wufalong/services/trackbacks/167928.html</trackback:ping><description><![CDATA[ <div>最q要在项目中做HTML解析,本想使用NekoHTML来解?但看了下NekoHTML有点复杂,故采用了一U便?W的方式来完成项目的要求. 正则表达式此时发挥了她巨大的威力,为我排忧解难,很快便完成了HTML解析工作. </div> <div>在解析期?研究了很多java正则表达式用方?颇得一些经?不敢独n,愿与大家׃n. </div> <div>B</div> <div>java正则表达式通过<strong>java.util.regex</strong>包下的PatterncMMatchercd?<strong>在阅L文时,打开java API文档,当介l到哪个Ҏ(gu)?查看java API中的Ҏ(gu)说明,效果会更?/strong>). </div> <div>Patterncȝ于创Z个正则表辑ּ,也可以说创徏一个匹配模?它的构造方法是U有?不可以直接创?但可以通过Pattern.complie(String regex)单工厂方法创Z个正则表辑ּ, </div> <div>Java代码CZ: </div> <div>Pattern p=Pattern.compile("\\w+"); </div> <div>p.pattern();//q回 \w+ </div> <div>B</div> <div> <strong>pattern()</strong> q回正则表达式的字符串Ş?其实是q回Pattern.complile(String regex)的regex参数 </div> <div>B</div> <div> <strong>1.Pattern.split</strong>(CharSequence input) </div> <div>Pattern有一个split(CharSequence input)Ҏ(gu),用于分隔字符?q返回一个String[],我猜String.split(String regex)是通过Pattern.split(CharSequence input)来实现的. </div> <div>Java代码CZ: </div> <div>Pattern p=Pattern.compile("\\d+"); </div> <div>String[] str=p.split("我的QQ?456456我的?sh)话?0532214我的邮箱?aaa@aaa.com"); </div> <div>B</div> <div>l果:str[0]="我的QQ?" str[1]="我的?sh)话?" str[2]="我的邮箱?aaa@aaa.com" </div> <div>B</div> <div> <strong>2.Pattern.matcher</strong>(String regex,CharSequence input)是一个静态方?用于快速匹配字W串,该方法适合用于只匹配一?且匹配全部字W串. </div> <div>Java代码CZ: </div> <div>Pattern.matches("\\d+","2223");//q回true </div> <div>Pattern.matches("\\d+","2223aa");//q回false,需要匹配到所有字W串才能q回true,q里aa不能匚w?</div> <div>Pattern.matches("\\d+","22bb23");//q回false,需要匹配到所有字W串才能q回true,q里bb不能匚w?</div> <div>B</div> <div> <strong>3.Pattern.matcher</strong>(CharSequence input) </div> <div>说了q么?l于轮到MatchercȝZ,Pattern.matcher(CharSequence input)q回一个Matcher对象. </div> <div>Matchercȝ构造方法也是私有的,不能随意创徏,只能通过Pattern.matcher(CharSequence input)Ҏ(gu)得到该类的实? </div> <div>Patterncd能做一些简单的匚w操作,要想得到更强更便L正则匚w操作,那就需要将Pattern与Matcher一起合?MatchercL供了Ҏ(gu)则表辑ּ的分l支?以及Ҏ(gu)则表辑ּ的多ơ匹配支? </div> <div>Java代码CZ: </div> <div>Pattern p=Pattern.compile("\\d+"); </div> <div>Matcher m=p.matcher("22bb23"); </div> <div>m.pattern();//q回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的 </div> <div>B</div> <div> <strong>4.Matcher.matches</strong>()<strong></strong>/<strong> Matcher.lookingAt</strong>()<strong></strong>/ <strong>Matcher.find</strong>() </div> <div>MatchercL供三个匹配操作方?三个Ҏ(gu)均返回booleancd,当匹配到时返回true,没匹配到则返回false </div> <div>B</div> <div>matches()Ҏ(gu)个字W串q行匚w,只有整个字符串都匚w了才q回true </div> <div>Java代码CZ: </div> <div>Pattern p=Pattern.compile("\\d+"); </div> <div>Matcher m=p.matcher("22bb23"); </div> <div>m.matches();//q回false,因ؓbb不能被\d+匚w,D整个字符串匹配未成功. </div> <div>Matcher m2=p.matcher("2223"); </div> <div>m2.matches();//q回true,因ؓ\d+匚wC整个字符?</div> <div>B</div> <div>我们现在回头看一下Pattern.matcher(String regex,CharSequence input),它与下面q段代码{h(hun) </div> <div>Pattern.compile(regex).matcher(input).matches() </div> <div>B</div> <div>lookingAt()对前面的字符串进行匹?只有匚w到的字符串在最前面才返回true </div> <div>Java代码CZ: </div> <div>Pattern p=Pattern.compile("\\d+"); </div> <div>Matcher m=p.matcher("22bb23"); </div> <div>m.lookingAt();//q回true,因ؓ\d+匚wC前面?2 </div> <div>Matcher m2=p.matcher("aa2223"); </div> <div>m2.lookingAt();//q回false,因ؓ\d+不能匚w前面的aa </div> <div>B</div> <div>find()对字W串q行匚w,匚w到的字符串可以在M位置. </div> <div>Java代码CZ: </div> <div>Pattern p=Pattern.compile("\\d+"); </div> <div>Matcher m=p.matcher("22bb23"); </div> <div>m.find();//q回true </div> <div>Matcher m2=p.matcher("aa2223"); </div> <div>m2.find();//q回true </div> <div>Matcher m3=p.matcher("aa2223bb"); </div> <div>m3.find();//q回true </div> <div>Matcher m4=p.matcher("aabb"); </div> <div>m4.find();//q回false </div> <div>B</div> <div> <strong>5.Mathcer.start</strong>()<strong></strong>/ <strong>Matcher.end</strong>()<strong></strong>/ <strong>Matcher.group</strong>() </div> <div>当用matches(),lookingAt(),find()执行匚w操作?可以利用以上三个方法得到更详细的信? </div> <div>start()q回匚w到的子字W串在字W串中的索引位置. </div> <div>end()q回匚w到的子字W串的最后一个字W在字符串中的烦引位|? </div> <div>group()q回匚w到的子字W串 </div> <div>Java代码CZ: </div> <div>Pattern p=Pattern.compile("\\d+"); </div> <div>Matcher m=p.matcher("aaa2223bb"); </div> <div>m.find();//匚w2223 </div> <div>m.start();//q回3 </div> <div>m.end();//q回7,q回的是2223后的索引?</div> <div>m.group();//q回2223 </div> <div>B</div> <div>Mathcer m2=m.matcher("2223bb"); </div> <div>m.lookingAt();  //匚w2223 </div> <div>m.start();  //q回0,׃lookingAt()只能匚w前面的字W串,所以当使用lookingAt()匚w?start()Ҏ(gu)Lq回0 </div> <div>m.end();  //q回4 </div> <div>m.group();  //q回2223 </div> <div>B</div> <div>Matcher m3=m.matcher("2223bb"); </div> <div>m.matches();  //匚w整个字符?</div> <div>m.start();  //q回0,原因怿大家也清楚了 </div> <div>m.end();  //q回6,原因怿大家也清楚了,因ؓmatches()需要匹配所有字W串 </div> <div>m.group();  //q回2223bb </div> <div>B</div> <div>说了q么?怿大家都明白了以上几个Ҏ(gu)的?该说说正则表辑ּ的分l在java中是怎么使用? </div> <div>start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分l操?Mathcerc还有一个groupCount()用于q回有多组. </div> <div>Java代码CZ: </div> <div>Pattern p=Pattern.compile("([a-z]+)(\\d+)"); </div> <div>Matcher m=p.matcher("aaa2223bb"); </div> <div>m.find();  //匚waaa2223 </div> <div>m.groupCount();  //q回2,因ؓ?l?</div> <div>m.start(1);  //q回0 q回W一l匹配到的子字符串在字符串中的烦引号 </div> <div>m.start(2);  //q回3 </div> <div>m.end(1);  //q回3 q回W一l匹配到的子字符串的最后一个字W在字符串中的烦引位|? </div> <div>m.end(2);  //q回7 </div> <div>m.group(1);  //q回aaa,q回W一l匹配到的子字符?</div> <div>m.group(2);  //q回2223,q回W二l匹配到的子字符?</div> <div>B</div> <div>现在我们使用一下稍微高U点的正则匹配操?例如有一D|?里面有很多数?而且q些数字是分开?我们现在要将文本中所有数字都取出?利用java的正则操作是那么的简? </div> <div>Java代码CZ: </div> <div>Pattern p=Pattern.compile("\\d+"); </div> <div>Matcher m=p.matcher("我的QQ?456456 我的?sh)话?0532214 我的邮箱?aaa123@aaa.com"); </div> <div>while(m.find()) { </div> <div>    System.out.println(m.group()); </div> <div>} </div> <div>B</div> <div>输出: </div> <div>456456 </div> <div>0532214 </div> <div>123 </div> <div>B</div> <div>如将以上while()循环替换?</div> <div>while(m.find()) { </div> <div>    System.out.println(m.group()); </div> <div>    System.out.print("start:"+m.start()); </div> <div>    System.out.println(" end:"+m.end()); </div> <div>} </div> <div>则输? </div> <div>456456 </div> <div>start:6 end:12 </div> <div>0532214 </div> <div>start:19 end:26 </div> <div>123 </div> <div>start:36 end:39 </div> <div>B</div> <div>现在大家应该知道,每次执行匚w操作后start(),end(),group()三个Ҏ(gu)的值都会改?改变成匹配到的子字符串的信息,以及它们的重载方?也会改变成相应的信息. </div> <div> <strong>注意:只有当匹配操作成?才可以用start(),end(),group()三个Ҏ(gu),否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中L一个方法返回true?才可以?</strong> </div> <div>B</div> <div> <strong>6.Matcher.</strong> <font face="NSimsun"> <strong>replaceAll</strong> </font> <font face="NSimsun">(</font> <font face="NSimsun">String</font> <font face="NSimsun"> replacement)</font> /<strong> Matcher.<font face="NSimsun">replaceFirst</font></strong><font face="NSimsun">(</font><font face="NSimsun">String</font><font face="NSimsun"> replacement)</font></div> <div>大家应该知道String.replaceAll()和String.replaceFirst()两个Ҏ(gu)的功?其实它与Matcher.replaceAll()和Matcher.replaceFirst()的功能是一L,只不q是使用方式不一?例如我要某文本中的所有数字变?</div> <div>使用String完成该要?/div> <div>Java代码CZ: </div> <div>String str="我的QQ?456456 我的?sh)话?0532214 我的邮箱?aaa123@aaa.com";</div> <div>System.out.println(str.replaceAll("\\d","*"));</div> <div> </div> <div>输出: 我的QQ?****** 我的?sh)话?******* 我的邮箱?aaa***@aaa.com</div> <div> </div> <div>现在我们用Matcher完成该要?/div> <div>Java代码CZ:</div> <div>Pattern p=Pattern.compile("\\d");</div> <div>BMatcher m=p.matcher("我的QQ?456456 我的?sh)话?0532214 我的邮箱?aaa123@aaa.com");</div> <div>System.out.println(m.replaceAll("*"));</div> <div> </div> <div>输出: 我的QQ?****** 我的?sh)话?******* 我的邮箱?aaa***@aaa.com</div> <div> </div> <div>String.replaceAll()应该是调用了Matcher.replaceAll(),String.replaceAll()与下面这D代码等?/div> <div> <code>Pattern</code> <font face="NSimsun">.</font> <code>compile</code> <font face="NSimsun">(</font> <em>regex</em> <tt>).<code>matcher</code>(</tt> <em>str</em> <tt>).<code>replaceAll</code>(</tt> <font face="新宋?>replacement</font> <tt>)</tt> </div> <div> <tt> </tt> </div> <div> <tt>至于Matcher.replaceFirst()也很?它与String.replaceFirst()功能一?我就不多说了.</tt> </div> <div> <em>str</em> <tt>.replaceFirst(</tt> <em>regex</em> <tt>,</tt> <font face="新宋?> <em>replacement</em> </font> <tt>)与下面这D代码等?/tt> </div> <div> <tt> <code>Pattern</code>.<code>compile</code>(<em>regex</em><tt>).<code>matcher</code>(</tt><em>str</em><tt>).<code>replaceFirst</code>(</tt><em><font face="新宋?>replacement</font></em><tt>)</tt></tt> </div> <div> <tt> <tt> </tt> </tt> </div> <div> <strong>7.Matcher.</strong> <font face="NSimsun"> <strong>appendReplacement</strong> </font> <font face="NSimsun">(</font> <font face="NSimsun">StringBuffer</font> <font face="NSimsun"> sb, </font> <font face="NSimsun">String</font> <font face="NSimsun"> replacement)</font> / <strong>Matcher.<font face="NSimsun">appendTail</font></strong><font face="NSimsun">(</font><font face="NSimsun">StringBuffer</font><font face="NSimsun"> sb)</font></div> <div>B当前匹配子串替换ؓ指定字符Ԍq且替换后的子串以及其之前Cơ匹配子串之后的字符串段dC个StringBuffer对象里,而appendTaiBl(StringBuffer sb) Ҏ(gu)则将最后一ơ匹配工作后剩余的字W串dC个StringBuffer对象里.看例子:</div> <div> <div>Java代码CZ:</div> </div> <div> <div>Pattern p=Pattern.compile("\\d+");</div> <div>Matcher m=p.matcher("我的QQ?456456 我的?sh)话?0532214 我的邮箱?aaa123@aaa.com");</div> <div>StringBuffer sb=new StringBuffer();</div> <div>m.find();  //匚w?56456</div> <div>m.appendReplacement(sb,"*");  //?56456之前的字W串q加到sb,再将456456替换?,q追加到sb</div> <div>System.out.println(sb.toString());</div> <div>m.appendTail(sb);  //前面替换过的内容连接后面未替换q的内容,q放入sb</div> <div>System.out.println(sb.toString());</div> <div> </div> <div>输出Q?/div> <div>我的QQ?*<br />我的QQ?* 我的?sh)话?0532214 我的邮箱?aaa123@aaa.com</div> <div> </div> <div>再看一个例?/div> </div> <div> <div>Java代码CZ:</div> <div>Pattern p=Pattern.compile("\\d+");</div> </div> <div>Matcher m=p.matcher("我的QQ?456456 我的?sh)话?0532214 我的邮箱?aaa123@aaa.com");</div> <div>StringBuffer sb=new StringBuffer();</div> <div>while(m.find()) {</div> <div>    m.appendReplacement(sb,"*");</div> <div>    System.out.println(sb.toString());</div> <div>}</div> <div> <div>m.appendTail(sb);</div> <div>System.out.println("使用appendTail()的最l内Ҏ(gu)Q?+sb.toString());</div> </div> <div> </div> <div>输出Q?/div> <div>我的QQ?*<br />我的QQ?* 我的?sh)话?*<br />我的QQ?* 我的?sh)话?* 我的邮箱?aaa*<br />使用appendTail()的最l内Ҏ(gu)Q我的QQ?* 我的?sh)话?* 我的邮箱?aaa*@aaa.com</div> <div> </div> <div>关于q两个方法就介绍到这,如果不明白的?q需要自己动下手,认真体会一下其内涵.</div> <div> </div> <div> <strong>B8.Matcher.<font face="NSimsun">region</font></strong> <font face="NSimsun">(int start, int end)</font> / <strong><font face="NSimsun">Matcher.regionEnd</font></strong><font face="NSimsun">() / <strong><font face="NSimsun">Matcher.regionStart</font></strong><font face="NSimsun">()</font></font></div> <font face="新宋?> </font> <div>我们在做匚w操作?默认d配的是整个字W串,例如有一字符?aabbcc",使用"\\d+"去find()?是从W一个a开始匹?也就是烦引号?的位|?开始去匚w,当烦引号?的位|没有匹配到?去下一个位|去匚w...直到匚w到子字符串或匚w完最后一个字W烦引号才结?很显?\\d+"不能匚w"aabbcc",当它匚w完最后一个c?l束本次匚w,宣告匚wp|,也就是说它会d配完整个字符?能不能不d配完整个字符串呢,{案是可以的.</div> <div>region(int start,int end)是用来讄此匹配器的区域限制?/div> <div>先来看一个例?</div> <div> <div>Java代码CZ:</div> <div>Pattern p=Pattern.compile("\\d+");</div> <div>String content="aaabb2233cc";<br />Matcher m=p.matcher(content);<br />System.out.println(m);</div> </div> <div> </div> <div>输出: java.util.regex.Matcher[pattern=\d+ <strong>region=0,11</strong> lastmatch=]</div> <div> </div> <div>可以看到region=0,11 表示start=0,end=11,更通俗的说是当去匚w字符?先从索引号ؓ0的位|去匚w,如果匚wC子字W串p?如果没有匚w到则C一个位|去匚w,一直匹配到索引号ؓ11-1的字W就l束匚w.</div> <div>Z么是11?因ؓcontent.length()==11</div> <div>现在你应该明白了它的作用,来看一个例?</div> <div> <div>Java代码CZ:</div> <div>Pattern p=Pattern.compile("\\d+");</div> <div>String content="aaabb2233cc";<br />Matcher m=p.matcher(content);<br />m.find();  //匚w?223,q回true</div> <div> </div> <div>Matcher m2=p.matcher(content);</div> <div>m2.region(0,5);</div> <div>m2.find();  //q回false,只去匚w索引??-1的字W?没有匚w?/div> <div> </div> <div>Matcher m3=p.matcher(content);</div> <div>m2.region(3,8);</div> <div>m2.find();  //q回true</div> <div>m2.group();  //q回223,Z?h一下烦引号q道了.</div> </div> <div> </div> <div> <font face="新宋?>Matcher.regionStart()q回region(int start,int end)中的start?默认?</font> </div> <div> <font face="新宋?>Matcher.regionEnd()q回region(int start,int end)中的end?默认为去匚w字符串的length()?/font> </div> <div> <font face="新宋?> </font> <br /> <strong>9.Matcher.</strong> <font face="NSimsun"> <strong>reset</strong> </font> <font face="NSimsun">()</font> / <strong>Matcher.<font face="NSimsun">reset</font></strong><font face="NSimsun">(</font><font face="NSimsun">CharSequence</font><font face="NSimsun"> input)</font></div> <div>用于重置匚w器。看CZ</div> <div>Java代码CZ:</div> <div> <div>Pattern p=Pattern.compile("[a-z]+");</div> <div>String content="aaabb2233cc";<br />Matcher m=p.matcher(content);  //此时m刚创建出?为最初状?/div> <div>m.find();</div> <div>m.group();  //q回aaabb</div> <div>m.find();</div> <div>m.group();  //q回cc</div> <div> </div> <div>Matcher m2=p.matcher(content);  //此时m2刚创建出?为最初状?/div> <div>m.find();</div> <div>m.group();  //q回aaabb</div> <div>m.reset();  //恢复C最初状?此时相当于m2刚创建出?/div> <div>m.find();</div> <div>m.group();  //q回aaabb,怿大家应该知道了吧</div> </div> <div> </div> <div> Matcher.<font face="NSimsun">reset</font><font face="NSimsun">(</font><font face="NSimsun">CharSequence</font><font face="NSimsun"> input)</font> 恢复到最初状?q将匚w字符串换成input,以后执行匚w操作?来匚winput,而不匚w原来的字W串?</div> <div> </div> <div> <strong>10.Matcher.<font face="NSimsun">toMatchResult</font></strong> <font face="NSimsun">()</font> </div> <div>大家查看一下java API 对Matchercȝ说明,会发现它实现了MatchResult 接口,q个接口只有以下几个Ҏ(gu)</div> <div>groupCount() </div> <div>group() / group(int i)</div> <div>start() / start(int i) </div> <div>end() / end(int i)</div> <div> </div> <div>至于q几个方法的功能前面已经介绍q?现在我们来看一?font face="新宋?>toMatchResult()</font> 是如何用的</div> <div> <div>Java代码CZ:</div> <div>Pattern p=Pattern.compile("\\d+");<br />Matcher m=p.matcher("我的QQ?456456 我的?sh)话?0532214 我的邮箱?aaa123@aaa.com");<br />List list=new ArrayList();<br />while(m.find()) {<br />    list.add(m.toMatchResult());<br />}<br />MatchResult matchResult=null;<br />Iterator it=list.iterator();<br />int i=1;<br />while(it.hasNext()) {<br />    matchResult=(MatchResult)it.next();<br />    System.out.print("W?+(i++)+"ơ匹配到的信? ");<br />    System.out.println(matchResult.group()+"\t\t"+matchResult.start()+"\t"+matchResult.end());<br />}</div> </div> <div> </div> <div>输出:</div> <div>W?ơ匹配到的信? 456456           6        12<br />W?ơ匹配到的信? 0532214        19      26<br />W?ơ匹配到的信? 123                 36      39</div> <div> </div> <div>现在你应该知?<font face="新宋?>toMatchResult()用于保存某次匚w后的信息,待以后再使用.</font></div> <div> <font face="新宋?> </font> </div> <div> <font face="新宋?>Ҏ(gu)使用p到这?现在再介l一个实?/font> </div> <div>B</div> <div>有这样一个需?有一个HTML文g,需要将其中的内Ҏ(gu)取出?q不带HTML标签,如果使用正则表达?q是一件很Ҏ(gu)的事? 前提是这个HTML文g只保留了<body></body>标签以内的内?</div> <div>Java代码CZ: </div> <div>String html="<div><font  color='red'>example1</font></div>"; //可以是Q何html文g源代?但格式一定要正确 </div> <div>Pattern p=Pattern.compile("<[^>]*>"); </div> <div>Matcher m=p.matcher(html); </div> <div>String result=m.replaceAll(""); </div> <div>System.out.println(result); </div> <div>B</div> <div>输出:example1 </div> <p>参考资料:<br />java.util.regex的API文档<br />陈广佳的JAVA正则表达?-Pattern和Matcher</p> <img src ="http://www.tkk7.com/wufalong/aggbug/167928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wufalong/" target="_blank">crazy</a> 2007-12-15 12:19 <a href="http://www.tkk7.com/wufalong/articles/167928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux文g权限查看及修?/title><link>http://www.tkk7.com/wufalong/articles/167776.html</link><dc:creator>crazy</dc:creator><author>crazy</author><pubDate>Fri, 14 Dec 2007 06:53:00 GMT</pubDate><guid>http://www.tkk7.com/wufalong/articles/167776.html</guid><wfw:comment>http://www.tkk7.com/wufalong/comments/167776.html</wfw:comment><comments>http://www.tkk7.com/wufalong/articles/167776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wufalong/comments/commentRss/167776.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wufalong/services/trackbacks/167776.html</trackback:ping><description><![CDATA[查看linux文g的权限:ls -l 文g名称<span style="DISPLAY: none">NzMitug</span><br /><span style="DISPLAY: none">NzMitug</span><br />查看linux文g夹的权限Qls -ld 文g夹名Uͼ所在目录)<span style="DISPLAY: none">NzMitug</span><br /><span style="DISPLAY: none">NzMitug</span><br />修改文g及文件夹权限Q?span style="DISPLAY: none">NzMitug</span><br /><span style="DISPLAY: none">NzMitug</span><br />sudo chmod -Q代表类型)×××Q所有者)×××Q组用户Q×××(其他用户Q?span style="DISPLAY: none">NzMitug</span><br /><span style="DISPLAY: none">NzMitug</span><br />常用修改权限的命令:<span style="DISPLAY: none">NzMitug</span><br /><span style="DISPLAY: none">NzMitug</span><br />sudo chmod 600 ××× Q只有所有者有d写的权限Q?span style="DISPLAY: none">NzMitug</span><br /><span style="DISPLAY: none">NzMitug</span><br />sudo chmod 644 ××× Q所有者有d写的权限Q组用户只有ȝ权限Q?span style="DISPLAY: none">NzMitug</span><br /><span style="DISPLAY: none">NzMitug</span><br />sudo chmod 700 ××× Q只有所有者有d写以及执行的权限Q?span style="DISPLAY: none">NzMitug</span><br /><span style="DISPLAY: none">NzMitug</span><br />sudo chmod 666 ××× Q每个h都有d写的权限Q?span style="DISPLAY: none">NzMitug</span><br /><span style="DISPLAY: none">NzMitug</span><br />sudo chmod 777 ××× Q每个h都有d写以及执行的权限Q?<!-- 分页 --><img src ="http://www.tkk7.com/wufalong/aggbug/167776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wufalong/" target="_blank">crazy</a> 2007-12-14 14:53 <a href="http://www.tkk7.com/wufalong/articles/167776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达?不区分大写的替?/title><link>http://www.tkk7.com/wufalong/articles/167694.html</link><dc:creator>crazy</dc:creator><author>crazy</author><pubDate>Fri, 14 Dec 2007 02:37:00 GMT</pubDate><guid>http://www.tkk7.com/wufalong/articles/167694.html</guid><wfw:comment>http://www.tkk7.com/wufalong/comments/167694.html</wfw:comment><comments>http://www.tkk7.com/wufalong/articles/167694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wufalong/comments/commentRss/167694.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wufalong/services/trackbacks/167694.html</trackback:ping><description><![CDATA[ /**不区分大写的替?*/<br />    public  String IgnoreCaseReplace(String source, String oldstring,String newstring)<br />   {<br />      Pattern p = Pattern.compile(oldstring, Pattern.CASE_INSENSITIVE);<br />      Matcher m = p.matcher(source);<br />      String ret=m.replaceAll(newstring);<br />      return ret;<br />   }<img src ="http://www.tkk7.com/wufalong/aggbug/167694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wufalong/" target="_blank">crazy</a> 2007-12-14 10:37 <a href="http://www.tkk7.com/wufalong/articles/167694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二种includehttp://www.tkk7.com/wufalong/articles/167621.htmlcrazycrazyThu, 13 Dec 2007 15:36:00 GMThttp://www.tkk7.com/wufalong/articles/167621.htmlhttp://www.tkk7.com/wufalong/comments/167621.htmlhttp://www.tkk7.com/wufalong/articles/167621.html#Feedback0http://www.tkk7.com/wufalong/comments/commentRss/167621.htmlhttp://www.tkk7.com/wufalong/services/trackbacks/167621.html主要有两个方面的不同;
一:执行旉?
<%@ include file=”relativeURI?> 是在译阶段执行
<jsp:include page=”relativeURI” flush=”true”?> 在请求处理阶D|?
?引入内容的不?
<%@ include file=”relativeURI?>
引入静态文?html,jsp),在JSP面被{化成servlet之前和它融和C?
<jsp:include page=”relativeURI” flush=”true”?>引入执行面或servlet所生成的应{文?

file是先把内容组?再一L译成一个文? page 是先~译,产生二个class文g.file文g的值可以向下传.而page׃?file文g找不C报错,page不会.

crazy 2007-12-13 23:36 发表评论
]]>
log4j详解 (摘抄q来?http://www.tkk7.com/wufalong/articles/166258.htmlcrazycrazySat, 08 Dec 2007 05:36:00 GMThttp://www.tkk7.com/wufalong/articles/166258.htmlhttp://www.tkk7.com/wufalong/comments/166258.htmlhttp://www.tkk7.com/wufalong/articles/166258.html#Feedback0http://www.tkk7.com/wufalong/comments/commentRss/166258.htmlhttp://www.tkk7.com/wufalong/services/trackbacks/166258.html>>>>1. 概述<<<<
  1.1. 背景
  
  在应用程序中d日志记录ȝ来说Z三个目的Q监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码q行时轨q,作ؓ日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打C码的调试信息?br />  
  最普通的做法是在代码中嵌入许多的打印语句,q些打印语句可以输出到控制台或文件中Q比较好的做法就是构造一个日志操作类来封装此cL作,而不是让一pd的打印语句充斥了代码的主体?br />  
  1.2. Log4j?/strong>
  
  在强调可重用lg开发的今天Q除了自׃头到ּ发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j?br />  
   Log4j是Apache的一个开放源代码目Q通过使用Log4jQ我们可以控制日志信息输送的目的地是控制台、文件、GUIlg、甚x套接口服?器、NT的事件记录器、UNIX Syslog守护q程{;我们也可以控制每一条日志的输出格式Q通过定义每一条日志信息的U别Q我们能够更加细致地控制日志的生成过E。最令h感兴的?是,q些可以通过一个配|文件来灉|地进行配|,而不需要修改应用的代码?br />  
  此外Q通过Log4j其他语言接口Q?zhn)可以在C、C+ +?Net、PL/SQLE序中用Log4jQ其语法和用法与在JavaE序中一P使得多语a分布式系l得C个统一一致的日志lg模块。而且Q?q用各U第三方扩展Q?zhn)可以很方便地Log4j集成到J2EE、JINI甚至是SNMP应用中?br />  
  本文介绍的Log4j版本?1.2.3。作者试N过一个简单的客户/服务器JavaE序例子Ҏ(gu)使用与不使用Log4j 1.2.3的差别,q详l讲解了在实践中最怋用Log4j的方法和步骤。在可重用组件开发的今天Q相信Log4j会l广大的设计开发h员带来方 ѝ加入到Log4j的队伍来吧!
  
>>>> 2. 一个简单的例子 <<<<

  我们先来看一个简单的例子Q它是一个用Java实现的客?服务器网l程序。刚开始我们不使用Log4jQ而是使用了一pd的打印语句,然后我们用Log4j来实现它的日志功能。这P大家可以清楚地比较出前后两个代码的差别?br />  
  2.1. 不用Log4j
  
  2.1.1. 客户E序
  package log4j ;
  
  import java.io.* ;
  import java.net.* ;
  
  /**
   *
   * <p> Client Without Log4j </p>
   * <p> Description: a sample with log4j</p>
   * @version 1.0
   */
  public class ClientWithoutLog4j {
  
    /**
     *
     * @param args
     */
    public static void main ( String args [] ) {
  
      String welcome = null;
      String response = null;
      BufferedReader reader = null;
      PrintWriter writer = null;
      InputStream in = null;
      OutputStream out = null;
      Socket client = null;
  
      try {
        client = new Socket ( "localhost", 8001 ) ;
        System.out.println ( "info: Client socket: " + client ) ;
        in = client.getInputStream () ;
        out = client.getOutputStream () ;
      } catch ( IOException e ) {
        System.out.println ( "error: IOException : " + e ) ;
        System.exit ( 0 ) ;
      }
  
      try{
        reader = new BufferedReader( new InputStreamReader ( in ) ) ;
        writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
  
        welcome = reader.readLine () ;
        System.out.println ( "debug: Server says: '" + welcome + "'" ) ;
  
        System.out.println ( "debug: HELLO" ) ;
        writer.println ( "HELLO" ) ;
        response = reader.readLine () ;
        System.out.println ( "debug: Server responds: '" + response + "'") ;
  
        System.out.println ( "debug: HELP" ) ;
        writer.println ( "HELP" ) ;
        response = reader.readLine () ;
        System.out.println ( "debug: Server responds: '" + response + "'" ) ;
  
        System.out.println ( "debug: QUIT" ) ;
        writer.println ( "QUIT" ) ;
      } catch ( IOException e ) {
        System.out.println ( "warn: IOException in client.in.readln()" ) ;
        System.out.println ( e ) ;
      }
      try{
        Thread.sleep ( 2000 ) ;
      } catch ( Exception ignored ) {}
    }
  }
  
  2.1.2. 服务器程?br />  package log4j ;
  
  import java.util.* ;
  import java.io.* ;
  import java.net.* ;
  
  /**
   *
   * <p> Server Without Log4j </p>
   * <p> Description: a sample with log4j</p>
   * @version 1.0
   */
  public class ServerWithoutLog4j {
  
    final static int SERVER_PORT = 8001 ; // this server's port
  
    /**
     *
     * @param args
     */
    public static void main ( String args [] ) {
      String clientRequest = null;
      BufferedReader reader = null;
      PrintWriter writer = null;
      ServerSocket server = null;
      Socket socket = null;
      InputStream in = null;
      OutputStream out = null;
  
      try {
        server = new ServerSocket ( SERVER_PORT ) ;
        System.out.println ( "info: ServerSocket before accept: " + server ) ;
        System.out.println ( "info: Java server without log4j, on-line!" ) ;
  
        // wait for client's connection
        socket = server.accept () ;
        System.out.println ( "info: ServerSocket after accept: " + server ) ;
  
        in = socket.getInputStream () ;
        out = socket.getOutputStream () ;
  
      } catch ( IOException e ) {
        System.out.println( "error: Server constructor IOException: " + e ) ;
        System.exit ( 0 ) ;
      }
      reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
      writer = new PrintWriter ( new OutputStreamWriter ( out ) , true ) ;
  
      // send welcome string to client
      writer.println ( "Java server without log4j, " + new Date () ) ;
  
      while ( true ) {
        try {
          // read from client
          clientRequest = reader.readLine () ;
          System.out.println ( "debug: Client says: " + clientRequest ) ;
          if ( clientRequest.startsWith ( "HELP" ) ) {
            System.out.println ( "debug: OK!" ) ;
            writer.println ( "Vocabulary: HELP QUIT" ) ;
          }
          else {
            if ( clientRequest.startsWith ( "QUIT" ) ) {
              System.out.println ( "debug: OK!" ) ;
              System.exit ( 0 ) ;
            }
            else{
              System.out.println ( "warn: Command '" +
   clientRequest + "' not understood." ) ;
              writer.println ( "Command '" + clientRequest
   + "' not understood." ) ;
            }
          }
        } catch ( IOException e ) {
          System.out.println ( "error: IOException in Server " + e ) ;
          System.exit ( 0 ) ;
        }
      }
    }
  }
  
  2.2. q移到Log4j
  
  2.2.1. 客户E序
  
  package log4j ;
  
  import java.io.* ;
  import java.net.* ;
  
  // add for log4j: import some package
  import org.apache.log4j.PropertyConfigurator ;
  import org.apache.log4j.Logger ;
  import org.apache.log4j.Level ;
  
  /**
   *
   * <p> Client With Log4j </p>
   * <p> Description: a sample with log4j</p>
   * @version 1.0
   */
  public class ClientWithLog4j {
  
    /*
    add for log4j: class Logger is the central class in the log4j package.
    we can do most logging operations by Logger except configuration.
    getLogger(...): retrieve a logger by name, if not then create for it.
    */
    static Logger logger = Logger.getLogger
   ( ClientWithLog4j.class.getName () ) ;
  
    /**
     *
     * @param args : configuration file name
     */
    public static void main ( String args [] ) {
  
      String welcome = null ;
      String response = null ;
      BufferedReader reader = null ;
      PrintWriter writer = null ;
      InputStream in = null ;
      OutputStream out = null ;
      Socket client = null ;
  
      /*
      add for log4j: class BasicConfigurator can quickly configure the package.
      print the information to console.
      */
      PropertyConfigurator.configure ( "ClientWithLog4j.properties" ) ;
  
      // add for log4j: set the level
  //    logger.setLevel ( ( Level ) Level.DEBUG ) ;
  
      try{
        client = new Socket( "localhost" , 8001 ) ;
  
        // add for log4j: log a message with the info level
        logger.info ( "Client socket: " + client ) ;
  
        in = client.getInputStream () ;
        out = client.getOutputStream () ;
      } catch ( IOException e ) {
  
        // add for log4j: log a message with the error level
        logger.error ( "IOException : " + e ) ;
  
        System.exit ( 0 ) ;
      }
  
      try{
        reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
        writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
  
        welcome = reader.readLine () ;
  
        // add for log4j: log a message with the debug level
        logger.debug ( "Server says: '" + welcome + "'" ) ;
  
        // add for log4j: log a message with the debug level
        logger.debug ( "HELLO" ) ;
  
        writer.println ( "HELLO" ) ;
        response = reader.readLine () ;
  
        // add for log4j: log a message with the debug level
        logger.debug ( "Server responds: '" + response + "'" ) ;
  
        // add for log4j: log a message with the debug level
        logger.debug ( "HELP" ) ;
  
        writer.println ( "HELP" ) ;
        response = reader.readLine () ;
  
        // add for log4j: log a message with the debug level
        logger.debug ( "Server responds: '" + response + "'") ;
  
        // add for log4j: log a message with the debug level
        logger.debug ( "QUIT" ) ;
  
        writer.println ( "QUIT" ) ;
      } catch ( IOException e ) {
  
        // add for log4j: log a message with the warn level
        logger.warn ( "IOException in client.in.readln()" ) ;
  
        System.out.println ( e ) ;
      }
      try {
        Thread.sleep ( 2000 ) ;
      } catch ( Exception ignored ) {}
    }
  }
  
  2.2.2. 服务器程?br />  
  package log4j;
  
  import java.util.* ;
  import java.io.* ;
  import java.net.* ;
  
  // add for log4j: import some package
  import org.apache.log4j.PropertyConfigurator ;
  import org.apache.log4j.Logger ;
  import org.apache.log4j.Level ;
  
  /**
   *
   * <p> Server With Log4j </p>
   * <p> Description: a sample with log4j</p>
   * @version 1.0
   */
  public class ServerWithLog4j {
  
    final static int SERVER_PORT = 8001 ; // this server's port
  
    /*
    add for log4j: class Logger is the central class in the log4j package.
    we can do most logging operations by Logger except configuration.
    getLogger(...): retrieve a logger by name, if not then create for it.
    */
    static Logger logger = Logger.getLogger
   ( ServerWithLog4j.class.getName () ) ;
  
    /**
     *
     * @param args
     */
    public static void main ( String args[]) {
      String clientRequest = null ;
      BufferedReader reader = null ;
      PrintWriter writer = null ;
      ServerSocket server = null ;
      Socket socket = null ;
  
      InputStream in = null ;
      OutputStream out = null ;
  
      /*
      add for log4j: class BasicConfigurator can quickly configure the package.
      print the information to console.
      */
      PropertyConfigurator.configure ( "ServerWithLog4j.properties" ) ;
  
      // add for log4j: set the level
  //    logger.setLevel ( ( Level ) Level.DEBUG ) ;
  
      try{
        server = new ServerSocket ( SERVER_PORT ) ;
  
        // add for log4j: log a message with the info level
        logger.info ( "ServerSocket before accept: " + server ) ;
  
        // add for log4j: log a message with the info level
        logger.info ( "Java server with log4j, on-line!" ) ;
  
        // wait for client's connection
        socket = server.accept() ;
  
        // add for log4j: log a message with the info level
        logger.info ( "ServerSocket after accept: " + server ) ;
  
        in = socket.getInputStream() ;
        out = socket.getOutputStream() ;
  
      } catch ( IOException e ) {
  
        // add for log4j: log a message with the error level
        logger.error ( "Server constructor IOException: " + e ) ;
        System.exit ( 0 ) ;
      }
      reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
      writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
  
      // send welcome string to client
      writer.println ( "Java server with log4j, " + new Date () ) ;
  
      while ( true ) {
        try {
          // read from client
          clientRequest = reader.readLine () ;
  
          // add for log4j: log a message with the debug level
          logger.debug ( "Client says: " + clientRequest ) ;
  
          if ( clientRequest.startsWith ( "HELP" ) ) {
  
            // add for log4j: log a message with the debug level
            logger.debug ( "OK!" ) ;
  
            writer.println ( "Vocabulary: HELP QUIT" ) ;
          }
          else {
            if ( clientRequest.startsWith ( "QUIT" ) ) {
  
              // add for log4j: log a message with the debug level
              logger.debug ( "OK!" ) ;
  
              System.exit ( 0 ) ;
            }
            else {
  
              // add for log4j: log a message with the warn level
              logger.warn ( "Command '"
   + clientRequest + "' not understood." ) ;
  
              writer.println ( "Command '"
   + clientRequest + "' not understood." ) ;
            }
          }
        } catch ( IOException e ) {
  
          // add for log4j: log a message with the error level
          logger.error( "IOException in Server " + e ) ;
  
          System.exit ( 0 ) ;
        }
      }
    }
  }
  
  2.2.3. 配置文g
  
  2.2.3.1. 客户E序配置文g
  
  log4j.rootLogger=INFO, A1
  
  log4j.appender.A1=org.apache.log4j.ConsoleAppender
  
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  
  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
  
  2.2.3.2. 服务器程序配|文?br />  
  log4j.rootLogger=INFO, A1
  
  log4j.appender.A1=org.apache.log4j.ConsoleAppender
  
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  
  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
  
  2.3. 比较
  
   比较q两个应用可以看出,采用Log4jq行日志操作的整个过E相当简单明了,与直接用System.out.println语句q行日志信息输出?方式相比Q基本上没有增加代码量,同时能够清楚地理解每一条日志信息的重要E度。通过控制配置文gQ我们还可以灉|CҎ(gu)志信息的格式Q输出目的地{等 斚wQ而单U依靠System.out.println语句Q显焉要做更多的工作?br />
>>>> 3 . Log4j日志理pȝ单用说?<<<<

    通常Q我们都提供一个名?log4j.properties的文Ӟ在第一ơ调用到Log4JӞLog4J会在c\径(../web-inf/class/当然也可以放到其它Q何目录,只要该目录被包含到类路径中即可)中定位这个文Ӟq读入这个文件完成的配置。这个配|文件告 诉Log4J以什么样的格式、把什么样的信息、输出到什么地斏V?br />  Log4j有三个主要的lgQLoggers(记录?QAppenders(输出?和Layouts(布局)Q这里可单理解ؓ日志cdQ日志要输出的地方和日志以何UŞ式输出。综合用这三个lg可以L的记录信息的cd和别,q可以在q行时控制日志输出的样式和位|。下面对三个lg分别q行说明Q?br />  
  1?Loggers
   Loggerslg在此pȝ中被分ؓ五个U别QDEBUG、INFO、WARN、ERROR和FATAL。这五个U别是有序的,DEBUG < INFO < WARN < ERROR < FATALQ分别用来指定这条日志信息的重要E度,明白q一点很重要Q这里Log4j有一个规则:假设LoggersU别为PQ如果在Loggers中发生了一个别Q比P高,则可以启动,否则屏蔽掉?br />假设你定义的U别是infoQ那么error和warn的日志可以显C比他低的debug信息׃昄了?br />  
  JavaE序举例来说Q?br />  
  //建立Logger的一个实例,命名为“com.foo?br />   Logger logger = Logger.getLogger("com.foo"); //"com.foo"是实例进行命名,也可以Q?br />  //讄logger的别。通常不在E序中设|logger的别。一般在配置文g中设|?br />  logger.setLevel(Level.INFO);
  Logger barlogger = Logger.getLogger("com.foo.Bar");
  //下面q个h可用Q因为WARN >= INFO
  logger.warn("Low fuel level.");
  //下面q个h不可用,因ؓDEBUG < INFO
  logger.debug("Starting search for nearest gas station.");
  //命名为“com.foo.bar”的实例barlogger会承实例“com.foo”的U别。因此,下面q个h可用Q因为INFO >= INFO
  barlogger.info("Located nearest gas station.");
  //下面q个h不可用,因ؓDEBUG < INFO
  barlogger.debug("Exiting gas station search");
  q里“是否可用”的意思是能否输出Logger信息?br />    在对Logger实例q行命名Ӟ没有限制Q可以取L自己感兴的名字。一般情况下以类的所在位|来命名Logger实例Q这是目前来讲比较有效的Logger命名方式。这样可以得每个类建立自己的日志信息,便于理。比如:
  
  static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName());
  
  2、Appenders
  用与用日志请求只是Log4j其中的一个小的地方QLog4j日志pȝ允许把日志输出到不同的地方,如控制台QConsoleQ、文ӞFilesQ、根据天数或者文件大生新的文件、以的形式发送到其它地方{等?br />  
  其语法表CZؓQ?br />  
  org.apache.log4j.ConsoleAppenderQ控制台Q?br />  org.apache.log4j.FileAppenderQ文Ӟ
  org.apache.log4j.DailyRollingFileAppenderQ每天生一个日志文Ӟ
    org.apache.log4j.RollingFileAppenderQ文件大到达指定尺寸的时候生一个新的文Ӟ
  org.apache.log4j.WriterAppenderQ将日志信息以流格式发送到L指定的地方)
  
  配置时用方式ؓQ?br />  log4j.appender.appenderName = fully.qualified.name.of.appender.class
  log4j.appender.appenderName.option1 = value1
  ?br />    log4j.appender.appenderName.option = valueN
  q样׃ؓ日志的输出提供了相当大的便利?br />  
  3、Layouts
   有时用户希望Ҏ(gu)自己的喜好格式化自己的日志输出。Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供?四种日志输出样式Q如Ҏ(gu)HTML样式、自由指定样式、包含日志别与信息的样式和包含日志旉、线E、类别等信息的样式等{?br />  
  其语法表CZؓQ?br />  
  org.apache.log4j.HTMLLayoutQ以HTML表格形式布局Q,
  org.apache.log4j.PatternLayoutQ可以灵zd指定布局模式Q,
  org.apache.log4j.SimpleLayoutQ包含日志信息的U别和信息字W串Q,
  org.apache.log4j.TTCCLayoutQ包含日志生的旉、线E、类别等{信息)
  
  配置时用方式ؓQ?br />  
  log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class
  log4j.appender.appenderName.layout.option1 = value1
  ?br />  log4j.appender.appenderName.layout.option = valueN

>>>>  4 . Log4j的配|?<<<<  
  
  以上是从原理斚w说明Log4j的用方法,在具体Java~程使用Log4j可以参照以下CZQ?br />  
  1?建立Logger实例Q?br />  语法表示Qpublic static Logger getLogger( String name)
  实际使用Qstatic Logger logger = Logger.getLogger(ServerWithLog4j.class.getName ()) ;
  
  2?d配置文gQ?br />  获得了Logger的实例之后,接下来将配置Log4j使用环境Q?br />  语法表示Q?br />  BasicConfigurator.configure()Q自动快速地使用~省Log4j环境?br />  PropertyConfigurator.configure(String configFilename)Q读取用Java的特性文件编写的配置文g?br />  DOMConfigurator.configure(String filename)Q读取XML形式的配|文件?br />  实际使用Q?br />    PropertyConfigurator.configure("ServerWithLog4j.properties");
  
  3?插入日志信息
  完成了以上连个步骤以后,下面可以按日志的不同别插入到你要记录日志的Q何地方了?br />  语法表示Q?br />  Logger.debug(Object message);//调试信息
  Logger.info(Object message);//一般信?br />  Logger.warn(Object message);//警告信息
  Logger.error(Object message);//错误信息
  Logger.fatal(Object message);//致命错误信息

  实际使用Qlogger.info("ServerSocket before accept: " + server);
  
 >>>> 5. 配置q程 <<<<

 在实际编E时Q要使Log4j真正在系l中q行事先q要寚w|文件进行定义。定义步骤就是对Logger、Appender及Layout的分别用?br />    Log4j支持两种配置文g格式Q一U是XML格式的文Ӟ一U是java propertiesQkey=valueQ【JavaҎ(gu)文Ӟ?|】。下面我们介l用JavaҎ(gu)文件做为配|文件的Ҏ(gu)
   具体如下Q?br />  
  1、配|根LoggerQ?/strong>其语法ؓQ?br />  log4j.rootLogger = [ level ] , appenderName1, appenderName2, ?br />         level : 是日志记录的优先U,分ؓOFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者?zhn)定义的别。Log4j只用四个别,优先U从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的U别Q?zhn)可以控制到应用程序中相应U别的日志信息的开兟뀂比如在q里?义了INFOU别Q则应用E序中所有DEBUGU别的日志信息将不被打印出来?br />       appenderName:是指定日志信息输出到哪个地斏V?zhn)可以同时指定多个输出目的地?br />   例如Qlog4j.rootLoggerQinfo,A1,B2,C3
  
  2、配|日志信息输出目的地Q其语法为:
  log4j.appender.appenderName = fully.qualified.name.of.appender.class  //
    "fully.qualified.name.of.appender.class" 可以指定下面五个目的C的一个:
          1.org.apache.log4j.ConsoleAppenderQ控制台Q?br />          2.org.apache.log4j.FileAppenderQ文Ӟ
          3.org.apache.log4j.DailyRollingFileAppenderQ每天生一个日志文Ӟ
          4.org.apache.log4j.RollingFileAppenderQ文件大到达指定尺寸的时候生一个新的文Ӟ
          5.org.apache.log4j.WriterAppenderQ将日志信息以流格式发送到L指定的地方)
             1.ConsoleAppender选项
                    Threshold=WARN:指定日志消息的输出最低层ơ?br />                    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立卌出?br />                    Target=System.errQ默认情况下是:System.out,指定输出控制?br />              2.FileAppender 选项
                    Threshold=WARN:指定日志消息的输出最低层ơ?br />                    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立卌出?br />                    File=mylog.txt:指定消息输出到mylog.txt文g?br />                    Append=false:默认值是true,卛_消息增加到指定文件中Qfalse指将消息覆盖指定的文件内宏V?br />            3.DailyRollingFileAppender 选项
                    Threshold=WARN:指定日志消息的输出最低层ơ?br />                    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立卌出?br />                    File=mylog.txt:指定消息输出到mylog.txt文g?br />                    Append=false:默认值是true,卛_消息增加到指定文件中Qfalse指将消息覆盖指定的文件内宏V?br />                    DatePattern='.'yyyy-ww:每周滚动一ơ文Ӟx周生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
                    1)'.'yyyy-MM: 每月
                    2)'.'yyyy-ww: 每周 
                    3)'.'yyyy-MM-dd: 每天
                    4)'.'yyyy-MM-dd-a: 每天两次
                    5)'.'yyyy-MM-dd-HH: 每小?br />                    6)'.'yyyy-MM-dd-HH-mm: 每分?br />            4.RollingFileAppender 选项
                    Threshold=WARN:指定日志消息的输出最低层ơ?br />                    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立卌出?br />                    File=mylog.txt:指定消息输出到mylog.txt文g?br />                    Append=false:默认值是true,卛_消息增加到指定文件中Qfalse指将消息覆盖指定的文件内宏V?br />                    MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小Ӟ会自动滚动Q即原来的内容Udmylog.log.1文g?br />                    MaxBackupIndex=2:指定可以产生的滚动文件的最大数?/p>

实际应用Q?br />  log4j.appender.A1=org.apache.log4j.ConsoleAppender //q里指定了日志输出的W一个位|A1是控制台ConsoleAppender
  
  3、配|日志信息的格式Q其语法为:
  A.log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
              "fully.qualified.name.of.layout.class" 可以指定下面4个格式中的一个:
               1.org.apache.log4j.HTMLLayoutQ以HTML表格形式布局Q,
         2.org.apache.log4j.PatternLayoutQ可以灵zd指定布局模式Q,
         3.org.apache.log4j.SimpleLayoutQ包含日志信息的U别和信息字W串Q,
         4.org.apache.log4j.TTCCLayoutQ包含日志生的旉、线E、类别等{信息)
                   1.HTMLLayout 选项
                      LocationInfo=true:默认值是false,输出java文g名称和行?br />                      Title=my app file: 默认值是 Log4J Log Messages.
                   2.PatternLayout 选项
                      ConversionPattern=%m%n :指定怎样格式化指定的消息?br />                   3.XMLLayout  选项
                      LocationInfo=true:默认值是false,输出java文g和行?br />   实际应用Q?br />     log4j.appender.A1.layout=org.apache.log4j.PatternLayout

       B. log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
           q里需要说明的是日志信息格式中几个符h代表的含义:
           QX? X信息输出时左寚wQ?br />                   %p: 输出日志信息优先U,即DEBUGQINFOQWARNQERRORQFATAL,
                   %d: 输出日志旉点的日期或时_默认格式为ISO8601Q也可以在其后指定格式,比如Q?d{yyy MMM dd HH:mm:ss,SSS}Q输出类|2002q?0?8?22Q?0Q?8Q?21
                   %r: 输出自应用启动到输出该log信息耗费的毫U数
                   %c: 输出日志信息所属的cȝQ通常是所在类的全?br />                   %t: 输出产生该日志事件的U程?br />                   %l: 输出日志事g的发生位|,相当?C.%M(%F:%L)的组?包括cȝ名、发生的U程Q以及在代码中的行数。D例:Testlog4.main(TestLog4.java:10)
                   %x: 输出和当前线E相兌的NDC(嵌套诊断环境),其用到像java servletsq样的多客户多线E的应用中?br />                   %%: 输出一?%"字符
                   %F: 输出日志消息产生时所在的文g名称
                   %L: 输出代码中的行号
                   %m: 输出代码中指定的消息,产生的日志具体信?br />                   %n: 输出一个回车换行符QWindowsq_?\r\n"QUnixq_?\n"输出日志信息换行
            可以?与模式字W之间加上修饰符来控制其最宽度、最大宽度、和文本的对齐方式。如Q?br />                     1)%20cQ指定输出category的名Uͼ最的宽度?0Q如果category的名U小?0的话Q默认的情况下右寚w?br />                     2)%-20c:指定输出category的名Uͼ最的宽度?0Q如果category的名U小?0的话Q?-"h定左寚w?br />                     3)%.30c:指定输出category的名Uͼ最大的宽度?0Q如果category的名U大?0的话Q就会将左边多出的字W截掉,但小?0的话也不会有I格?br />                     4)%20.30c:如果category的名U小?0pI格Qƈ且右寚wQ如果其名称长于30字符Q就从左边交q销出的字符截掉?/p>

  q里上面三个步骤是对前面Log4jlg说明的一个简化;下面l出一个具体配|例子,在程序中可以参照执行Q?br />  log4j.rootLogger=INFO,A1QB2
  log4j.appender.A1=org.apache.log4j.ConsoleAppender
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
   Ҏ(gu)上面的日志格式,某一个程序的输出l果如下Q?br />  0  INFO 2003-06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]
         16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says: 'Java server with log4j, Fri Jun 13 13:23:46 CST 2003'
  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD
  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.'
  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP
  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT'
  16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT
 
      4. # 当输Z息于回滚文g?/strong>

          log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender   //指定以文件的方式输出日志
           log4j.appender.ROLLING_FILE.Threshold=ERROR 
           log4j.appender.ROLLING_FILE.File=rolling.log  //文g位置,也可以用变量${java.home}、rolling.log
           log4j.appender.ROLLING_FILE.Append=true 
           log4j.appender.ROLLING_FILE.MaxFileSize=10KB  //文g最大尺?br />           log4j.appender.ROLLING_FILE.MaxBackupIndex=1  //备䆾?br />           log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout 
           log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n    

××××××××××××××××××××××××××××××××××××××××××××××××
 
>>>> 6. Log4j比较全面的配|?<<<<

 LOG4J的配|之单它遍及于来多的应用中了:Log4J配置文g实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签{全套功能。择其一二用就够用了,

 log4j.rootLogger=DEBUG,CONSOLE,A1,im
 log4j.addivity.org.apache=true

 # 应用于控制台

 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
 log4j.appender.Threshold=DEBUG
 log4j.appender.CONSOLE.Target=System.out
 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
 log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
 #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

 #应用于文?

 log4j.appender.FILE=org.apache.log4j.FileAppender
 log4j.appender.FILE.File=file.log
 log4j.appender.FILE.Append=false
 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
 log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
 # Use this layout for LogFactor 5 analysis

 # 应用于文件回?

 log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
 log4j.appender.ROLLING_FILE.Threshold=ERROR
 log4j.appender.ROLLING_FILE.File=rolling.log  //文g位置,也可以用变量${java.home}、rolling.log
 log4j.appender.ROLLING_FILE.Append=true       //true:d  false:覆盖
 log4j.appender.ROLLING_FILE.MaxFileSize=10KB   //文g最大尺?br /> log4j.appender.ROLLING_FILE.MaxBackupIndex=1  //备䆾?br /> log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
 log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


 #应用于socket
 log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
 log4j.appender.SOCKET.RemoteHost=localhost
 log4j.appender.SOCKET.Port=5001
 log4j.appender.SOCKET.LocationInfo=true
 # Set up for Log Facter 5
 log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
 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


 # Log Factor 5 Appender
 log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
 log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

 # 发送日志给邮g

 log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
 log4j.appender.MAIL.Threshold=FATAL
 log4j.appender.MAIL.BufferSize=10
 log4j.appender.MAIL.From=web@www.wuset.com
 log4j.appender.MAIL.SMTPHost=www.wusetu.com
 log4j.appender.MAIL.Subject=Log4J Message
 log4j.appender.MAIL.To=web@www.wusetu.com
 log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
 log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

 # 用于数据?
 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
 log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
 log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
 log4j.appender.DATABASE.user=root
 log4j.appender.DATABASE.password=
 log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
 log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
 log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


 log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
 log4j.appender.A1.File=SampleMessages.log4j
 log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
 log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

 #自定义Appender

 log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

 log4j.appender.im.host = mail.cybercorlin.net
 log4j.appender.im.username = username
 log4j.appender.im.password = password
 log4j.appender.im.recipient = corlin@cybercorlin.net

 log4j.appender.im.layout=org.apache.log4j.PatternLayout
 log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] %r %c{4}:%L - %m%n

### direct messages to file hibernate.log ###
log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=log.html
log4j.appender.file.File=log.txt
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout=org.apache.log4j.HTMLLayout
#log4j.appender.file.LocationInfo=true
#log4j.appender..file.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] %r %c{4}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info,stdout,file



crazy 2007-12-08 13:36 发表评论
]]>
数据l计,栈操?2)http://www.tkk7.com/wufalong/articles/148192.htmlcrazycrazyWed, 26 Sep 2007 01:14:00 GMThttp://www.tkk7.com/wufalong/articles/148192.htmlhttp://www.tkk7.com/wufalong/comments/148192.htmlhttp://www.tkk7.com/wufalong/articles/148192.html#Feedback0http://www.tkk7.com/wufalong/comments/commentRss/148192.htmlhttp://www.tkk7.com/wufalong/services/trackbacks/148192.html if (CountConstants.cArrayStackA  ==   null )
                CountConstants.cArrayStackA 
=   new  CountViewArrayStack(CountConstants.CSTACKLENGH);
            
if (CountConstants.cArrayStackB  ==   null )
                CountConstants.cArrayStackB 
=   new  CountViewArrayStack(CountConstants.CSTACKLENGH);
AcceptEntity aEntity 
=   new  AcceptEntity();
CountManager cManager 
=   new  CountManager();
            
if (CountConstants.CSTACKA)
                cManager.countViewNum(CountConstants.cArrayStackA,aEntity);
            
else   if (CountConstants.CSTACKB)
                cManager.countViewNum(CountConstants.cArrayStackB,aEntity);


public   class  CountManager  {
    
    
public   void  countViewNum(CountViewStack cArrayStack,AcceptEntity acceptEntity)
    
{
        
try
        

            cArrayStack.push(acceptEntity);
            
            
// System.out.println("Stack ["+type+"] working ……?);
        }

        
catch (FullViewStackException e)
        

            
// System.out.println ("Stack [A] is Full!");
             int  i  =   0 ;
            Session session
= null ;
            Object[] saveObj 
=   new  Object[CountConstants.CSTACKLENGH];
            AcceptEntity outEntity 
=   null ;
            
            
if (CountConstants.CSTACKA)
            
{
                CountConstants.CSTACKA 
=   false ;
                CountConstants.CSTACKB 
=   true
            }

            
else
            
{
                CountConstants.CSTACKB 
=   false ;
                CountConstants.CSTACKA 
=   true ;
            }


            
try
            
{
                
while  ( ! cArrayStack.isEmpty())
                
{
                    outEntity 
=  (AcceptEntity)cArrayStack.pop();

                    saveObj[i] 
=  outEntity;
                    i
++ ;
                    outEntity 
=   null ;
                }

                session 
=  MailSessionManager.getMailSession();
                EmailEntityManager.batchSave(saveObj,session);
                
if (session != null ) session.close();
                
// Hibernate.batchSave(saveObj);
                saveObj  =   null ;
                
// System.out.println("Stack [A] pop end!!pop[A]:"+iTempList.length);
                cArrayStack.push(acceptEntity);
            }

            
catch (java.util.EmptyStackException ex)
            
{
                System.out.println(
" Error-->countViewNum() " + ex.getMessage());
            }
finally {
                
if (session != null ) session.close();
            }


        }
catch (Exception ex)
        
{
            ex.printStackTrace();
        }

    }


}


crazy 2007-09-26 09:14 发表评论
]]>
数据l计,栈操?/title><link>http://www.tkk7.com/wufalong/articles/148183.html</link><dc:creator>crazy</dc:creator><author>crazy</author><pubDate>Wed, 26 Sep 2007 01:04:00 GMT</pubDate><guid>http://www.tkk7.com/wufalong/articles/148183.html</guid><wfw:comment>http://www.tkk7.com/wufalong/comments/148183.html</wfw:comment><comments>http://www.tkk7.com/wufalong/articles/148183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wufalong/comments/commentRss/148183.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wufalong/services/trackbacks/148183.html</trackback:ping><description><![CDATA[ <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <span style="COLOR: #008080"> 1</span> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">栈四个方法分别是:<br /></span> <span style="COLOR: #008080"> 2</span> <span style="COLOR: #008000"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">--判断栈是否ؓI?br /></span> <span style="COLOR: #008080"> 3</span> <span style="COLOR: #008000"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">--获得栈顶数据而没有删?br /></span> <span style="COLOR: #008080"> 4</span> <span style="COLOR: #008000"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">--L数据入?br /></span> <span style="COLOR: #008080"> 5</span> <span style="COLOR: #008000"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">--获得q删除栈元?/span> <span style="COLOR: #008000"> <br /> </span> <span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000">    <br /></span> <span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">interface</span> <span style="COLOR: #000000"> CountStack <br /></span> <span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_125_276_Open_Image" onclick="this.style.display='none'; Codehighlighter1_125_276_Open_Text.style.display='none'; Codehighlighter1_125_276_Closed_Image.style.display='inline'; Codehighlighter1_125_276_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_125_276_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_125_276_Closed_Text.style.display='none'; Codehighlighter1_125_276_Open_Image.style.display='inline'; Codehighlighter1_125_276_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span> <span id="Codehighlighter1_125_276_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_125_276_Open_Text"> <span style="COLOR: #000000">{ <br /></span> <span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span> <span style="COLOR: #008080">10</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">boolean</span> <span style="COLOR: #000000"> isEmpty ();<br /></span> <span style="COLOR: #008080">11</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span> <span style="COLOR: #008080">12</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        Object peek (); <br /></span> <span style="COLOR: #008080">13</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span> <span style="COLOR: #008080">14</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000"> push (Object o); <br /></span> <span style="COLOR: #008080">15</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span> <span style="COLOR: #008080">16</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        Object pop (); <br /></span> <span style="COLOR: #008080">17</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span> </span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #008080">18</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> <br /> </span> <span style="COLOR: #008080">19</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">实现接口</span> <span style="COLOR: #008000"> <br /> </span> <span style="COLOR: #008080">20</span> <span style="COLOR: #008000"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #008080">21</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_345_1185_Open_Image" onclick="this.style.display='none'; Codehighlighter1_345_1185_Open_Text.style.display='none'; Codehighlighter1_345_1185_Closed_Image.style.display='inline'; Codehighlighter1_345_1185_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_345_1185_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_345_1185_Closed_Text.style.display='none'; Codehighlighter1_345_1185_Open_Image.style.display='inline'; Codehighlighter1_345_1185_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> CountViewArrayStack </span> <span style="COLOR: #0000ff">implements</span> <span style="COLOR: #000000"> CountViewStack</span> <span id="Codehighlighter1_345_1185_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_345_1185_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080">22</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span> <span style="COLOR: #008080">23</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> top </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">; <br /></span> <span style="COLOR: #008080">24</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span> <span style="COLOR: #008080">25</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000"> Object[] stack; <br /></span> <span style="COLOR: #008080">26</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /> <br /> </span> <span style="COLOR: #008080">27</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> CountViewArrayStack(</span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> maxElements) <br /></span> <span style="COLOR: #008080">28</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span> <span style="COLOR: #008080">29</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_488_546_Open_Image" onclick="this.style.display='none'; Codehighlighter1_488_546_Open_Text.style.display='none'; Codehighlighter1_488_546_Closed_Image.style.display='inline'; Codehighlighter1_488_546_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_488_546_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_488_546_Closed_Text.style.display='none'; Codehighlighter1_488_546_Open_Image.style.display='inline'; Codehighlighter1_488_546_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span> <span id="Codehighlighter1_488_546_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_488_546_Open_Text"> <span style="COLOR: #000000">{   <br /></span> <span style="COLOR: #008080">30</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            stack </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> Object[maxElements];<br /></span> <span style="COLOR: #008080">31</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span> </span> <span style="COLOR: #000000"> <br /></span> <span style="COLOR: #008080">32</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span> <span style="COLOR: #008080">33</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">boolean</span> <span style="COLOR: #000000"> isEmpty ()<br /></span> <span style="COLOR: #008080">34</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_600_640_Open_Image" onclick="this.style.display='none'; Codehighlighter1_600_640_Open_Text.style.display='none'; Codehighlighter1_600_640_Closed_Image.style.display='inline'; Codehighlighter1_600_640_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_600_640_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_600_640_Closed_Text.style.display='none'; Codehighlighter1_600_640_Open_Image.style.display='inline'; Codehighlighter1_600_640_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span> <span id="Codehighlighter1_600_640_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_600_640_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080">35</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> top </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">;<br /></span> <span style="COLOR: #008080">36</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span> </span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #008080">37</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span> <span style="COLOR: #008080">38</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> Object peek() <br /></span> <span style="COLOR: #008080">39</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span> <span style="COLOR: #008080">40</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_694_819_Open_Image" onclick="this.style.display='none'; Codehighlighter1_694_819_Open_Text.style.display='none'; Codehighlighter1_694_819_Closed_Image.style.display='inline'; Codehighlighter1_694_819_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_694_819_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_694_819_Closed_Text.style.display='none'; Codehighlighter1_694_819_Open_Image.style.display='inline'; Codehighlighter1_694_819_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span> <span id="Codehighlighter1_694_819_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_694_819_Open_Text"> <span style="COLOR: #000000">{ <br /></span> <span style="COLOR: #008080">41</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (top </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">)  <br /></span> <span style="COLOR: #008080">42</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> java.util.EmptyStackException(); <br /></span> <span style="COLOR: #008080">43</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> stack[top];<br /></span> <span style="COLOR: #008080">44</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span> </span> <span style="COLOR: #000000"> <br /></span> <span style="COLOR: #008080">45</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /> <br /> </span> <span style="COLOR: #008080">46</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000"> push(Object o) <br /></span> <span style="COLOR: #008080">47</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span> <span style="COLOR: #008080">48</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_872_1008_Open_Image" onclick="this.style.display='none'; Codehighlighter1_872_1008_Open_Text.style.display='none'; Codehighlighter1_872_1008_Closed_Image.style.display='inline'; Codehighlighter1_872_1008_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_872_1008_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_872_1008_Closed_Text.style.display='none'; Codehighlighter1_872_1008_Open_Image.style.display='inline'; Codehighlighter1_872_1008_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span> <span id="Codehighlighter1_872_1008_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_872_1008_Open_Text"> <span style="COLOR: #000000">{ <br /></span> <span style="COLOR: #008080">49</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (top </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> stack.length </span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">)     <br /></span> <span style="COLOR: #008080">50</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> FullViewStackException(); <br /></span> <span style="COLOR: #008080">51</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            stack[</span> <span style="COLOR: #000000">++</span> <span style="COLOR: #000000">top] </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> o;<br /></span> <span style="COLOR: #008080">52</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span> </span> <span style="COLOR: #000000"> <br /></span> <span style="COLOR: #008080">53</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /> <br /> </span> <span style="COLOR: #008080">54</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> Object pop() <br /></span> <span style="COLOR: #008080">55</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span> <span style="COLOR: #008080">56</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_1054_1182_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1054_1182_Open_Text.style.display='none'; Codehighlighter1_1054_1182_Closed_Image.style.display='inline'; Codehighlighter1_1054_1182_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_1054_1182_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1054_1182_Closed_Text.style.display='none'; Codehighlighter1_1054_1182_Open_Image.style.display='inline'; Codehighlighter1_1054_1182_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span> <span id="Codehighlighter1_1054_1182_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_1054_1182_Open_Text"> <span style="COLOR: #000000">{ <br /></span> <span style="COLOR: #008080">57</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (top </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">)  <br /></span> <span style="COLOR: #008080">58</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span> <span style="COLOR: #0000ff">throw</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> java.util.EmptyStackException(); <br /></span> <span style="COLOR: #008080">59</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> stack[top</span> <span style="COLOR: #000000">--</span> <span style="COLOR: #000000">]; <br /></span> <span style="COLOR: #008080">60</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span> </span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #008080">61</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /> <br /> </span> <span style="COLOR: #008080">62</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> </div> <img src ="http://www.tkk7.com/wufalong/aggbug/148183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wufalong/" target="_blank">crazy</a> 2007-09-26 09:04 <a href="http://www.tkk7.com/wufalong/articles/148183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 得到IP地址Ҏ(gu)http://www.tkk7.com/wufalong/articles/143348.htmlcrazycrazyFri, 07 Sep 2007 03:15:00 GMThttp://www.tkk7.com/wufalong/articles/143348.htmlhttp://www.tkk7.com/wufalong/comments/143348.htmlhttp://www.tkk7.com/wufalong/articles/143348.html#Feedback0http://www.tkk7.com/wufalong/comments/commentRss/143348.htmlhttp://www.tkk7.com/wufalong/services/trackbacks/143348.html  1 public   static  String getIp(HttpServletRequest req)  {
 2         String ip_for  =  req.getHeader( " x-forwarded-for " );
 3         String ip_client  =  req.getHeader( " http_client_ip " );
 4         String un  =   " unknown " ;
 5
 6          if  (ip_for  !=   null   &&   ! ip_for.equalsIgnoreCase(un)
 7                  &&  ip_for.trim().length()  >   0 {
 8              return  ip_for;
 9         }
  else   if  (ip_client  !=   null   &&   ! ip_client.equalsIgnoreCase(un)
10                  &&  ip_client.trim().length()  >   0 {
11              return  ip_client;
12         }
  else   {
13              return  req.getRemoteAddr();
14         }

15     }


crazy 2007-09-07 11:15 发表评论
]]>
记取excel中的邮g地址q发送邮?/title><link>http://www.tkk7.com/wufalong/articles/142288.html</link><dc:creator>crazy</dc:creator><author>crazy</author><pubDate>Mon, 03 Sep 2007 06:06:00 GMT</pubDate><guid>http://www.tkk7.com/wufalong/articles/142288.html</guid><wfw:comment>http://www.tkk7.com/wufalong/comments/142288.html</wfw:comment><comments>http://www.tkk7.com/wufalong/articles/142288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wufalong/comments/commentRss/142288.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wufalong/services/trackbacks/142288.html</trackback:ping><description><![CDATA[     摘要: 1 /** */ /**   2  *  @author  wufalong   3  * Create on 2007-8-7   4 ...  <a href='http://www.tkk7.com/wufalong/articles/142288.html'>阅读全文</a><img src ="http://www.tkk7.com/wufalong/aggbug/142288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wufalong/" target="_blank">crazy</a> 2007-09-03 14:06 <a href="http://www.tkk7.com/wufalong/articles/142288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java写入excel文ghttp://www.tkk7.com/wufalong/articles/142284.htmlcrazycrazyMon, 03 Sep 2007 05:56:00 GMThttp://www.tkk7.com/wufalong/articles/142284.htmlhttp://www.tkk7.com/wufalong/comments/142284.htmlhttp://www.tkk7.com/wufalong/articles/142284.html#Feedback0http://www.tkk7.com/wufalong/comments/commentRss/142284.htmlhttp://www.tkk7.com/wufalong/services/trackbacks/142284.html 要用到poi-2.5.1-final-20040804.jar?/font>

 1 import  java.io.FileOutputStream;
 2 import  java.sql.Connection;
 3 import  java.sql.ResultSet;
 4 import  java.sql.ResultSetMetaData;
 5
 6 import  org.apache.poi.hssf.usermodel.HSSFCell;
 7 import  org.apache.poi.hssf.usermodel.HSSFRow;
 8 import  org.apache.poi.hssf.usermodel.HSSFSheet;
 9 import  org.apache.poi.hssf.usermodel.HSSFWorkbook;
10 import  org.dom4j.Document;
11 import  org.dom4j.Element;
12
13 import  wufalong.exportServer.ConnectBean;
14 import  wufalong.exportServer.CreateConnection;
15 import  wufalong.exportServer.GetResultSet;
16 import  wufalong.exportServer.LoadRootElementByConfigFile;
17 import  exportxls.JsUserBasicData;
18
19 public   class  Person20070517
20 {
21    public   static   void  main(String args[]) 
22    {
23       Person20070517 c = new  Person20070517();
24        int  allcount = 0 ;
25       allcount = allcount + c.createPersonMobile( " c:/人才.xls " );
26   }

27   
28    public   int  createPersonMobile(String filename)
29    {
30       Connection con  =   null ;
31       ResultSet rs  =   null ;
32       Document doc  =  LoadRootElementByConfigFile.getRootElement();
33       Element e  =  doc.getRootElement().element( " import " );
34        try
35        {
36             con  =  CreateConnection.getConnect(e);
37             rs  =  GetResultSet.getResule(con,ConnectBean.getSql(e));
38           FileOutputStream fOut  =   null ;
39           HSSFWorkbook workbook  =   new  HSSFWorkbook();
40           HSSFSheet sheet  =  workbook.createSheet();
41           HSSFRow row  =   null ;
42           HSSFCell cell  =   null ;
43            int  i  =   1 ;
44            int  writeadd  =   0 ;
45           String  cellvalue  =   "" ;
46           JsUserBasicData jub  =   new  JsUserBasicData();
47           row  =  sheet.createRow( 0 );
48           cell  =  row.createCell(( short 0 );
49           cell.setCellType(HSSFCell.CELL_TYPE_STRING);
50           cell.setEncoding(HSSFCell.ENCODING_UTF_16);
51           cell.setCellValue( " 姓名 " );
52           cell  =  row.createCell(( short 1 );
53           cell.setCellType(HSSFCell.CELL_TYPE_STRING);
54           cell.setEncoding(HSSFCell.ENCODING_UTF_16);
55           cell.setCellValue( " 手机 " );
56           
57            while  (rs.next())  {
58
59               System.out.println( " 正在生成W?/span> "   +  i  +   " 条记?/span> " );
60               ResultSetMetaData rsmd  =  rs.getMetaData();
61               row  =  sheet.createRow(( short ) i);
62                int  colcount  =  rsmd.getColumnCount();
63                for  ( int  icc  =   0 ; icc  <  colcount; icc ++ {
64                   cellvalue  =  rs.getString(icc  +   1 ); 
65                   cell  =  row.createCell(( short ) icc);
66                   System.out.println( " md: "   +  cellvalue); 
67                   cell.setCellType(HSSFCell.CELL_TYPE_STRING);
68                   cell.setEncoding(HSSFCell.ENCODING_UTF_16);
69                   cell.setCellValue(cellvalue);
70               }

71               i ++ ;
72           }

73
74           fOut  =   new  FileOutputStream(filename);
75           workbook.write(fOut);
76           fOut.flush();
77           fOut.close();
78           System.out.println(filename  +   " 文g生成?/span> "   +  i  +   " ?/span> " );
79           rs.close();
80           rs  =   null ;
81           con.close();
82           con  =   null ;
83            return  i;
84       }
  catch  (Exception ee) 
85        {
86               System.out.println( " 發生?/span> "   +  ee.getMessage()  +   " 例外 " );
87       }
 
88        finally  
89        {
90               GetResultSet.closeResultSet(rs);
91               CreateConnection.closeConnect(con);
92       }

93       return   0 ;
94   }

95 }

96


crazy 2007-09-03 13:56 发表评论
]]>
javadexcel文ghttp://www.tkk7.com/wufalong/articles/142239.htmlcrazycrazyMon, 03 Sep 2007 03:23:00 GMThttp://www.tkk7.com/wufalong/articles/142239.htmlhttp://www.tkk7.com/wufalong/comments/142239.htmlhttp://www.tkk7.com/wufalong/articles/142239.html#Feedback0http://www.tkk7.com/wufalong/comments/commentRss/142239.htmlhttp://www.tkk7.com/wufalong/services/trackbacks/142239.html  1 import java.io.FileInputStream;
 2 import java.io.InputStream;
 3
 4 import jxl.Cell;
 5 import jxl.Sheet;
 6 import jxl.Workbook;
 7
 8 /**
 9  * @author wufalong
10  * 2007-9-3
11  */
12 public class Excel
13 {
14     public static void main(String[] args)
15     {
16         try
17         {
18             String sourcefile = "c://test.xls";
19             InputStream is = new FileInputStream(sourcefile);
20             jxl.Workbook rwb = Workbook.getWorkbook(is);
21             //获得ȝSheetsQ得到sheet的层?br /> 22             Sheet[] sheets = rwb.getSheets();
23             int sheetLen = sheets.length;
24             //获得W一个Sheets 的结?br /> 25             jxl.Sheet rs = rwb.getSheet(0); 
26             int num = rs.getRows();//得到行数
27             for(int j=0;j < num ;j++)
28             {
29                 Cell[] cell  = rs.getRow(j);//得到W一行的所有?br /> 30                  String value  = cell[0].getContents();//得到W一行,W一列的?br /> 31                  System.out.println("Values:"+rs.getRow(j)[0].getContents());
32             }
33         }
34         catch(Exception ex)
35         {
36                 ex.printStackTrace();
37         }
38     }
39 }

crazy 2007-09-03 11:23 发表评论
]]>
java记取xml配置文ghttp://www.tkk7.com/wufalong/articles/142229.htmlcrazycrazyMon, 03 Sep 2007 02:59:00 GMThttp://www.tkk7.com/wufalong/articles/142229.htmlhttp://www.tkk7.com/wufalong/comments/142229.htmlhttp://www.tkk7.com/wufalong/articles/142229.html#Feedback0http://www.tkk7.com/wufalong/comments/commentRss/142229.htmlhttp://www.tkk7.com/wufalong/services/trackbacks/142229.html需要用到commons-logging-1.0.4.jarQdom4j-1.4.jar?/p>
 1 import java.io.File;
 2 import java.io.IOException;
 3
 4 import org.apache.commons.logging.Log;
 5 import org.apache.commons.logging.LogFactory;
 6 import org.dom4j.Document;
 7 import org.dom4j.io.SAXReader;
 8
 9 /**
10  * @author wufalong
11  *
12  * TODO To change the template for this generated type comment go to
13  * Window - Preferences - Java - Code Style - Code Templates
14  */
15 public class LoadRootElementByConfigFile {
16     private static Log log = LogFactory.getLog(LoadRootElementByConfigFile.class);
17     public static Document getRootElement(){
18         String path="";
19         File file = new File(".");
20         try
21         {
22             path = file.getCanonicalPath();
23         }
24         catch (IOException e)
25         {
26             e.printStackTrace();
27         }
28
29         Document document = null;
30         String filePath = "";
31         try{ 
32             filePath = path+"/config.xml";
33             File f = new File(filePath);  //服务器运行目?br /> 34             SAXReader reader = new SAXReader();
35             document = reader.read(f);
36         }catch(Exception e){ 
37             filePath = path+"/src/config.xml";
38             File f = new File(filePath); //eclipse调试目录
39             SAXReader reader = new SAXReader();
40             try{
41                 document = reader.read(f);
42             }catch(Exception ex){
43                 
44             }
45         }
46         log.info("配置文g路径:"+filePath);
47         return document;    
48     }
49 }


crazy 2007-09-03 10:59 发表评论
]]>
վ֩ģ壺 ҹˬˬˬWWWƵʮ˽ | ѹۿҹ| 91ƷӾʢ| ëƬѹۿƵȫ| ڵƵ| ˾Ʒ޾Ʒ| ޲avһ| ޾Ʒվ| ҹƷһ鶹| ѹ߾Ʒһ | ľƷ| 2019Ļ| վƵA˫| ˾ƷƵȫ弶 | ĻƵ| ޾ƷӰۺ| Ʒ޾Ʒۿ| 鶹ȫַ| ¾þþþa| 91Ƶ| ùƷӰ˾þ| Ʒ޳AV߹ۿ| ޹AVӰԺ| GOGOGOѹۿ| ѵɫƵ| Avznlu| þþþAVר | Ļ| AëƬֻ| AëƬ| Ʒ༤þþ| ޴߶ר| һɫþ88޾Ʒۺ| ǵӰȫ| һƵ| һӰԺ| ͵ͼƬ| ĻþƷƵ| ŷŮƵ| Ļ| պƷƵ߹ۿ |