﻿<?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-用动作去驱动未来</title><link>http://www.blogjava.net/zuan-sky/</link><description>生命在于运动，让自己身体的每一个细胞都动起来吧.</description><language>zh-cn</language><lastBuildDate>Wed, 15 Apr 2026 12:12:01 GMT</lastBuildDate><pubDate>Wed, 15 Apr 2026 12:12:01 GMT</pubDate><ttl>60</ttl><item><title>List分拆为多少个List对象</title><link>http://www.blogjava.net/zuan-sky/archive/2013/01/30/394946.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Wed, 30 Jan 2013 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2013/01/30/394946.html</guid><wfw:comment>http://www.blogjava.net/zuan-sky/comments/394946.html</wfw:comment><comments>http://www.blogjava.net/zuan-sky/archive/2013/01/30/394946.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuan-sky/comments/commentRss/394946.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuan-sky/services/trackbacks/394946.html</trackback:ping><description><![CDATA[用递归实现了这么一个需求，一个list对象中存储了大量的数据，所以打算分拆为多个小的list，然后用多线程处理这些list，实现业务需求。直接上代码：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; "><div>import java.util.HashMap;<br />import java.util.LinkedList;<br />import java.util.List;<br />import java.util.Map;<br /><br />public class TestClass {<br />&nbsp;&nbsp; &nbsp;private <span style="color: #000000;">Map&lt;String,ArrayList&lt;String&gt;&gt;</span> map = <span style="color: #ff0000;">new </span><span style="color: #000000;">HashMap&lt;String,ArrayList&lt;String&gt;&gt;();</span></div><div>&nbsp;&nbsp;&nbsp; private int <span style="color: #000000;">k = 0;</span></div><br />&nbsp;&nbsp;&nbsp; public</span><span style="color: #000000; ">&nbsp;Map</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String,ArrayList</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;newTableList(ArrayList</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;list,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;num)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;tempList&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ArrayList</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;size&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;list.size();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">========================================</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;newList&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(List</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">)&nbsp;list.clone();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;size;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;num)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;list.get(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempList.add(str);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (list</span><span style="color: #000000; ">!=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;size</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(String.valueOf(k),&nbsp;(ArrayList</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">)&nbsp;tempList);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Key:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">k</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,list&nbsp;size:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">tempList.size());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">========================================</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;tempList.size();&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tempStr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tempList.get(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;isContains&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;newList.contains(tempStr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(isContains)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newList.remove(tempStr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newTableList((ArrayList</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">)newList,num);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;map;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><div>public static void main(String[] args) throws SQLException {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; TestClass ed = new<span style="color: #000000; "> TestClass</span>();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; ArrayList&lt;String&gt; tempList = <span style="color: #ff0000;">new </span>ArrayList&lt;String&gt;();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("111");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("222");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("333");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("444");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("555");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("666");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("777");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("888");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("999");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("100");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("aaa");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("bbb");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("ccc");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tempList.add("ddd");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;ed.newTableList(tempList,5);<br />&nbsp;&nbsp; &nbsp;}</div>}<br /></span></div><div><br />希望这段代码能帮助到些人。</div><img src ="http://www.blogjava.net/zuan-sky/aggbug/394946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2013-01-30 17:40 <a href="http://www.blogjava.net/zuan-sky/archive/2013/01/30/394946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java对指定目录下文件的读写</title><link>http://www.blogjava.net/zuan-sky/archive/2012/11/23/391845.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Fri, 23 Nov 2012 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2012/11/23/391845.html</guid><description><![CDATA[最近因为项目的国际化的需要，需要对整个项目的100来个插件做国际化，这是一件痛苦的事情，因为纯体力劳动。为了省点工作量，想着能不能写个程序批处理了，减少点工作量，于是就有了下面的代码。<br /><br />1.读取指定的（.java）文件：<br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "></span>public static String readFile(String path) throws IOException {<br /><div>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;File f = new File(path);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;StringBuffer res = new StringBuffer();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String filePathStr = f.getPath();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("获取文件的路径:::::::"+filePathStr);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FileInputStream fis = new FileInputStream(f);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStreamReader isr = new InputStreamReader(fis,Charset.forName("GBK")); //以gbk编码打开文本文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader br = new BufferedReader(isr, 8192 * 8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int linenum = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while((line=br.readLine())!=null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;linenum ++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;res.append(line+"此处可以添加你自己的字符串处理逻辑"+"\r\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; br.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return res.toString();<br />&nbsp;&nbsp; &nbsp;}</div></div></div>2.读取的文件内容信息写到指定的（.java）文件<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><div>public static boolean writeFile(String cont, String path) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;try {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;File dist = new File(path);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(dist),"GBK");&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.write(cont);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.flush();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.close();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return true;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} catch (IOException e) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;e.printStackTrace();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return false;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;}</div></div>3.查找指定目录下所有符合条件的.java文件，并更新文件信息<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><div>&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 查找文件<br />&nbsp;&nbsp;&nbsp;&nbsp; * @param f<br />&nbsp;&nbsp;&nbsp;&nbsp; * @throws IOException <br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; public static void findFile(File f) throws IOException {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(f.exists()) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(f.isDirectory()) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for(File fs:f.listFiles(ff)) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;findFile(fs);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} else {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;updateFile(f);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 逐行读java文件<br />&nbsp;&nbsp;&nbsp;&nbsp; * @param f<br />&nbsp;&nbsp;&nbsp;&nbsp; * @throws IOException<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp; &nbsp;private static void updateFile(File f) throws IOException {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String filePathStr = f.getPath();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("开始读取文件的路径:::::::"+filePathStr);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FileInputStream fis = new FileInputStream(f);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStreamReader isr = new InputStreamReader(fis,Charset.forName("GBK")); //以gbk编码打开文本文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader br = new BufferedReader(isr, 8192 * 8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int linenum = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer res = new StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while((line=br.readLine())!=null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String updateStr= updateStr(line);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;res.append(updateStr+"\r\n"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(!line.trim().equals(updateStr.trim())) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;linenum ++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; br.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果文件有修改，则修改后的文件，覆盖原有文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(linenum&gt;0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("============================="); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("filePathStr:"+filePathStr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("文件修改了："+linenum+"处。");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("=============================");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String cont = res.toString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;ReadWriteFile.write(cont, filePathStr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;/**<br />&nbsp;&nbsp; &nbsp; * 验证读取的字符串信息<br />&nbsp;&nbsp; &nbsp; * 和更新字符串信息<br />&nbsp;&nbsp; &nbsp; * @param str<br />&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;private static String updateStr(String str) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//判断字符串是否是需要更新的字符串<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;boolean isok = filterStr(str);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int strNum = StringValidation.strNum(str, StringValidation.ch);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(isok || strNum == 0) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return str;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} else {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String temp = "";&nbsp; <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for(int i=1;i&lt;=strNum/2;i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp += " //$NON-NLS-"+i+"$"; //需要添加的字符<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;str = str+temp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return str;<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;//过滤文件类型<br />&nbsp;&nbsp;&nbsp; private static FileFilter ff = new FileFilter() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public boolean accept(File pathname) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String path = pathname.getName().toLowerCase();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.info("FileFilter path::::"+path); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //只匹配 .java 结尾的文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pathname.isDirectory() || path.endsWith(".java")) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; };<br /><br /><div>&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp; &nbsp; * 过滤掉不需要处理的字符串<br />&nbsp;&nbsp; &nbsp; * @param str<br />&nbsp;&nbsp; &nbsp; * @return<br />&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;public static boolean filterStr(String str) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;boolean isok = false;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//过滤字符串<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;isok = (str.indexOf("import ")&gt;=0)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| (str.indexOf("package ")&gt;=0)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| (str.indexOf(" class ")&gt;=0)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| (str.indexOf("//$NON-NLS")&gt;=0)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| (str.indexOf("//")==0)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| (str.indexOf("/*")&gt;=0)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| (str.indexOf("*")&gt;=0)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| (str.trim().indexOf("@")==0) <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| (str.indexOf("\"")==-1) <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| ("".equals(str)) <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;|| isCh(str);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return isok;<br />&nbsp;&nbsp; &nbsp;}<br /><br /><div>&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp; &nbsp; * 验证字符串是否含有中文字符<br />&nbsp;&nbsp; &nbsp; * @param str<br />&nbsp;&nbsp; &nbsp; * @return<br />&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;public static boolean isCh(String str) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Pattern&nbsp;&nbsp; pa&nbsp;&nbsp; =&nbsp;&nbsp; Pattern.compile("[\u4E00-\u9FA0]"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matcher&nbsp;&nbsp; m&nbsp;&nbsp; =&nbsp;&nbsp; pa.matcher(str);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean isok = m.find();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return isok;<br />&nbsp;&nbsp; &nbsp;}</div></div></div></div><br />总结：当我们拿到一个别人给的需求，先不要急于去处理，先分析，再分析，然后做出最优的解决方案，处理好这项工作。<img src ="http://www.blogjava.net/zuan-sky/aggbug/391845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2012-11-23 15:32 <a href="http://www.blogjava.net/zuan-sky/archive/2012/11/23/391845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse下添加反编译插件jad.exe</title><link>http://www.blogjava.net/zuan-sky/archive/2012/11/09/391104.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Fri, 09 Nov 2012 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2012/11/09/391104.html</guid><wfw:comment>http://www.blogjava.net/zuan-sky/comments/391104.html</wfw:comment><comments>http://www.blogjava.net/zuan-sky/archive/2012/11/09/391104.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zuan-sky/comments/commentRss/391104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuan-sky/services/trackbacks/391104.html</trackback:ping><description><![CDATA[相信学习java的都会用到反编译工具查看.class文件，接下来简单的记录下，在eclipse下安装反编译插件的过程，希望能帮助到你。<br /><br /><div>首先： 我们需要下载：net.sf.jadclipse_3.3.0.jar&nbsp; 参考下载地址：<a href="http://download.csdn.net/detail/lk_kuaile/1725313">http://download.csdn.net/detail/lk_kuaile/1725313</a></div>其次： 还需要下载：jad.exe 参考下载地址：<a href="http://ishare.iask.sina.com.cn/f/15267016.html?from=like">http://ishare.iask.sina.com.cn/f/15267016.html?from=like</a><br /><br />接下来：我把下载的 net.sf.jadclipse_3.3.0.jar 放入到自己的文件夹下：eclipse\plugins 目录下。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重启eclipse，打开window-preferences--java 指定jad.exe的绝对路径。<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <img alt="" src="http://www.blogjava.net/images/blogjava_net/zuan-sky/111.jpg" height="500" width="727" /><br />点击ok，就可以了。我们就可以很方便的在Eclipse下查看jar下的.class 文件了。<br /><img src ="http://www.blogjava.net/zuan-sky/aggbug/391104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2012-11-09 16:46 <a href="http://www.blogjava.net/zuan-sky/archive/2012/11/09/391104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> ECLIPSE 添加插件3种方法 </title><link>http://www.blogjava.net/zuan-sky/archive/2012/11/08/391045.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Thu, 08 Nov 2012 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2012/11/08/391045.html</guid><wfw:comment>http://www.blogjava.net/zuan-sky/comments/391045.html</wfw:comment><comments>http://www.blogjava.net/zuan-sky/archive/2012/11/08/391045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuan-sky/comments/commentRss/391045.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuan-sky/services/trackbacks/391045.html</trackback:ping><description><![CDATA[<div><div id="article_content"> <div id="blog_text"> <p>eclipse 添加插件有3中方法：</p> <p>&nbsp;&nbsp;&nbsp;  第一种：解压eclipse 插件 里面分别包含两个文件夹features和plugins ，然后把两个文件夹分别复制到eclipse 下所对应的文件夹下。删除 configuration文件夹下的  org.eclipse.update文件夹。<br /> 重新启动eclipse，可以在eclipse的菜单"Help"--&gt;"About Eclipse SDK"--&gt;"Feature Details" 和"Plug-in Details"中看到新安装的插件。</p> <p>&nbsp;&nbsp;&nbsp; 第二种：新建一个文件夹并命名为eclipse，解压eclipse 插件，分别将文件夹features和文件夹plugins 放入该文件夹下，然后找到eclipse SDK下的links文件夹，在links文件夹中新建一个YourFileName.link文件，内容是"path=${your eclipse-plugin path}" 。重新启动eclipse，可以在eclipse的菜单"Help"--&gt;"About Eclipse SDK"--&gt;"Feature Details" 和"Plug-in Details"中看到新安装的插件。</p> <p><br /> &nbsp;&nbsp;  第三种：解压eclipse 插件，分别将文件夹features和文件夹plugins 放入eclipse安装文件夹下。</p> <p><br /> 疑问：为什么把插件的文件夹features和文件夹plugins复制到eclipse安装文件夹下，原来文件夹features和文件夹plugins的内容不被覆盖？</p> </div> </div></div><img src ="http://www.blogjava.net/zuan-sky/aggbug/391045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2012-11-08 18:04 <a href="http://www.blogjava.net/zuan-sky/archive/2012/11/08/391045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse3.7插件构建自定义右键菜单 </title><link>http://www.blogjava.net/zuan-sky/archive/2012/11/08/391043.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Thu, 08 Nov 2012 09:55:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2012/11/08/391043.html</guid><wfw:comment>http://www.blogjava.net/zuan-sky/comments/391043.html</wfw:comment><comments>http://www.blogjava.net/zuan-sky/archive/2012/11/08/391043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuan-sky/comments/commentRss/391043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuan-sky/services/trackbacks/391043.html</trackback:ping><description><![CDATA[<div><p>原文地址：<a href="http://www.cnblogs.com/skyme/archive/2012/01/12/2320128.html">http://www.cnblogs.com/skyme/archive/2012/01/12/2320128.html</a></p> <p><br /></p></div><img src ="http://www.blogjava.net/zuan-sky/aggbug/391043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2012-11-08 17:55 <a href="http://www.blogjava.net/zuan-sky/archive/2012/11/08/391043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Enum的使用与分析</title><link>http://www.blogjava.net/zuan-sky/archive/2012/11/07/390964.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Wed, 07 Nov 2012 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2012/11/07/390964.html</guid><wfw:comment>http://www.blogjava.net/zuan-sky/comments/390964.html</wfw:comment><comments>http://www.blogjava.net/zuan-sky/archive/2012/11/07/390964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuan-sky/comments/commentRss/390964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuan-sky/services/trackbacks/390964.html</trackback:ping><description><![CDATA[<div><p>示例：</p> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">&nbsp;EnumTest&nbsp;{&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FRANK(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">The&nbsp;given&nbsp;name&nbsp;of&nbsp;me</span><span style="color: #000000; ">"</span><span style="color: #000000; ">),&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LIU(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">The&nbsp;family&nbsp;name&nbsp;of&nbsp;me</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;context;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;getContext(){&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.context;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;EnumTest(String&nbsp;context){&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.context&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;context;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args){&nbsp;&nbsp;<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(EnumTest&nbsp;name&nbsp;:EnumTest.values()){&nbsp;&nbsp;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">name.getContext());&nbsp;&nbsp;<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(EnumTest.FRANK.getDeclaringClass());&nbsp;&nbsp;<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br /></span></div> <p><strong>Java中枚举实现的分析：</strong></p></div><div><p>示例：</p> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">&nbsp;Color{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;RED,BLUE,BLACK,YELLOW,GREEN&nbsp;&nbsp;&nbsp;&nbsp;<br />} <br /></span></div><pre><ol><li>&nbsp; <br /></li></ol></pre></div><div><p>显然，enum很像特殊的class，实际上enum声明定义的类型就是一个类。  而这些类都是类库中Enum类的子类(java.lang.Enum&lt;E&gt;)。它们继承了这个Enum中的许多有用的方法。我们对代码编译之 后发现，编译器将enum类型单独编译成了一个字节码文件：Color.class。</p> <p>Color字节码代码：</p> <pre><ol><li><span>final&nbsp;enum&nbsp;hr.test.Color&nbsp;{ &nbsp;</span></li><li>&nbsp;&nbsp; &nbsp;</li><li>&nbsp;//&nbsp;所有的枚举值都是类静态常量 &nbsp;</li><li>&amp;nbsp;public&nbsp;static&nbsp;final&nbsp;enum&nbsp;hr.test.Color&nbsp;RED; &nbsp;</li><li>&amp;nbsp;public&nbsp;static&nbsp;final&nbsp;enum&nbsp;hr.test.Color&nbsp;BLUE; &nbsp;</li><li>&nbsp;public&nbsp;static&nbsp;final&nbsp;enum&nbsp;hr.test.Color&nbsp;BLACK; &nbsp;</li><li>&nbsp;public&nbsp;static&nbsp;final&nbsp;enum&nbsp;hr.test.Color&nbsp;YELLOW; &nbsp;</li><li>&nbsp;public&nbsp;static&nbsp;final&nbsp;enum&nbsp;hr.test.Color&nbsp;GREEN; &nbsp;</li><li>&nbsp; &nbsp;</li><li>private&nbsp;static&nbsp;final&nbsp;synthetic&nbsp;hr.test.Color[]&nbsp;ENUM$VALUES; &nbsp;</li><li>&nbsp;&nbsp; &nbsp;</li><li>&nbsp;&nbsp;//&nbsp;初始化过程，对枚举类的所有枚举值对象进行第一次初始化 &nbsp;</li><li>&amp;nbsp;static&nbsp;{ &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;new&nbsp;hr.test.Color&nbsp;[1]&nbsp; &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;dup &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;ldc&nbsp;&lt;String&nbsp;"RED"&gt;&nbsp;[16]&nbsp;//把枚举值字符串"RED"压入操作数栈 &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;iconst_0&nbsp;&nbsp;//&nbsp;把整型值0压入操作数栈 &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;invokespecial&nbsp;hr.test.Color(java.lang.String,&nbsp;int)&nbsp;[17]&nbsp;//调用Color类的私有构造器创建Color对象RED &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;putstatic&nbsp;hr.test.Color.RED&nbsp;:&nbsp;hr.test.Color&nbsp;[21]&nbsp;&nbsp;//将枚举对象赋给Color的静态常量RED。 &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.........&nbsp;&nbsp;枚举对象BLUE等与上同 &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;102&nbsp;&nbsp;return&nbsp;</li><li>}; &nbsp;</li><li>&nbsp;&nbsp; &nbsp;</li><li>&nbsp;&nbsp;//&nbsp;私有构造器，外部不可能动态创建一个枚举类对象(也就是不可能动态创建一个枚举值)。 &nbsp;</li><li>&nbsp;private&nbsp;Color(java.lang.String&nbsp;arg0,&nbsp;int&nbsp;arg1){ &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;调用父类Enum的受保护构造器创建一个枚举对象 &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;invokespecial&nbsp;java.lang.Enum(java.lang.String,&nbsp;int)&nbsp;[38] &nbsp;</li><li>}; &nbsp;</li><li>&amp;nbsp; &nbsp;</li><li>&nbsp;public&nbsp;static&nbsp;hr.test.Color[]&nbsp;values(); &nbsp;</li><li>&nbsp;&nbsp; &nbsp;</li><li>&nbsp;&nbsp;&nbsp;//&nbsp;实现Enum类的抽象方法&nbsp;&nbsp; &nbsp;</li><li>&nbsp;&nbsp;public&nbsp;static&nbsp;hr.test.Color&nbsp;valueOf(java.lang.String&nbsp;arg0); &nbsp;</li><li>}&nbsp;</li></ol></pre> <p>下面我们就详细介绍enum定义的枚举类的特征及其用法。（后面均用Color举例）</p> <p><strong>1、Color枚举类就是class，而且是一个不可以被继承的final类。</strong></p> <p>其枚举值(RED,BLUE...)都是Color类型的类静态常量， 我们可以通过下面的方式来得到Color枚举类的一个实例：</p> <pre><ol><li><span>Color&nbsp;c=Color.RED;&nbsp;&nbsp;</span></li></ol></pre> <p>注意：这些枚举值都是public static final的，也就是我们经常所定义的常量方式，因此枚举类中的枚举值最好全部大写。</p> <p><strong>2、即然枚举类是class，当然在枚举类型中有构造器，方法和数据域。但是，枚举类的构造器有很大的不同： </strong></p> <p>(1) 构造器只是在构造枚举值的时候被调用。</p> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">&nbsp;Color{&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RED(</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">),BLUE(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">),BLACK(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">),YELLOW(</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">),GREEN(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">255</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">构造枚举值，比如RED(255,0,0)&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;Color(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;rv,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;gv,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;bv){&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.redValue</span><span style="color: #000000; ">=</span><span style="color: #000000; ">rv;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.greenValue</span><span style="color: #000000; ">=</span><span style="color: #000000; ">gv;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.blueValue</span><span style="color: #000000; ">=</span><span style="color: #000000; ">bv;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;toString(){&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">覆盖了父类Enum的toString()&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.toString()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">redValue</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">greenValue</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">blueValue</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;redValue;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">自定义数据域，private为了封装。&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;greenValue;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;blueValue;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /></span></div> <p>(2) 构造器只能私有private，绝对不允许有public构造器。 这样可以保证外部代码无法新构造枚举类的实例。这也是完全符合情理的，因为我们知道枚举值是public static final的常量而已。</p> <p>但枚举类的方法和数据域可以允许外部访问。</p> <pre><ol><li><span>public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[]) &nbsp;</span></li><li>{ &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Color&nbsp;colors=new&nbsp;Color(100,200,300);&nbsp;&nbsp;//wrong &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color&nbsp;color=Color.RED; &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(color);&nbsp;&nbsp;//&nbsp;调用了toString()方法 &nbsp;</li><li>}&nbsp;&nbsp;&nbsp; &nbsp;</li></ol></pre> <p><strong>3、所有枚举类都继承了Enum的方法，下面我们详细介绍这些方法。 </strong></p> <p>(1) ordinal()方法: 返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。</p> <pre><ol><li><span>Color.RED.ordinal();&nbsp;//返回结果：0 &nbsp;</span></li><li>Color.BLUE.ordinal();&nbsp;//返回结果：1&nbsp;</li></ol></pre> <p>(2) compareTo()方法:  Enum实现了java.lang.Comparable接口，因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺 序之差。当然，前提是两个枚举值必须属于同一个枚举类，否则会抛出ClassCastException()异常。(具体可见源代码)</p> <pre><ol><li><span>Color.RED.compareTo(Color.BLUE);&nbsp;//返回结果&nbsp;-1&nbsp;</span></li></ol></pre> <p>(3) values()方法： 静态方法，返回一个包含全部枚举值的数组。</p> <pre><ol><li><span>Color[]&nbsp;colors=Color.values();&nbsp;&nbsp;for(Color&nbsp;c:colors){&nbsp;&nbsp;System.out.print(c+",");&nbsp;} &nbsp;</span></li><li>//返回结果：RED,BLUE,BLACK&nbsp;YELLOW,GREEN,&nbsp;&nbsp;</li></ol></pre> <p>(4) toString()方法： 返回枚举常量的名称。</p> <pre><ol><li><span>Color&nbsp;c=Color.RED; &nbsp;</span></li><li>System.out.println(c);//返回结果:&nbsp;RED&nbsp;</li></ol></pre> <p>(5) valueOf()方法： 这个方法和toString方法是相对应的，返回带指定名称的指定枚举类型的枚举常量。</p> <pre><ol><li><span>Color.valueOf("BLUE");&nbsp;&nbsp;&nbsp;//返回结果:&nbsp;Color.BLUE&nbsp;</span></li></ol></pre> <p>(6) equals()方法： 比较两个枚举类对象的引用。</p> <pre><ol><li><span>//JDK源代码：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span></li><li>public&nbsp;final&nbsp;boolean&nbsp;equals(Object&nbsp;other)&nbsp;{&nbsp;&nbsp; &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this==other;&nbsp;&nbsp; &nbsp;</li><li>}&nbsp;</li></ol></pre> <p><strong>4、枚举类可以在switch语句中使用。</strong></p> <pre><ol><li><span>Color&nbsp;color=Color.RED; &nbsp;</span></li><li>switch(color){ &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;RED:&nbsp;System.out.println("it's&nbsp;red");break; &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;BLUE:&nbsp;System.out.println("it's&nbsp;blue");break; &nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;BLACK:&nbsp;System.out.println("it's&nbsp;blue");break; &nbsp;</li><li>}&nbsp;</li></ol></pre> <p>原文链接：<a href="http://www.cnblogs.com/frankliiu-java/archive/2010/12/07/1898721.html">http://www.cnblogs.com/frankliiu-java/archive/2010/12/07/1898721.html</a></p></div><img src ="http://www.blogjava.net/zuan-sky/aggbug/390964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2012-11-07 15:33 <a href="http://www.blogjava.net/zuan-sky/archive/2012/11/07/390964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate二级缓存攻略</title><link>http://www.blogjava.net/zuan-sky/archive/2012/11/07/390960.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Wed, 07 Nov 2012 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2012/11/07/390960.html</guid><wfw:comment>http://www.blogjava.net/zuan-sky/comments/390960.html</wfw:comment><comments>http://www.blogjava.net/zuan-sky/archive/2012/11/07/390960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuan-sky/comments/commentRss/390960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuan-sky/services/trackbacks/390960.html</trackback:ping><description><![CDATA[<div>很多人对二级缓存都不太了解，或者是有错误的认识，我一直想写一篇文章介绍一下hibernate的二级缓存的，今天终于忍不住了。 <br />我的经验主要来自hibernate2.1版本，基本原理和3.0、3.1是一样的，请原谅我的顽固不化。 <br /> <br />hibernate的session提供了一级缓存，每个session，对同一个id进行两次load，不会发送两条sql给数据库，但是session关闭的时候，一级缓存就失效了。 <br /> <br />二级缓存是SessionFactory级别的全局缓存，它底下可以使用不同的缓存类库，比如ehcache、oscache等，需要设置hibernate.cache.provider_class，我们这里用ehcache，在2.1中就是 <br />hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider <br />如果使用查询缓存，加上 <br />hibernate.cache.use_query_cache=true <br /> <br /> <br />缓存可以简单的看成一个Map，通过key在缓存里面找value。 <br /> <br /><strong>Class的缓存</strong> <br />对于一条记录，也就是一个PO来说，是根据ID来找的，缓存的key就是ID，value是POJO。无论list，load还是 iterate，只要读出一个对象，都会填充缓存。但是list不会使用缓存，而iterate会先取数据库select  id出来，然后一个id一个id的load，如果在缓存里面有，就从缓存取，没有的话就去数据库load。假设是读写缓存，需要设置： <br />&amp;lt;cache usage="read-write"/&amp;gt; <br />如果你使用的二级缓存实现是ehcache的话，需要配置ehcache.xml <br />&amp;lt;cache name="com.xxx.pojo.Foo" maxElementsInMemory="500"  eternal="false" timeToLiveSeconds="7200" timeToIdleSeconds="3600"  overflowToDisk="true" /&amp;gt; <br />其中eternal表示缓存是不是永远不超时，timeToLiveSeconds是缓存中每个元素（这里也就是一个POJO）的超时时间，如果 eternal="false"，超过指定的时间，这个元素就被移走了。timeToIdleSeconds是发呆时间，是可选的。当往缓存里面put的 元素超过500个时，如果overflowToDisk="true"，就会把缓存中的部分数据保存在硬盘上的临时文件里面。 <br />每个需要缓存的class都要这样配置。如果你没有配置，hibernate会在启动的时候警告你，然后使用defaultCache的配置，这样多个class会共享一个配置。 <br />当某个ID通过hibernate修改时，hibernate会知道，于是移除缓存。 <br />这样大家可能会想，同样的查询条件，第一次先list，第二次再iterate，就可以使用到缓存了。实际上这是很难的，因为你无法判断什么时候 是第一次，而且每次查询的条件通常是不一样的，假如数据库里面有100条记录，id从1到100，第一次list的时候出了前50个id，第二次 iterate的时候却查询到30至70号id，那么30-50是从缓存里面取的，51到70是从数据库取的，共发送1+20条sql。所以我一直认为 iterate没有什么用，总是会有1+N的问题。 <br />（题外话：有说法说大型查询用list会把整个结果集装入内存，很慢，而iterate只select  id比较好，但是大型查询总是要分页查的，谁也不会真的把整个结果集装进来，假如一页20条的话，iterate共需要执行21条语句，list虽然选择 若干字段，比iterate第一条select  id语句慢一些，但只有一条语句，不装入整个结果集hibernate还会根据数据库方言做优化，比如使用mysql的limit，整体看来应该还是 list快。） <br />如果想要对list或者iterate查询的结果缓存，就要用到查询缓存了 <br /> <br /><strong>查询缓存</strong> <br />首先需要配置hibernate.cache.use_query_cache=true <br />如果用ehcache，配置ehcache.xml，注意hibernate3.0以后不是net.sf的包名了 <br />&amp;lt;cache name="net.sf.hibernate.cache.StandardQueryCache"  <br />&nbsp;&nbsp; maxElementsInMemory="50" eternal="false" timeToIdleSeconds="3600"  <br />&nbsp;&nbsp; timeToLiveSeconds="7200" overflowToDisk="true"/&amp;gt; <br />&amp;lt;cache name="net.sf.hibernate.cache.UpdateTimestampsCache"  <br />&nbsp;&nbsp; maxElementsInMemory="5000" eternal="true" overflowToDisk="true"/&amp;gt; <br />然后 <br />query.setCacheable(true);//激活查询缓存 <br />query.setCacheRegion("myCacheRegion");//指定要使用的cacheRegion，可选 <br />第二行指定要使用的cacheRegion是myCacheRegion，即你可以给每个查询缓存做一个单独的配置，使用setCacheRegion来做这个指定，需要在ehcache.xml里面配置它： <br />&amp;lt;cache name="myCacheRegion" maxElementsInMemory="10"  eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="7200"  overflowToDisk="true" /&amp;gt; <br />如果省略第二行，不设置cacheRegion的话，那么会使用上面提到的标准查询缓存的配置，也就是net.sf.hibernate.cache.StandardQueryCache <br /> <br />对于查询缓存来说，缓存的key是根据hql生成的sql，再加上参数，分页等信息（可以通过日志输出看到，不过它的输出不是很可读，最好改一下它的代码）。 <br />比如hql： <br />from Cat c where c.name like ? <br />生成大致如下的sql： <br />select * from cat c where c.name like ? <br />参数是"tiger%"，那么查询缓存的key*大约*是这样的字符串（我是凭记忆写的，并不精确，不过看了也该明白了）： <br />select * from cat c where c.name like ? , parameter:tiger% <br />这样，保证了同样的查询、同样的参数等条件下具有一样的key。 <br />现在说说缓存的value，如果是list方式的话，value在这里并不是整个结果集，而是查询出来的这一串ID。也就是说，不管是list方 法还是iterate方法，第一次查询的时候，它们的查询方式很它们平时的方式是一样的，list执行一条sql，iterate执行1+N条，多出来的 行为是它们填充了缓存。但是到同样条件第二次查询的时候，就都和iterate的行为一样了，根据缓存的key去缓存里面查到了value，value是 一串id，然后在到class的缓存里面去一个一个的load出来。这样做是为了节约内存。 <br />可以看出来，查询缓存需要打开相关类的class缓存。list和iterate方法第一次执行的时候，都是既填充查询缓存又填充class缓存的。 <br /><strong>这里还有一个很容易被忽视的重要问题，即打开查询缓存以后，即使是list方法也可能遇到1+N的问题！</strong>相同 条件第一次list的时候，因为查询缓存中找不到，不管class缓存是否存在数据，总是发送一条sql语句到数据库获取全部数据，然后填充查询缓存和 class缓存。但是第二次执行的时候，问题就来了，如果你的class缓存的超时时间比较短，现在class缓存都超时了，但是查询缓存还在，那么 list方法在获取id串以后，将会一个一个去数据库load！因此，class缓存的超时时间一定不能短于查询缓存设置的超时时间！如果还设置了发呆时 间的话，保证class缓存的发呆时间也大于查询的缓存的生存时间。这里还有其他情况，比如class缓存被程序强制evict了，这种情况就请自己注意 了。 <br /> <br />另外，如果hql查询包含select字句，那么查询缓存里面的value就是整个结果集了。 <br /> <br />当hibernate更新数据库的时候，它怎么知道更新哪些查询缓存呢？ <br />hibernate在一个地方维护每个表的最后更新时间，其实也就是放在上面net.sf.hibernate.cache.UpdateTimestampsCache所指定的缓存配置里面。 <br />当通过hibernate更新的时候，hibernate会知道这次更新影响了哪些表。然后它更新这些表的最后更新时间。每个缓存都有一个生成时 间和这个缓存所查询的表，当hibernate查询一个缓存是否存在的时候，如果缓存存在，它还要取出缓存的生成时间和这个缓存所查询的表，然后去查找这 些表的最后更新时间，如果有一个表在生成时间后更新过了，那么这个缓存是无效的。 <br />可以看出，只要更新过一个表，那么凡是涉及到这个表的查询缓存就失效了，因此查询缓存的命中率可能会比较低。 <br /> <br /><strong>Collection缓存</strong> <br />需要在hbm的collection里面设置 <br />&amp;lt;cache usage="read-write"/&amp;gt; <br />假如class是Cat，collection叫children，那么ehcache里面配置 <br />&amp;lt;cache name="com.xxx.pojo.Cat.children"  <br />&nbsp;&nbsp; maxElementsInMemory="20" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="7200"  <br />&nbsp;&nbsp; overflowToDisk="true" /&amp;gt; <br />Collection的缓存和前面查询缓存的list一样，也是只保持一串id，但它不会因为这个表更新过就失效，一个collection缓存仅在这个collection里面的元素有增删时才失效。 <br />这样有一个问题，如果你的collection是根据某个字段排序的，当其中一个元素更新了该字段时，导致顺序改变时，collection缓存里面的顺序没有做更新。 <br /> <br /><strong>缓存策略</strong> <br />只读缓存（read-only）：没有什么好说的 <br />读/写缓存（read-write）:程序可能要的更新数据 <br />不严格的读/写缓存（nonstrict-read-write）：需要更新数据，但是两个事务更新同一条记录的可能性很小，性能比读写缓存好 <br />事务缓存（transactional）：缓存支持事务，发生异常的时候，缓存也能够回滚，只支持jta环境，这个我没有怎么研究过 <br /> <br />读写缓存和不严格读写缓存在实现上的区别在于，读写缓存更新缓存的时候会把缓存里面的数据换成一个锁，其他事务如果去取相应的缓存数据，发现被锁住了，然后就直接取数据库查询。 <br />在hibernate2.1的ehcache实现中，如果锁住部分缓存的事务发生了异常，那么缓存会一直被锁住，直到60秒后超时。 <br />不严格读写缓存不锁定缓存中的数据。 <br /> <br /> <br /><strong>使用二级缓存的前置条件</strong> <br />你的hibernate程序对数据库有独占的写访问权，其他的进程更新了数据库，hibernate是不可能知道的。你操作数据库必需直接通过 hibernate，如果你调用存储过程，或者自己使用jdbc更新数据库，hibernate也是不知道的。hibernate3.0的大批量更新和删 除是不更新二级缓存的，但是据说3.1已经解决了这个问题。 <br />这个限制相当的棘手，有时候hibernate做批量更新、删除很慢，但是你却不能自己写jdbc来优化，很郁闷吧。 <br />SessionFactory也提供了移除缓存的方法，你一定要自己写一些JDBC的话，可以调用这些方法移除缓存，这些方法是： <br /> void evict(Class persistentClass) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Evict all entries from the second-level cache. <br /> void evict(Class persistentClass, Serializable id) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Evict an entry from the second-level cache. <br /> void evictCollection(String roleName) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Evict all entries from the second-level cache. <br /> void evictCollection(String roleName, Serializable id) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Evict an entry from the second-level cache. <br /> void evictQueries() <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Evict any query result sets cached in the default query cache region. <br /> void evictQueries(String cacheRegion) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Evict any query result sets cached in the named query cache region. <br />不过我不建议这样做，因为这样很难维护。比如你现在用JDBC批量更新了某个表，有3个查询缓存会用到这个表，用 evictQueries(String cacheRegion)移除了3个查询缓存，然后用evict(Class  persistentClass)移除了class缓存，看上去好像完整了。不过哪天你添加了一个相关查询缓存，可能会忘记更新这里的移除代码。如果你的 jdbc代码到处都是，在你添加一个查询缓存的时候，还知道其他什么地方也要做相应的改动吗？ <br /> <br />---------------------------------------------------- <br /> <br /><strong>总结：</strong> <br />不要想当然的以为缓存一定能提高性能，仅仅在你能够驾驭它并且条件合适的情况下才是这样的。hibernate的二级缓存限制还是比较多的，不方便用jdbc可能会大大的降低更新性能。在不了解原理的情况下乱用，可能会有1+N的问题。不当的使用还可能导致读出脏数据。 <br />如果受不了hibernate的诸多限制，那么还是自己在应用程序的层面上做缓存吧。 <br />在越高的层面上做缓存，效果就会越好。就好像尽管磁盘有缓存，数据库还是要实现自己的缓存，尽管数据库有缓存，咱们的应用程序还是要做缓存。因为 底层的缓存它并不知道高层要用这些数据干什么，只能做的比较通用，而高层可以有针对性的实现缓存，所以在更高的级别上做缓存，效果也要好些吧。 </div><br />================================================================================<br /><div>原文出处：http://www.iteye.com/topic/18904，对hibernate 二级缓存 讲解的很彻底，所以转载了，一同分享.</div><br /><img src ="http://www.blogjava.net/zuan-sky/aggbug/390960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2012-11-07 15:09 <a href="http://www.blogjava.net/zuan-sky/archive/2012/11/07/390960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（按Ctrl+C）选中的table表单中的数据，粘贴（按Ctrl+V）到目标文件(Excel,Word...)</title><link>http://www.blogjava.net/zuan-sky/archive/2012/11/07/390922.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Wed, 07 Nov 2012 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2012/11/07/390922.html</guid><wfw:comment>http://www.blogjava.net/zuan-sky/comments/390922.html</wfw:comment><comments>http://www.blogjava.net/zuan-sky/archive/2012/11/07/390922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuan-sky/comments/commentRss/390922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuan-sky/services/trackbacks/390922.html</trackback:ping><description><![CDATA[<div>希望这个方法能帮助到你：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;addCopyListener(</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;Table&nbsp;table)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.addKeyListener(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;KeyAdapter()&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;keyPressed(KeyEvent&nbsp;e)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(e.stateMask&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;SWT.CTRL&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;e.keyCode&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">c</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clipboard&nbsp;board&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Clipboard(Display.getDefault());<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableItem[]&nbsp;item&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;table.getSelection();<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableColumn[]&nbsp;tc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;table.getColumns();<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;copyStr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">""</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;item.length;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;j&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;tc.length;&nbsp;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyStr&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;item[i].getText(j)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\t</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyStr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;copyStr&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">""</span><span style="color: #000000; ">.equals(copyStr))&nbsp;{<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;board.setContents(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;String[]&nbsp;{&nbsp;copyStr&nbsp;},&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Transfer[]&nbsp;{&nbsp;TextTransfer.getInstance()&nbsp;});<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div></div><img src ="http://www.blogjava.net/zuan-sky/aggbug/390922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2012-11-07 10:11 <a href="http://www.blogjava.net/zuan-sky/archive/2012/11/07/390922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>svn 红色感叹号</title><link>http://www.blogjava.net/zuan-sky/archive/2012/10/17/389748.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Wed, 17 Oct 2012 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2012/10/17/389748.html</guid><wfw:comment>http://www.blogjava.net/zuan-sky/comments/389748.html</wfw:comment><comments>http://www.blogjava.net/zuan-sky/archive/2012/10/17/389748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuan-sky/comments/commentRss/389748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuan-sky/services/trackbacks/389748.html</trackback:ping><description><![CDATA[在解决插件与插件的关系的时候，一个不小心，点击添加插件的依赖的时候，点到了下面一个插件文件，导致两个插件相互依赖了，就出现了&#8220;svn 红色感叹号&#8221;标记，去掉相互依赖，此问题解决。<img src ="http://www.blogjava.net/zuan-sky/aggbug/389748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2012-10-17 16:04 <a href="http://www.blogjava.net/zuan-sky/archive/2012/10/17/389748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java swt table 点击表头排序</title><link>http://www.blogjava.net/zuan-sky/archive/2012/04/24/376412.html</link><dc:creator>黑蚂蚁</dc:creator><author>黑蚂蚁</author><pubDate>Tue, 24 Apr 2012 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/zuan-sky/archive/2012/04/24/376412.html</guid><wfw:comment>http://www.blogjava.net/zuan-sky/comments/376412.html</wfw:comment><comments>http://www.blogjava.net/zuan-sky/archive/2012/04/24/376412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuan-sky/comments/commentRss/376412.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuan-sky/services/trackbacks/376412.html</trackback:ping><description><![CDATA[<div>public class PickerShellTableSort {<br />&nbsp;&nbsp; &nbsp;private Table table;<br />&nbsp;&nbsp; &nbsp;private Image upImage;<br />&nbsp;&nbsp;&nbsp; private Image downImage;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; private int[] sortFlags;<br />&nbsp;&nbsp;&nbsp; private int[] sortColIndexes;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;public PickerShellTableSort(Table table) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int[] sortCols = new int[table.getColumnCount()];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 1; i &lt; sortCols.length; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sortCols[i] = i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.table = table;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sortColIndexes = sortCols; &nbsp;&nbsp; &nbsp;//需要排序的索引<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sortFlags = new int[table.getColumnCount()];<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;init();<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;private void init() {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (int i = 0; i &lt; sortColIndexes.length; i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;final int sortColIndex = this.sortColIndexes[i];<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TableColumn col = table.getColumn(sortColIndex);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;col.addListener(SWT.Selection, new Listener() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void handleEvent(Event event) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; columnHandleEvent(event, sortColIndex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.upImage = FrameCommonActivator.getImageDescriptor("icons/up.gif").createImage();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.downImage = FrameCommonActivator.getImageDescriptor("icons/down.gif").createImage(); <br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;private void columnHandleEvent(Event event, int sortColIndex) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;try {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (int i = 0; i &lt; sortColIndexes.length; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TableColumn tabCol = table.getColumn(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tabCol.setImage(null);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;boolean selectColumnType = this.isStringOrNumberType(sortColIndex);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if (this.sortFlags[sortColIndex] == 1) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;clearSortFlags();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sortFlags[sortColIndex] = -1;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(selectColumnType) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.addNumberSorter(table.getColumn(sortColIndex), true);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} else {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.addStringSorter(table.getColumn(sortColIndex), true);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;table.getColumn(sortColIndex).setImage(this.upImage);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} else {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.sortFlags[sortColIndex] = 1;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(selectColumnType) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.addNumberSorter(table.getColumn(sortColIndex), false);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} else {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.addStringSorter(table.getColumn(sortColIndex), false);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;table.getColumn(sortColIndex).setImage(this.downImage);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} catch (Exception e) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;e.printStackTrace();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;/**<br />&nbsp;&nbsp; &nbsp; * @param table<br />&nbsp;&nbsp; &nbsp; * @param column<br />&nbsp;&nbsp; &nbsp; * @param isAscend &nbsp;<br />&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;private void addStringSorter(TableColumn column,boolean isAscend) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Collator comparator = Collator.getInstance(Locale.getDefault());<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int columnIndex = getColumnIndex(table, column);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TableItem[] items = table.getItems();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用冒泡法进行排序<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 1; i &lt; items.length; i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; String str2value = items[i].getText(columnIndex);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; if(str2value.equalsIgnoreCase("")){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //当遇到表格中的空项目时，就停止往下检索排序项目<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; for (int j = 0; j &lt; i; j++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; String str1value = items[j].getText(columnIndex);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean isLessThan = comparator.compare(str2value, str1value) &lt; 0;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((isAscend &amp;&amp; isLessThan) || (!isAscend &amp;&amp; !isLessThan)) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] values = getTableItemText(table, items[i]);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object obj = items[i].getData();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items[i].dispose();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TableItem item = new TableItem(table, SWT.NONE, j);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item.setText(values);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item.setData(obj);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items = table.getItems();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table.setSortColumn(column);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table.setSortDirection((isAscend ? SWT.UP : SWT.DOWN));<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isAscend = !isAscend;<br />&nbsp;&nbsp; &nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;private void addNumberSorter(TableColumn column,boolean isAscend) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int columnIndex = getColumnIndex(table, column);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TableItem[] items = table.getItems();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用冒泡法进行排序<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 1; i &lt; items.length; i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String strvalue2 = items[i].getText(columnIndex);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(strvalue2.equalsIgnoreCase("")){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //当遇到表格中的空项目时，就停止往下检索排序项目<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; i; j++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String strvalue1 = items[j].getText(columnIndex);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将字符串类型数据转化为float类型<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float numbervalue1=Float.valueOf(strvalue1);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float numbervalue2=Float.valueOf(strvalue2);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean isLessThan =false;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(numbervalue2&lt;numbervalue1){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;isLessThan =true;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((isAscend &amp;&amp; isLessThan) || (!isAscend &amp;&amp; !isLessThan)) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] values = getTableItemText(table, items[i]);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object obj = items[i].getData();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items[i].dispose();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TableItem item = new TableItem(table, SWT.NONE, j);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item.setText(values);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item.setData(obj);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items = table.getItems();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table.setSortColumn(column);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table.setSortDirection((isAscend ? SWT.UP : SWT.DOWN));<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isAscend = !isAscend;<br />&nbsp;&nbsp; &nbsp; }<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;private&nbsp; int getColumnIndex(Table table, TableColumn column) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; TableColumn[] columns = table.getColumns();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; columns.length; i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if (columns[i].equals(column))<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return i;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; return -1;<br />&nbsp;&nbsp; &nbsp; }<br />&nbsp;&nbsp; &nbsp; <br />&nbsp;&nbsp; &nbsp;private&nbsp; String[] getTableItemText(Table table, TableItem item) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; int count = table.getColumnCount();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; String[] strs = new String[count];<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; count; i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;strs[i] = item.getText(i);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; return strs;<br />&nbsp;&nbsp; &nbsp; }<br /><br />&nbsp;&nbsp; &nbsp; private void clearSortFlags() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; table.getColumnCount(); i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.sortFlags[i] = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; &nbsp; }<br />&nbsp;&nbsp; &nbsp; <br />&nbsp;&nbsp; &nbsp; /**<br />&nbsp;&nbsp; &nbsp;&nbsp; * 判断当前选中列的数据类型<br />&nbsp;&nbsp; &nbsp;&nbsp; * @return<br />&nbsp;&nbsp; &nbsp;&nbsp; */<br />&nbsp;&nbsp; &nbsp; private boolean isStringOrNumberType(int selectColumnIndex) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; boolean isok = false ;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; TableItem[] items = table.getItems();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; String[] str = new String[items.length];<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; for (int i = 0; i &lt; items.length; i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; str[i] = items[i].getText(selectColumnIndex);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; for (int i = 0; i &lt; str.length; i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String string = str[i];<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;isok = string.matches("^(-|\\+)?\\d+\\.?\\d*$");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//如果这一列中有一个是字符串，也按字符串排序<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(!isok) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return isok;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return isok ;<br />&nbsp;&nbsp; &nbsp; }<br />&nbsp;&nbsp; &nbsp;<br />}</div><img src ="http://www.blogjava.net/zuan-sky/aggbug/376412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuan-sky/" target="_blank">黑蚂蚁</a> 2012-04-24 09:56 <a href="http://www.blogjava.net/zuan-sky/archive/2012/04/24/376412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>