﻿<?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/super2/</link><description>学习复习</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 16:05:42 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 16:05:42 GMT</pubDate><ttl>60</ttl><item><title>Scanner----java控制台和文件读取的利器(java 5新增)</title><link>http://www.blogjava.net/super2/archive/2009/07/10/286236.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Fri, 10 Jul 2009 05:40:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/07/10/286236.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/286236.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/07/10/286236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/286236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/286236.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<div><span style="font-size: medium; ">上一次说java没有c++里类似cin这样的从控制台读取的命令，其实不对。今天介绍的Scanner这个类是java 5新增加的类,不仅使用方便，功能更是强大。先来看一个简单的例子:System.in指明从键盘读入数据&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="font-size: medium; ">import java.util.*;<br />
public class ScannerTest {<br />
&nbsp;</span></div>
<div id="articleBody" class="articleContent"><span style="font-size: medium; ">&nbsp;&nbsp; public static void main(String[] args){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Scanner scanner=new Scanner(System.in);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double a=<strong>scanner.nextDouble();</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(a);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</span>
<div><span style="font-size: medium; ">运行</span></div>
<div><span style="font-size: medium; ">输入 一个任意数然后输出这个数</span></div>
<div><span style="font-size: medium; ">&nbsp;</span></div>
<div><span style="font-size: medium; ">注意粗体字的地方，这一行就实现了从控制台输入数字的功能，如果要从键盘输入字符串</span><span style="font-size: medium; ">可以用：</span></div>
<div><span style="font-size: medium; ">String a=scanner.next();//注意不是nextString()</span></div>
<div><span style="font-size: medium; ">&nbsp;</span></div>
<div><span style="font-size: medium; ">Scanner还可以直接扫描文件，比如（有点长，耐心一点）。可以指定其他输入流的对象,如FileInputStream的对象,这样的话就是从文件里读入数据,而不是从键盘读入</span></div>
<div><span style="font-size: medium; ">import java.util.*;<br />
import java.io.*;<br />
public class ScannerTest {<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws IOException{//这里涉及到文件io操作<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double sum=0.0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int count=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileWriter fout=new FileWriter("text.txt");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fout.write("2 2.2 3 3.3 4 4.5 done");//往文件里写入这一字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fout.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileReader fin=new FileReader("text.txt");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Scanner scanner=new Scanner(fin);//注意这里的参数是FileReader类型的fin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(scanner.hasNext()){//如果有内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(scanner.hasNextDouble()){//如果是数字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum=sum+scanner.nextDouble();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count++;<br />
&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; String str=scanner.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(str.equals("done")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("文件格式错误!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<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;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("文件中数据的平均数是:"+sum/count);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</span></div>
<div><span style="font-size: medium; ">结果输出文件中数据的平均数是:3.1666666666666665<br />
这段程序的功能是将"2 2.2 3 3.3 4 4.5 done"写入文件scanner读取文件中的数直到done结束。并求出数字的平均值，比较有意思的是scanner会自动一空格作为分割符区分不同数字。当然也可以通过scanner.useDelimiter(Pattern pattern)来设置不同的分割符，比如 scanner.useDelimiter(",*");</span></div>
<div><span style="font-size: medium; ">如果你感兴趣，更多强大的功能可以参看jdk 5 的帮助文档</span></div>
</div>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><span style="line-height: 24px; font-size: medium; ">本文出自 &#8220;</span><a href="http://xhinker.blog.51cto.com/" style="text-decoration: none; color: #336699; "><span style="line-height: 24px; font-size: medium; ">Xhinker</span></a><span style="line-height: 24px; font-size: medium; ">&#8221; 博客，请务必保留此出处</span><a href="http://xhinker.blog.51cto.com/640011/133575" style="text-decoration: none; color: #336699; "><span style="line-height: 24px; font-size: medium; ">http://xhinker.blog.51cto.com/640011/133575</span></a></p>
</span><img src ="http://www.blogjava.net/super2/aggbug/286236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-07-10 13:40 <a href="http://www.blogjava.net/super2/archive/2009/07/10/286236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse 3.4使用摘录 </title><link>http://www.blogjava.net/super2/archive/2009/07/10/286235.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Fri, 10 Jul 2009 05:38:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/07/10/286235.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/286235.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/07/10/286235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/286235.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/286235.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1. VE -&nbsp; 升级地址：&nbsp;<a href="http://update.soyatec.org/Ganymede/ve/1.4" style="text-decoration: none; color: #336699; ">http://update.soyatec.org/Ganymede/ve/1.4</a>&nbsp;<br />
&nbsp;&nbsp;&nbsp; 参考页面：<a href="http://wiki.eclipse.org/VE/Installing#VE_1.4" style="text-decoration: none; color: #336699; ">http://wiki.eclipse.org/VE/Installing#VE_1.4</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
2. UML2 Tools： 选择Help-&gt;Software Updates -&gt;Available Software -&gt; Ganymeda -&gt;Models and Model Development下的EMF - Eclipse Modeling Framework Runtime and Tools，Graphical Modeling Framework Runtime， UML2 Diagram Search Feature， UML2 Search， UML2 Tools安装即可。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
3. Subclipse：Sub Version 工具：升级地址：<a href="http://subclipse.tigris.org/update_1.4.x" style="text-decoration: none; color: #336699; ">http://subclipse.tigris.org/update_1.4.x</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
4. Spring IDE：升级地址：<a href="http://springide.org/updatesite/site.xml" style="text-decoration: none; color: #336699; ">http://springide.org/updatesite/site.xml</a>，但须注意，安装时去掉Spring IDE Dependencies(Only for Eclipse 3.2.x)和Spring Mylyn Integration(Optional)选项。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
5. Hibernate Tool：需安装JBoss Tool，下载地址为：<a href="http://download.jboss.org/jbosstools/builds/nightly/200809111947-nightly/all/JBossTools-200809111947-nightly-ALL-win32.zip" style="text-decoration: none; color: #336699; ">http://download.jboss.org/jbosstools/builds/nightly/200809111947-nightly/all/JBossTools-200809111947-nightly-ALL-win32.zip</a><br />
&nbsp;<br />
6. Proedit -- 资源文件编辑工具，升级地址：<a href="http://propedit.sourceforge.jp/eclipse/updates/" style="text-decoration: none; color: #336699; ">http://propedit.sourceforge.jp/eclipse/updates/</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">转自：<a href="http://blog.csdn.net/sunshinestation/archive/2008/09/12/2919567.aspx" style="text-decoration: none; color: #336699; ">http://blog.csdn.net/sunshinestation/archive/2008/09/12/2919567.aspx</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
在Eclipse 3.4上正确安装Subersive(SVN)插件<br />
Eclipse 3.4菜单-&gt;Help-&gt;Software Updates...-&gt;选择Available Software</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">点击&#8220;Add Sites...&#8221;按钮，分别添加两个站点：<br />
<a href="http://download.eclipse.org/technology/subversive/0.7/update-site/" style="text-decoration: none; color: #336699; ">http://download.eclipse.org/technology/subversive/0.7/update-site/</a><br />
和<br />
<a href="http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/" style="text-decoration: none; color: #336699; ">http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">然后勾选以下选项，然后点击&#8220;Install...&#8221;安装，必成功：<br />
<a href="http://download.eclipse.org/technology/subversive/0.7/update-site/" style="text-decoration: none; color: #336699; ">http://download.eclipse.org/technology/subversive/0.7/update-site/</a><br />
--Subversive Integration Plug-in's<br />
&nbsp; --Subversive SVN Intergration for the Mylyn Project</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><a href="http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/" style="text-decoration: none; color: #336699; ">http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/</a><br />
--Subersive SVN Connectors<br />
&nbsp; --JavaHL 1.5.0 Connector<br />
&nbsp; --Native JavaHL 1.5 Win32<br />
&nbsp; --Subversive SVN Connectors<br />
&nbsp; --SVNKit 1.1.7 Implementation</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">转自：<a href="http://xiaoluan.spaces.live.com/blog/cns!8F244FD8E9FE4639!307.entry" style="text-decoration: none; color: #336699; ">http://xiaoluan.spaces.live.com/blog/cns!8F244FD8E9FE4639!307.entry</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp; 以前安装Eclipse插件无非两种方式, 直接copy插件到features/plugins目录或者在links目录下创建链接文件. 刚刚发布的Eclipse 3.4又推出另一种新的安装途径, 更加灵活。Eclipse 3.4下有个dropins目录, 只要把插件放到该目录下就可以加载, 有几种格式可以选择。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1. 最简单的，直接将jar包放到dropins目录:</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp;&nbsp; eclipse/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dropins/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com.essiembre.eclipse.i18n.resourcebundle_0.7.7</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
2. 传统格式，统一放到一个eclipse目录下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eclipse/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dropins/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eclipse/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; features/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plugins/</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
3. 按照插件名称区分:<br />
&nbsp;&nbsp;&nbsp; eclipse/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dropins/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourcebundleeditor/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; features/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plugins/&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;&nbsp;&nbsp; m2eclipse/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; features/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plugins/</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">4. 类似links方式添加链接:</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp;&nbsp; eclipse/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dropins/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xfire.link</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">如果只安装一个Eclipse的话建议采用第三种，否则采用第四种。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">如果发现安装了没有效果，可以删除eclipse主目录下的\configuration\org.eclipse.update后，再执行eclipse -clean试试。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">转自：<a href="http://blog.csdn.net/flying__snow/archive/2008/09/06/2890414.aspx" style="text-decoration: none; color: #336699; ">http://blog.csdn.net/flying__snow/archive/2008/09/06/2890414.aspx</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/sabuhaha/archive/2009/01/05/3710085.aspx" style="text-decoration: none; color: #336699; ">http://blog.csdn.net/sabuhaha/archive/2009/01/05/3710085.aspx</a></p>
</span><img src ="http://www.blogjava.net/super2/aggbug/286235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-07-10 13:38 <a href="http://www.blogjava.net/super2/archive/2009/07/10/286235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java图片处理 (文字水印、图片水印、缩放、补白) </title><link>http://www.blogjava.net/super2/archive/2009/07/10/286233.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Fri, 10 Jul 2009 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/07/10/286233.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/286233.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/07/10/286233.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/286233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/286233.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #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;&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.AlphaComposite;<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Color;<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Font;<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Graphics2D;<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Image;<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.geom.AffineTransform;<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.image.AffineTransformOp;<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.image.BufferedImage;<br />
</span><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.File;<br />
</span><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.IOException;<br />
</span><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;javax.imageio.ImageIO;<br />
</span><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&nbsp;Eric&nbsp;Xu<br />
</span><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #008000; ">&nbsp;*<br />
</span><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #008000; ">&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;ImageUtils&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;图片水印<br />
</span><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;pressImg&nbsp;水印图片<br />
</span><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;targetImg&nbsp;目标图片<br />
</span><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;x&nbsp;修正值&nbsp;默认在中间<br />
</span><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;y&nbsp;修正值&nbsp;默认在中间<br />
</span><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;alpha&nbsp;透明度<br />
</span><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;27</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; ">final</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;pressImage(String&nbsp;pressImg,&nbsp;String&nbsp;targetImg,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y,&nbsp;</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;alpha)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;img&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;File(targetImg);<br />
</span><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image&nbsp;src&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ImageIO.read(img);<br />
</span><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;wideth&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;src.getWidth(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;height&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;src.getHeight(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BufferedImage(wideth,&nbsp;height,&nbsp;BufferedImage.TYPE_INT_RGB);<br />
</span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics2D&nbsp;g&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image.createGraphics();<br />
</span><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.drawImage(src,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;wideth,&nbsp;height,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">水印文件</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image&nbsp;src_biao&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ImageIO.read(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;File(pressImg));<br />
</span><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;wideth_biao&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;src_biao.getWidth(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;height_biao&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;src_biao.getHeight(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,&nbsp;alpha));<br />
</span><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.drawImage(src_biao,&nbsp;(wideth&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;wideth_biao)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;(height&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;height_biao)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;wideth_biao,&nbsp;height_biao,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">水印文件结束</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.dispose();<br />
</span><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageIO.write((BufferedImage)&nbsp;image,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;img);<br />
</span><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">&nbsp;48</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">&nbsp;49</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;50</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;51</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;文字水印<br />
</span><span style="color: #008080; ">&nbsp;52</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;pressText&nbsp;水印文字<br />
</span><span style="color: #008080; ">&nbsp;53</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;targetImg&nbsp;目标图片<br />
</span><span style="color: #008080; ">&nbsp;54</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;fontName&nbsp;字体名称<br />
</span><span style="color: #008080; ">&nbsp;55</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;fontStyle&nbsp;字体样式<br />
</span><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;color&nbsp;字体颜色<br />
</span><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;fontSize&nbsp;字体大小<br />
</span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;x&nbsp;修正值<br />
</span><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;y&nbsp;修正值<br />
</span><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;alpha&nbsp;透明度<br />
</span><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;62</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; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;pressText(String&nbsp;pressText,&nbsp;String&nbsp;targetImg,&nbsp;String&nbsp;fontName,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fontStyle,&nbsp;Color&nbsp;color,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fontSize,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y,&nbsp;</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;alpha)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;63</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;img&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;File(targetImg);<br />
</span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image&nbsp;src&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ImageIO.read(img);<br />
</span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;width&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;src.getWidth(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;67</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;height&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;src.getHeight(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BufferedImage(width,&nbsp;height,&nbsp;BufferedImage.TYPE_INT_RGB);<br />
</span><span style="color: #008080; ">&nbsp;69</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics2D&nbsp;g&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image.createGraphics();<br />
</span><span style="color: #008080; ">&nbsp;70</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.drawImage(src,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;width,&nbsp;height,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;71</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setColor(color);<br />
</span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setFont(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Font(fontName,&nbsp;fontStyle,&nbsp;fontSize));<br />
</span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,&nbsp;alpha));<br />
</span><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.drawString(pressText,&nbsp;(width&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;(getLength(pressText)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;fontSize))&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;x,&nbsp;(height&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;fontSize)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;y);<br />
</span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.dispose();<br />
</span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageIO.write((BufferedImage)&nbsp;image,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;img);<br />
</span><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080; ">&nbsp;79</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;82</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;83</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;缩放<br />
</span><span style="color: #008080; ">&nbsp;84</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;filePath&nbsp;图片路径<br />
</span><span style="color: #008080; ">&nbsp;85</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;height&nbsp;高度<br />
</span><span style="color: #008080; ">&nbsp;86</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;width&nbsp;宽度<br />
</span><span style="color: #008080; ">&nbsp;87</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;bb&nbsp;比例不对时是否需要补白<br />
</span><span style="color: #008080; ">&nbsp;88</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;89</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; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;resize(String&nbsp;filePath,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;height,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;width,&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;bb)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;91</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;ratio&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">缩放比例&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;92</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;f&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;File(filePath);<br />
</span><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage&nbsp;bi&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ImageIO.read(f);<br />
</span><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image&nbsp;itemp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;bi.getScaledInstance(width,&nbsp;height,&nbsp;bi.SCALE_SMOOTH);<br />
</span><span style="color: #008080; ">&nbsp;95</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">计算比例</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;((bi.getHeight()&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;height)&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;(bi.getWidth()&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;width))&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;97</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;(bi.getHeight()&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;bi.getWidth())&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;98</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;ratio&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Integer(height)).doubleValue()&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;bi.getHeight();<br />
</span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&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 />
</span><span style="color: #008080; ">100</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;ratio&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Integer(width)).doubleValue()&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;bi.getWidth();<br />
</span><span style="color: #008080; ">101</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; ">102</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AffineTransformOp&nbsp;op&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;AffineTransformOp(AffineTransform.getScaleInstance(ratio,&nbsp;ratio),&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">103</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;op.filter(bi,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">104</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">105</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(bb)&nbsp;{<br />
</span><span style="color: #008080; ">106</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BufferedImage(width,&nbsp;height,&nbsp;BufferedImage.TYPE_INT_RGB);<br />
</span><span style="color: #008080; ">107</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics2D&nbsp;g&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image.createGraphics();<br />
</span><span style="color: #008080; ">108</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setColor(Color.white);<br />
</span><span style="color: #008080; ">109</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.fillRect(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;width,&nbsp;height);<br />
</span><span style="color: #008080; ">110</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;(width&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;itemp.getWidth(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">))<br />
</span><span style="color: #008080; ">111</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;g.drawImage(itemp,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;(height&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;itemp.getHeight(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">))&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;itemp.getWidth(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">),&nbsp;itemp.getHeight(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">),&nbsp;Color.white,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">112</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; ">else</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">113</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;g.drawImage(itemp,&nbsp;(width&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;itemp.getWidth(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">))&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;itemp.getWidth(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">),&nbsp;itemp.getHeight(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">),&nbsp;Color.white,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.dispose();<br />
</span><span style="color: #008080; ">115</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image;<br />
</span><span style="color: #008080; ">116</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">117</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageIO.write((BufferedImage)&nbsp;itemp,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;f);<br />
</span><span style="color: #008080; ">118</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(IOException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080; ">119</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080; ">120</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">121</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">122</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">123</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; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080; ">124</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pressImage(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">G:\\imgtest\\sy.jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">G:\\imgtest\\test1.jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0.5f</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">125</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pressText(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">我是文字水印</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">G:\\imgtest\\test1.jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">黑体</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">36</span><span style="color: #000000; ">,&nbsp;Color.white,&nbsp;</span><span style="color: #000000; ">80</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0.3f</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">126</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resize(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">G:\\imgtest\\test1.jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">500</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">500</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">127</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">128</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">129</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; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;getLength(String&nbsp;text)&nbsp;{<br />
</span><span style="color: #008080; ">130</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;length&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">131</span>&nbsp;<span style="color: #000000; ">&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;text.length();&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">132</span>&nbsp;<span style="color: #000000; ">&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: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;String(text.charAt(i)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">""</span><span style="color: #000000; ">).getBytes().length&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">133</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">134</span>&nbsp;<span style="color: #000000; ">&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 />
</span><span style="color: #008080; ">135</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">136</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">137</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">138</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;length&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">139</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">140</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">141</span>&nbsp;</div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><span  style="font-size: 14px; font-family: verdana, sans-serif; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">getLength 这个方法用来得到文字的长度 全角一个字 半角算半个字 但是感觉这种方法不太好 不知道有没有更好地方法~</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">博文来源：<a href="http://www.javaeye.com/topic/309457" style="text-decoration: none; color: #006bad; ">http://www.javaeye.com/topic/309457</a></p>
</span></div><img src ="http://www.blogjava.net/super2/aggbug/286233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-07-10 13:31 <a href="http://www.blogjava.net/super2/archive/2009/07/10/286233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java项目的工具</title><link>http://www.blogjava.net/super2/archive/2009/04/25/267496.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Sat, 25 Apr 2009 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/04/25/267496.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/267496.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/04/25/267496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/267496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/267496.html</trackback:ping><description><![CDATA[<strong><span style="color: #ff0000;">本文转自</span><a href="http://www.suneca.com/" target="_blank" rel="external"><span style="color: #ff0000;">http://www.suneca.com</span></a><br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  一直想写一篇这样的总结性文章，但不是没有时间就是没有勇气写下去，因为怕别人丢臭鸡蛋。这两天有时间，终于鼓起勇气，将这篇文章写来下！也希望对一些正在寻找更好发展的朋友能有点帮助，也希望对于一些技术跟管理方面的牛人，能给予一些建议。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作为一名项目经理、系统架构师或技术骨干，其水平如何，关系到公司的项目管理、软件质量管理等方面的问题。项目经理或技术骨干应该要起带头作用，使整个团队的开发及管理能达到一种更高的水平。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那
作为一名项目经理或公司技术骨干应该学会那些工具及知识点呢？涉及到这一块的工具及技术点非常多，如何去选择，是摆在项目经理、系统架构师跟技术骨干面前
的问题。根据公司及团队的情况，选择合适的工具或技术框架，这一点非常重要。在项目的不同阶段，需要有不同的工具来支持。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按照软件系统的生命周期的六个阶段，一般分为需求分析阶段、系统设计阶段、系统开发阶段、软件测试阶段、系统发布阶段、系统维护阶段，这几个阶段都需要有不同工具的支持。<br />
<br />
<span><strong>一、需求分析阶段：</strong></span><br />
<strong>第一、项目管理及需求管理工具</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 项
目管理工具很多公司都在使用，为什么要使用这些工具？假如没有使用这些工具，而是使用Excel或Word进行记录，那当需求变更？需求实现情况的跟踪？
软件是否能按时交付？将是一件非常烦锁且容易出错的事情。一个软件项目、开发团队能否获得成功，管理非常关键。比较有名的商业化工具有：<strong>MicroSoft Project Server</strong>及<strong>Project 2003</strong>、<strong>IBM Rational RequisitePro</strong>、<strong>JIRA</strong>、<strong>PowerDesinger</strong>。比较有名的开源需求管理工具包括：<strong>OSRMT(Open Source Requirements Management Tools)</strong>、<strong>Xplanner</strong>、<strong>Openworkbench</strong>等等。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 很多软件公司都会使用<strong>SharePoint</strong>，在<strong>SharePoint</strong>平台上，只要你想得到，基本上都可以通过配置方式来满足你的业务需求。在<strong>SharePoint</strong>上，可以跟<strong>MicroSoft Project Server</strong>很好的结合，再配置<strong>Project 2003</strong>为客户端，进行公司的项目管理。也许对<strong>Project</strong>操作习惯的问题，在Web界面进行项目管理的时候，总觉得很不方便。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>IBM Rational RequisitePro</strong>（<a href="http://www.ibm.com/" target="_blank" rel="external">http://www.ibm.com</a> ）可以算是最骨灰级的一个软件了，假如你公司整个软件生命周期管理都是采用IBM的解决方案，那使用<strong>RequisitePro</strong>是一个非常好的解决方案。需要这些软件可以到<strong>IBM</strong>官方网站上去下载一个最新版本，或者在电驴上面下载一些&#8220;特别&#8221;版本。设计工具、管理工具的完美结合，这个正是<strong>IBM Rational RequisitePro</strong>的强项。<strong>RequisitePro</strong>跟<strong>Offce</strong>结合得也是非常完美。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>JIRA</strong>（<a href="http://www.atlassian.com/" target="_blank" rel="external">http://www.atlassian.com</a> ）原来只是一个缺陷跟踪系统，你可以在JIRA上面创建新的<strong>ISSUE</strong>，当<strong>ISSUE</strong>分配给某个程序员时，系统会自动发送一封邮件给该程序员，提示有新的BUG。<strong>JIRA</strong>也有提供一个<strong>Eclipse</strong>插件，你可以在Eclipse上面，查到属于自己的ISSUE，并快速解决。现在<strong>JIRA</strong>也可以用来做项目管理，在操作方面非常人性化，个人一直非常喜欢使用JIRA来进行项目管理、缺陷管理，再结合Eclipse，简直就是完美！但作为商业的软件，价格也非常贵，互联网上也有很多Crack，大家有兴趣也可以搜一下。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>OSRMT</strong>（<a href="http://sourceforge.net/projects/osrmt" target="_blank" rel="external">http://sourceforge.net/projects/osrmt</a> ）是一个开源的需求管理工具，分为客户端跟服务器，也提供了一个安装界面供用户安装，做开源的已经算是做得非常完美了。当前最新版本是V1.5，有兴趣的朋友可以下载一个最新版本玩一下，操作还算是挺人性化的。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Xplanner</strong>（<a href="http://www.xplanner.org/" target="_blank" rel="external">http://www.xplanner.org</a> ）是一个开源的，基于XP编程的项目管理软件，它可以帮我们生成一些统计图表。这个软件从06年底发布0.7b7版后，就再也没有更新过了，我对开源工具的看法就是：版本号没有超过1.0版，我都不会应用于生产！对于Xplanner，也是停留在试用的阶段。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Openworkbench</strong>（<a href="http://www.openworkbench.org/" target="_blank" rel="external">http://www.openworkbench.org</a>
） 也是一个开源的项目管理软件，其功能跟Project
2003相似，是一个值得大家去使用的一个工具，但对于中国很多软件公司，都是使用特别版的Project
2003。假如你很尊重版权，又不想使用Project 2003，那Openworkbench是一个非常好的选择。<br />
<br />
<strong>第二、需求分析工具</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 需求分析工具用得比较多可能就是<strong>Rational Rose</strong>、<strong>MicroSoft Visio</strong>或<strong>MindManager</strong>，一般我们使用<strong>Rational Rose</strong>来进行用例分析，画用例图，画状态图；使用MicroSoft Visio来画出应用系统的结构图、流程图等。当然，对于MicroSoft Visio能画出来的东西，其实<strong>Rose</strong>也一样可以实现，只是，大家都是这么干，我们也没有必要专门去做一些特例的东西，特别是对于一些比较特殊的公司及行业。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Ration Rose 2003</strong>是
一个值得怀念的工具，至今还是有很多公司跟个人都是使用，个人觉得这个软件版本算是最经典的一个，但对于现在所见即所得的要求下，使用Rose
2003，可能没有办法满足你，因为它需要经过一些小操作才能满足你的要求。但不可否认，它是一个非常优秀的软件。现在对于一些喜欢使用新工具新技术的程
序员，也许现在他们正在使用RSA。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>MicroSoft Visio</strong>（<a href="http://www.microsoft.com/" target="_blank" rel="external">http://www.microsoft.com</a> ）是每个搞设计的人都会用的一个工具，我们一般使用Visio来画系统结构图、关键流程图、系统部署结构图等。MicroSoft Visio也提供了UML的功能，可以用它来画用例图、类图、状态图，时序图等，但一般这个功能很少使用。至少我基本上不用。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>MindManager</strong>（<a href="http://www.mindjet.com/" target="_blank" rel="external">http://www.mindjet.com</a>
）
是一个非常好用的工具，我们用来描述我们的思维，很多人都不喜欢通过软件来描述，而是通过一张纸，然后在上面进行涂鸦，接着跟客户或团队进行思维沟通。
MindManager很好地解决了这个问题。MindManager跟Office结合得非常完美，可以生成Word、Excel、PDF等文件。这个
工具是我一直在使用的一个软件，非常好用。最新版本为7，大家有兴趣可以下载一个试用一下，也可以在网搜搜索一些&#8220;特别&#8221;版本。<br />
<br />
<span><strong>二、系统设计阶段：</strong></span><br />
<strong>第一、系统设计工具</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 主 流的系统设计工具有大家非常熟悉的Rose2003，不过，现在已经不叫Rose了，现在IBM最新的设计工具是RSA（Ration
Software Architect），Borland Together，SyBase PowerDesinger，MicroSoft
Visio，对于开源的系统设计工具也有很多，比如ArgoUML、DBDesigner等等。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>RSA</strong>（<a href="http://www.ibm.com/" target="_blank" rel="external">http://www.ibm.com</a>
）：IBM
最新的设计工具，它是一个基于Eclipse平台的一个工具，对于你使用RSA，那也许你会将你的整个团队的工具都采用IBM的整套解决方案，使用
RequisitePro来进行需求管理、使用RSA来进行建模、使用ClearCase来进行配置管理、使用ClearQuest来进行缺陷跟踪、使用
RFT(Rational Functional
Tester)来进行测试&#8230;&#8230;RSA有一个最大的优点，那就是跟Word结合得非常好。这一点可以肯定。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Together</strong>（<a href="http://www.borland.com/" target="_blank" rel="external">http://www.borland.com</a>
）：Borland 公司的NB的设计工具，Together
2006版本也是一个基于Eclipse平台的软件，功能也是非常强大，其所见所得的功能，是我非常喜欢它的一个原因。还有一个原因就是基于
Eclipse平台，这个可以跟我的开发工具很完美地整合在一起。不过，整合要注意一个问题，那就是Eclipse兼容性问题，这一点是非常烦人的。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>PowerDesigner</strong>（<a href="http://www.sybase.com/" target="_blank" rel="external">http://www.sybase.com</a>
）：
PowerDesigner是&#8220;一站式&#8221;建模与设计解决方案，物理数据模型的数据库平台无关性，所见即所得，反向工程，报表生成等等功能，使得它成为数据
库设计人员心目中最好的产品，它的易用性深深地吸引了我！特别它的Repository模型库的功能，更让我们实现了模型设计的版本控制。最新的
PowerDesigner，使得我觉得它是一件艺术品。做设计的人员一般会使用PowerDesigner来进行数据库物理模型设计，它是我心目中的首
选工具。之前曾经对比过RSA、Together、ERWin的数据库模型设置工具，最终我还是更加喜欢使用PowerDesigner，也许，我的操作
习惯已经被PowerDesigner腐蚀。<br />
<br />
<strong>第二、开发的技术框架</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 技术框架的选择是非常关键，一个好的技术框架，可以让我们的开发更加快速、团队的分工更加合理、系统能够支持多种数据库平台、我们的维护更加方便。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; Web前端MVC框架是<strong>Struts 2</strong>。Struts 2可以说是Struts穿上了WebWork的外衣，其内核大部分都是采用了WebWork的技术，并且基于AOP的设计思想，让我们在软件设计上的能够更加多地体现&#8220;高内聚，低耦合&#8221;的设计思想。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; J2EE框架是<strong>Spring</strong>，作为一个开源的J2EE框架，虽然它没有太多的新技术点，但它的整合性，拿得我们的开发更加简单，IOC、AOP、事务处理、开源框架的整合支持等等，使得作为一个J2EE框架的首选。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 持久层框架是<strong>Hibernate</strong>，
作为一个开源的项目，我想，没有一个开源项目的社区能够你Hibernate一样，丰富的文档，活跃的社区，基于Hibernate的开发团队的庞大，使
得它作为持久层框架的首先。基于
Hibernate，我们可以开发出数据库平台无关性的产品。但是，Hibernate也有自身的问题，假如使用不当，也许会有所失控，一旦失控，它所带
来的，就是性能问题。对于最新的Hibernate3，存储过程的支持，外部SQL的定制，很好地解决了这个问题。但在关联关系上，使用还是要小心为好。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 页面框架，可以多考虑使用DIV技术、JSTL标签库、Struts 2标签库、DWR、AJAX、XML+XSLT等技术来让我们页面更好维护，使用OSCache缓存技术来提高我们页面的访问速度。<br />
<br />
<strong>第三、开发规范的定制</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 文件命名规范、数据库设计规范、编码规范、团队协作规定等等一些规范性的东西，需要在系统开发前就规定好，并且做相应的培训。QA也要做好监督的作用，定期做评审工作，对已发生的问题及可能出现的问题，及早发现，及早处理。<br />
<br />
<strong>第四、开发工具的选择</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 团 队一定要选择同样的开发工具，开发工具相同，软件版本相同。为什么要这样子做，其实假如你作为一个Team
Leader，你会在管理你的团队的时候发现很多问题，而解决这个问题，那在项目编码前，就把什么东西都规定好，以免其中发生问题，影响整个团队的开发速
度。开发工具的选择也是非常重要的，目前企业用得比较多的开发工具有：Eclipse、Jbuilder、NetBeans、IDEA。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Jbuilder</strong>：
最新的Jbuilder版本是2007，2007版基本上可以算是重新开发的版本，因为它是基于Eclipse之上的。我算是Borland公司最为忠实
的Fans啦，从Jbuilder6，到Jbuilder7，再到Jbuilder8，再到Jbuilder9、Jbuilder
X，Jbuilder 2005，Jbuilder
2006，我经常跟我学生说，对于Jbuilder，相信没有人比我更熟悉他了，做Java开发接近6年时间，超过4年的时间，每天都都在使用的工
具，Jbuilder见证了我的长成。使用过Jbuilder的人很多人知道一点，就是Jbuilder的盗版问题，安装完Jbuilder之后，假如你
一个不小心，没有安装防火墙，那Jbuilder会不时通过8888端口向Borland总部发送一些你的计算机信息，这个是一种非常可怕的&#8220;木马&#8221;，什
么是&#8220;木马&#8221;？这个就是！这种情况自从Jbuilder
X以后就一直有。假如你不怕Borland公司的人跟工商局过来查你公司的软件的话，那选择Jbuilder是一个不错的选择。作为Java
IDE开发平台的老大，Jbuilder在企业应用开发是非常有优势的，特别是开发EJB跟WebService，偶只能用一个句来形容，那就是牛。
Jbuilder
2007，王者归来，相信对于很多Borland的Fans，还是非常喜欢并乐意去尝试的，不过，价格还是会让很多公司都受不了、速度会让很多程序员也受
不了。我的Jbuilder的缘分到2006就基本上已经结束了。现在我的开发环境基本上都是Eclipse。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Eclipse</strong>：IBM捐出来的好东西，发展挺快的，现在已经到了Eclipse3.3，非常好用的一个工具。但Eclipse只是一个基础平台，假如你需要其他的功能，那你需要下载相关的插件进行扩展，下载的插件要注意一下跟Eclipse平台的兼容性问题。<strong>Eclipse+MyEclipse</strong>（<a href="http://www.myeclipseide.com/" target="_blank" rel="external">http://www.myeclipseide.com</a> ）是个是很多WEB开发人员都是在采用的一个整合工具，但MyEclipse要钱，如果公司愿意为此支付29.9美元的话，那它是一个非常好的选择；比MyEclipse更上一个档次的还有<strong>Exadel</strong>（<a href="http://www.exadel.com/web/portal/home" target="_blank" rel="external">http://www.exadel.com/web/portal/home</a> ），不过，价格贵得离谱，因为它本身就是一家咨询服务公司做出来，主要还是靠咨询服务，培训挣钱，并且，运行时的不稳定，也让我放弃了选择这个插件作为我的开发工具，虽然这个工具真的是很强大。<strong>Eclipse+WTP</strong>（<a href="http://www.eclipse.org/" target="_blank" rel="external">http://www.eclipse.org</a> ）也是一个非常好的免费的开发工具，从eclipse官方网站上可以下载WTP跟Eclipse整合在一起的工具，现在教学基本上用这个。<strong>Lomboz</strong>（<a href="http://lomboz.objectweb.org/" target="_blank" rel="external">http://lomboz.objectweb.org/</a>
）
也是一个非常好用的免费J2EE插件，学生用的很多，因为好像有不少书都是用这个进行教学的。通过插件来的扩展本来是一件好事，但当它的版本问题？兼容性
问题？安全性问题？语言问题？出现的时候，你就会骂着，为什么不提供一站式开发平台呢？如果你下载了语言包，你会发现，有些地方是中文的，有些地方是英文
的，极其丑陋！也许，Eclipse作为一个基础平台，它确实是太基础了。但现在，我们也可以下载一些All-In-One版本的Eclipse，但个人
感觉还是不够，很多功能，我们还需要去找插件来进行扩展。也许，Eclipse的决策者认为，作为基础平台，肯定是越简单越好，需要什么就加什么，这样，
资源占用会更少。正如东方标准最咨深的平面老师曾宇飞讲过一句话：你会去麦当劳点酸菜鱼吃吗？<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>NetBeans</strong>：
作为Sun公司出品的开发工具，功能一样也是非常强大，不管你是做应用程序开发还是做应用系统开发，NetBeans都是一个不错的选择。
NetBeans也跟Eclispe一样，也是一个基础平台，但这个基础平台做得比Eclipse强大很多，基本上你下载一个NetBeans就可以开发
应用程序或J2EE应用系统了。并且，NetBeans的中文支持非常好，基本上一个新版本出来，就已经有中文版、英文版跟日语版了。看
来，NetBeans的决策者还是比较看好这些人群的。NetBeans的Mobile插件开发J2ME是最快最好用的，至少我个人这么认为。开发
J2ME应用产品，我首选的就是NetBeans。目前NetBeans已经发展到6.0的版本了，界面非常华丽，有兴趣的朋友可以下载一个玩一下。
NetBeans的下载地址是：<a href="http://www.netbeans.org/" target="_blank" rel="external">http://www.netbeans.org</a> 。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>IDEA</strong>：
对于IDEA的评价，我只能用六个字来形容，那就是：实用的艺术品。它非常好用，界面非常华丽，相当如果你是一个女性的项目经理或技术牛人，你会喜欢上这
件艺术器的。IDEA开发应用程序非常强大，这一点绝对可以肯定。官方提供的插件也非常丰富，当你需要那一方面的功能，基本上都可以找得到，找插件，你只
需要在官方插件库里面去找就可以了，并且自动安装，自动更新。作为2003年拿到JavaWorld大将的一个作品，相信，它可以带来很多IDEA的创
新。它是属于商业化的工具，价格也只有499美元，而个人买也就249美元，如果你愿意牺牲某些功能，那你完全可以下载一个免费的版本。价格方面，个人觉
得完全对得起这件艺术品价值。有兴趣的话可以下载一个试用版玩一下：<a href="http://www.jetbrains.com/idea" target="_blank" rel="external">http://www.jetbrains.com/idea</a> ，小声地说，上一下baidu，插件一下，其实你可以找到很多注册号。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Ant</strong>是apache的一个开源项目，可以从Ant官方网站上下载一个最新的版本：<a href="http://ant.apache.com/" target="_blank" rel="external">http://ant.apache.com</a> 。虽然该项目虽然现在发展变得非常缓慢，但可以非常肯定地讲，它是一个好东西。我们可以使用ant来对我们整个工程进行编译，打包，单元测试，部署等等，基本上你想得到的东西，Ant可以帮你做得到。Maven（<a href="http://maven.apache.com/" target="_blank" rel="external">http://maven.apache.com</a>
）
是一人比Ant还要强大的工具，现在大有Maven将会代替Ant的趋势，Maven也是项目经理要关注的一个技术点。基本上现在主流的开发工具都提供共
了对Ant的支持，有些甚至是依赖，比如：NetBeans，你在NetBeans当中创建一个新的工程，那系统会自动地创建一个ant的运行脚本程序。
对于你进行编译、打包、发布，那完全都是依赖于这个ant脚本。我们可以使用Ant来开发一个DailyBuild（微软叫每日产品生成，XP叫持久集
成）的流程，来提高我们整个团队的软件开发质量。Ant的使用非常简单，多看手册，多花点心思，那你会做得更好。<br />
<br />
<span><strong>三、开发阶段</strong></span><br />
<strong>第一、配置管理工具</strong><br />
<br />
代码管理工具有很多，现在公司用得比较多的代码管理工具有<strong>CVS</strong>、<strong>VSS</strong>、<strong>SVN</strong>。<br />
对
于一个开发团队只有2-5个人，并且这两三个人是同一间办公室里，那使用VSS是一个非常不错的选择，个人觉得他小团队的管理方面非常好用。个人觉得
VSS唯一的缺点就是一个文件当被一个人锁定，那其他人就没有办法进行修改了，当一个文件为多个人所共用且开发团队人数较多时，这种问题将会显示非常严
重。VSS客户端跟服务器你都可以从Visio Studio里面找到。<br />
<br />
Eclipse的VSS客户端插件：<a href="http://vssplugin.sourceforge.net/" target="_blank" rel="external">http://vssplugin.sourceforge.net/</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 对于一个开发团队有超过5个人，那此如选择CVS或SVN将是一个更好的选择，并且，假如你的团队是分散的，可能不在一间办公室或者根本不在同一个城市，那使用CVS或SVN是一个非常更想的选择。CVS的服务器一般是使用CVSNT或CVSServer。<br />
<br />
<strong>CVSServer</strong>：<br />
<strong>Linux for X86</strong>：<a href="http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-linux/RPMS/i386/" target="_blank" rel="external">http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-linux/RPMS/i386/</a><br />
<strong>Window for X86</strong>：<a href="http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-woe/" target="_blank" rel="external">http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-woe/</a><br />
<strong>CVSNT</strong>：<a href="http://www.cvsnt.org/" target="_blank" rel="external">http://www.cvsnt.org/</a><br />
<strong>CVSClient</strong>：<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>WinCVS</strong>：<a href="http://www.wincvs.org/" target="_blank" rel="external">http://www.wincvs.org</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>TortoiseCVS</strong>：<a href="http://www.tortoisecvs.org/" target="_blank" rel="external">http://www.tortoisecvs.org/</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>JBuilder</strong>、<strong>Eclipse</strong>、<strong>NetBeans</strong>、<strong>IDEA</strong>集成的CVS客户端<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 作
为版本管理工具，CVS出现至今，已经有二十个年头，可以说他已经走到了尽头，但可以肯定，它将继续存在着。SVN是作为CVS的代替产品而出现的。现在
很多开源组织，都慢慢地转到SVN上，比如Apache跟SourceForge。SVN有着比CVS更强大的功能，比如，它可记录目录的更改，它的性能
比CVS会快很多等等。目前SVN慢慢地被企业所接受，但个人觉得其Eclipse的客户端的稳定性还有待提高，也许这个跟Eclipse的版本兼容性有
一定关系。但这些不稳定性，让我现在对这个产品的使用还继续停留在试用的阶段。<br />
<br />
<strong>SVNServer</strong>：<a href="http://subversion.tigris.org/" target="_blank" rel="external">http://subversion.tigris.org/</a><br />
<strong>SVNClient</strong>：<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>TortoiseSVN </strong>：<a href="http://tortoisesvn.net/" target="_blank" rel="external">http://tortoisesvn.net/</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Eclipse</strong>插件：<a href="http://subclipse.tigris.org/" target="_blank" rel="external">http://subclipse.tigris.org/</a><br />
目前SVN插件支持包括Eclipse、Jdeveloper、NetBeans等开发工具。<br />
<br />
<strong>第二、知识库管理工具</strong><br />
团
队每一个人在开发的时候都会发现一些问题，最终，有些问题可能没有办法解决，有些问题可以解决。一般情况，大部分问题经过团队成员的共同努力，都是可以解
决的，那解决问题的方法，解决问题的步骤，这些都应该形成知识。作为一个团队的Leader，我们必须重视这些知识，因为，这些知识非常有用，它对于一些
新手或没有遇到此类问题的同事，能够提供相应的帮助。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Confluence</strong>（<a href="http://www.atlassian.com/" target="_blank" rel="external">http://www.atlassian.com</a>/software/confluence
），跟JIRA来自同一家公司的产品，它跟JIRA可以整合得非常好。我们可以通过JIRA的ISSUE，将该ISSUE上升为一个知识。假如你是使用
JIRA来进行项目管理跟缺陷管理，那使用Confluence是一个最佳选择。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>PHPBB</strong>（<a href="http://www.phpbb.com/" target="_blank" rel="external">http://www.phpbb.com</a>
），
论坛其实也是一个非常好的知识库管理工具，当某一个工程师遇到一些疑难杂症的时候，最终，通过自己的努力或团队其他同事的努力，终于解决问题了。那作为
Leader的你，应该鼓励他们将这些知识，写一些文章，然后发布在公司自己的BBS上。供大家参考及讨论。这个是一种很好的方法。记得我以前，我在网上
看到一些有用的信息，我就把它保存在我本机的PHPBB上。只可怜，后来电脑被人偷了。贼郁闷。<br />
<br />
<span><strong>四、软件测试阶段</strong></span> <br />
<strong>第一、缺陷管理工具</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 软
件你不能保证它永远不会错，只是，有些错误你暂时还没有发现而已；有些错误需要在某些特定的环境下它才会发生。就像Windows，时不时会有一些系统更
新文件要求更新。可能这些更新不是错误，只是一些系统安全方面的隐患。这些都可以算是软件系统的缺陷。那这些缺陷我们应该怎么进行管理？怎么进行跟踪呢？
现在缺陷管理用得比较多的有两个：第一个是开源的bugzilla，另一个是商业的JIRA。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Bugzilla</strong>（<a href="http://www.bugzilla.org/" target="_blank" rel="external">http://www.bugzilla.org</a>
），
作为开源界缺陷管理系统的鼻祖，它发展到现在已从98年到现在经有10的时间了。它的开发语言是Perl，这使得它的安装变得很麻烦，Bugzilla可
以安装在Windows、Linux、Unix等操作系统上。现在的Eclipse也提供了对它的支持，我们可以在Eclispe平台上，找到应用系统的
BUG，功能做得非常强大。如果安装能更加轻松一点，或者提供一个All-In-One版本，那会更好！<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>JIRA</strong>，作为商为上化的缺陷管理系统，JIRA的价格对得起它的功能。JIRA不只是一个缺陷管理系统，它更是一个集项目管理、缺陷管理、统计分析为一身的工具。这个工具我一直在使用，只是使用一些&#8220;特别&#8221;版本而已。<br />
<br />
<strong>第二、软件性能监测工具</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Jprofiler</strong>（<a href="http://www.ej-technologies.com/" target="_blank" rel="external">http://www.ej-technologies.com</a> ）是一个非常好的性能监测工具，使用这个工具，你可以快速发现系统那些模块出现性能瓶颈或算法导致的性能问题；它还可以分析内存泄漏的问题。这个工具也提供了相应的Eclipse插件，让你开发更加快速方便。它支持主流的服务器。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Borland Optimizeit Suite</strong>（<a href="http://www.borland.com/" target="_blank" rel="external">http://www.borland.com</a> ）也是一个非常好的性能监测工具，它跟Borland产品整合得非常好。不过，运行这个工具，你最好准备一下，最好有2G内存，否则，本来系统好好的，一运行起来，你机器反而死掉了。<br />
<br />
<strong>第三、软件性能测试工具</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Ant+Windows计划任务</strong>创建公司的DailyBuild自动化测试流程，这个是以前做的一个测试流程。使用这种测试流程，无非一个目的，就是提高公司的软件质量。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>Jmeter</strong>（<a href="http://jakarta.apache.org/jmeter" target="_blank" rel="external">http://jakarta.apache.org/jmeter</a> ），这个工具是apache出品的，作为apache忠实的Fans，我对Jmeter也是很喜欢，使用Jmeter，你可以摸似多用户环境，对应用系统进行测试，测试整个应用系统能够承受的最大并发量。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>LoadRunner</strong>（<a href="http://www.hp.com/" target="_blank" rel="external">http://www.hp.com</a> ），假如你不知道这个软件，那你肯定做不了测试工程师，这个是最专业的一个软件性能测试工具，它可以模似上千万个用户量来进行压力测试，检测系统能够承受的最大并发量。这个软件我只用过几次，编写脚本，进行测试，使用来讲其实算是比较简单。<br />
<br />
<span><strong>五、软件发布</strong></span><br />
&nbsp;&nbsp;&nbsp;&nbsp; 软
件的发布我们会怎么去做呢？我们一般做法就是，将数据库脚本化，包括建表语句、初始化数据等，还有制作WAR文件或EAR文件。然后到客户那边，我们需要
将数据库表及数据进行初始化，接着，将WAR或EAR文件发布到应用服务器上。这个也许是我们到客户现在发布经常在做的一件事情。那能不能做得更加简单
呢？做法一般有两个，第一个就是使用Ant，编写一个初始化数据库跟发布应用程序模块的Ant脚本，然后到生产机上直接运行该脚本即可；第二个就是制作安
装文件，一般用来制作安装文件的有IzPack，这个是用得最多的一个免费工具，你可以使用这个免费工具来制作安装程序。也许客户都习惯了安装程序的安装
方式了，制作一个可执的安装程序，有助于提高软件产品化的档次。<br />
<br />
<span><strong>六、软件维护阶段</strong></span><br />
<strong>第一、客户CASE跟踪管理工具</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 客
户CASE跟踪系统相信很多做CISCO公司金牌代理的人都会用过。我们必须在公司内部建立相应的CASE跟踪制度。当用户使用系统的时候，发现一些问
题，那我们需要对这些问题进行录入并进行跟踪。像客户呼叫服务系统等等一些商业化的软件外面还是很多的，这些系统其实公司自己开发一个也是很快的。但必须
要有。这个也是提高整个公司整体服务形象的一种态度。<img src ="http://www.blogjava.net/super2/aggbug/267496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-04-25 16:28 <a href="http://www.blogjava.net/super2/archive/2009/04/25/267496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>犹太教--伊斯兰教--正统基督教</title><link>http://www.blogjava.net/super2/archive/2009/04/18/266298.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Sat, 18 Apr 2009 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/04/18/266298.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/266298.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/04/18/266298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/266298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/266298.html</trackback:ping><description><![CDATA[<strong>原文来自If programming languages were religions，很有意思，可以从宗教的角度来看看各种常见语言的特点。（这里丝毫没有要找出不同语言优劣的意思，每个人都有信仰自由）</strong><strong><br />
C</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E7%8A%B9%E5%A4%AA%E6%95%99&amp;variant=zh-hans" target="_blank">犹太教</a>——很古老而且戒律很多，但大多数人都熟悉并尊重其戒律。问题是很难皈依它，你要么开始就信仰它，要么会认为它简直太疯狂了。而且，一旦事情出了差错，人们就会怪罪于它。<strong><br />
Java</strong>是<a href="http://zh.wikipedia.org/wiki/%E5%9F%BA%E7%9D%A3%E6%95%99" target="_blank">正统基督教</a>——理论上来说它基于C，但它去掉了很多老的戒律，以至于跟原教旨已经大相径庭。另外，它新加了一套严格的教义，追随者们相信这些比原来的教义更为重要。他们认为这是世界上最好的语言，而且会将所有的异端烧死在刑柱上。
<p><strong>PHP</strong>是Cafeteria基督教——与Java在Web开发领域进行竞争。它引入了C和Java的一些概念，但只限于它所喜欢的。也许它不像其它语言那样条理清楚，但至少给你了更多自由，看起来还算一个整体。而且不会有下地狱（goto hell）这样的说法。</p>
<p><strong>C++</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E4%BC%8A%E6%96%AF%E8%98%AD%E6%95%99&amp;variant=zh-cn" target="_blank">伊斯兰教</a>——来源于C，不仅保持了后者的戒律，还变本加厉加入了一套新的复杂戒律。它是如此地多才多艺，可用于构建任何事物，从弥天大罪到美丽的艺术品，追随者们相信它才是终极语言，并会被持不同意见的人激怒。更可怕的是，如果你冒犯了它或者是它的创始人，你的生命都会受到威胁。</p>
<p><strong>C#</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E6%91%A9%E9%96%80%E6%95%99&amp;variant=zh-hans" target="_blank">摩门教</a>——乍看之下，它跟Java一样，不过仔细一看就会发现它被单一组织所控制（很多Java的追随者将其视为恶魔），而且很多概念都不相同。你在暗忖，它也许不错吧，呃。。。希望你不会被Java的追随者们歧视。</p>
<p><strong>Lisp</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E4%BD%9B%E6%95%99&amp;variant=zh-cn" target="_blank">佛教</a>——没有语法，没有核心教义，也没有让人膜拜的神。就看你的造化了——需要你有足够的悟性。有人说它压根儿就不是一门语言，有的人却认为它是唯一有意义的语言。</p>
<p><strong>Haskell</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E9%81%93%E6%95%99&amp;variant=zh-cn" target="_blank">道教</a>——与其它语言差别太大，以至于很多人怀疑它到底能做什么。其追随者相信它才是通往智慧的正道，只是这些智慧为大多数世俗之人力所不及。</p>
<p><strong>Erlang</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E5%8D%B0%E5%BA%A6%E6%95%99&amp;variant=zh-cn" target="_blank">印度教</a>——又一种奇怪的语言，看起来没什么用处，但不像大多数其它的现代语言，它建立在&#8220;同步之神&#8221;的基础上。</p>
<p><strong>Perl</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E4%BC%8F%E9%83%BD%E6%95%99&amp;variant=zh-cn" target="_blank">巫毒教</a>——一套神秘的、难以理解的咒语，会让你的灵魂永久地堕落。老板在周五晚上九点吩咐你一项紧急任务，这时就得靠它了。（想起兽族部落的巫毒商店，而且它与萨满教有些类似）</p>
<p><strong>Lua</strong>是巫术——一种泛神论的语言，容易与不同文化和地区相融合。它的代码非常自由，其中的一些技术在传统语言的用户看来是不可思议的。它与月亮有紧密的联系。</p>
<p><strong>Ruby</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E6%96%B0%E7%95%B0%E6%95%99%E4%B8%BB%E7%BE%A9&amp;variant=zh-cn" target="_blank">新异教主义</a>——不同语言和理念的混合体，可以被看作是一种语言。其支持者群体成长迅速，尽管很多人面带疑色地看着他们，但基本上他们还是善良的，无意于伤害他人。</p>
<p><strong>Python</strong>是<a href="http://zh.wikipedia.org/wiki/%E4%BA%BA%E6%96%87%E4%B8%BB%E4%B9%89" target="_blank">人文主义</a>——简单、自由，它只需要你具备常识。很多追随者声称，Python帮助他们卸下了其它语言带来的担子，从而再次找到编程的乐趣。有些人还说它就是一种伪代码。</p>
<p><strong>COBOL</strong>是古异教主义——很久以前，它曾经统治着大片地区，现在却差不多死掉了。尽管很多人都在其神的仪式中留下了伤疤，直到今天仍然有人追随着它。</p>
<p><strong>APL</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E5%B1%B1%E9%81%94%E5%9F%BA%E6%95%99&amp;variant=zh-cn" target="_blank">山达基教</a>——尽管有很多人声称要追随它，但你总会怀疑它是一个大大的恶作剧。</p>
<p><strong>LOLCODE</strong>是阿里乌斯教——它很神秘，产生于互联网，尽管有人在努力地开发和散布，但没人会对它当真。</p>
<p><strong>Visual Basic</strong>是<a href="http://zh.wikipedia.org/w/index.php?title=%E6%92%92%E6%97%A6%E6%95%99&amp;variant=zh-cn" target="_blank">撒旦教</a>——可惜你并不是真的需要将灵魂出卖。。。</p><img src ="http://www.blogjava.net/super2/aggbug/266298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-04-18 15:06 <a href="http://www.blogjava.net/super2/archive/2009/04/18/266298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>lucene中我的错误</title><link>http://www.blogjava.net/super2/archive/2009/04/14/265575.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Tue, 14 Apr 2009 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/04/14/265575.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/265575.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/04/14/265575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/265575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/265575.html</trackback:ping><description><![CDATA[为什么修改或添加就会产生一个新的.cfs呢，一个下午的研究，没弄明白，结果查到了一个同样的问题，原来是IndexSearcher没有close，那为什么就会产生新的.cfs呢。不懂~~~~<br /><img src ="http://www.blogjava.net/super2/aggbug/265575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-04-14 17:53 <a href="http://www.blogjava.net/super2/archive/2009/04/14/265575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FreeMarker常用内容</title><link>http://www.blogjava.net/super2/archive/2009/03/13/259572.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Fri, 13 Mar 2009 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/03/13/259572.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/259572.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/03/13/259572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/259572.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/259572.html</trackback:ping><description><![CDATA[如果某个变量test为null，在ftl页面中会报错，需要写${test?default("N/A")}，加入默认就没错了，还有就是if_exists,exists,!(叹号)等等。<br />
在&lt;#if test??&gt;&lt;/#if&gt;可以防止报错，不能写test==null这是不对的，还可以test?exists这样写。<br />
学学模板：common.ftl<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">#macro&nbsp;</span><span style="color: #ff0000;">html&nbsp;title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">${title?html}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">#nested</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">#macro</span><span style="color: #0000ff;">&gt;</span></div>
使用页面:test.ftl<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">#import&nbsp;</span><span style="color: #ff0000;">"common.ftl"&nbsp;as&nbsp;tl</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">@tl</span><span style="color: #ff0000;">.html&nbsp;title</span><span style="color: #0000ff;">="标题"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
这里写body的内容<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">@tl.html</span><span style="color: #0000ff;">&gt;</span></div>
<br /><img src ="http://www.blogjava.net/super2/aggbug/259572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-03-13 16:56 <a href="http://www.blogjava.net/super2/archive/2009/03/13/259572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于freemark</title><link>http://www.blogjava.net/super2/archive/2009/03/04/257819.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 04 Mar 2009 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/03/04/257819.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/257819.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/03/04/257819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/257819.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/257819.html</trackback:ping><description><![CDATA[关于freemark<span class="Apple-style-span" style="color: #000000; font-family: Tahoma; font-size: 12px; line-height: 18px;"><span class="hilite1" style="background-color: #ffff00;">FreeMarker</span>是Quake Wang推荐我使用的。刚学<span class="hilite1" style="background-color: #ffff00;">FreeMarker</span>的时候，发现<span class="hilite1" style="background-color: #ffff00;">freemarker</span>真的很棒！简单易用，功能强大。但是用它做了几个项目以后开始不爽了。&nbsp;<br />
<br />
一宗罪：<span class="hilite1" style="background-color: #ffff00;">freemarker</span>的变量必须有值，没有被赋值的变量就会抛出异常，那个黄黄的<span class="hilite1" style="background-color: #ffff00;">freemarker</span>出错页面，真是让人看了太难过了。&nbsp;<br />
<span class="hilite1" style="background-color: #ffff00;">freemarker</span>的
FAQ上面冠冕堂皇的说，未赋值的变量强制抛错可以杜绝很多潜在的错误，如缺失潜在的变量命名，或者其他变量错误。但是实际的效果是：带来的是非常大的编
程麻烦，程序里面几乎所有可能出现空值的变量统统需要加上${xxx?if_exists}，有些循环条件还需要写if判断，这样不但没有杜绝应该杜绝的
错误，反而极大增加了编程的麻烦。&nbsp;<br />
<br />
二宗罪：<span class="hilite1" style="background-color: #ffff00;">freemarker</span>的map限定key必须是string，其他数据类型竟然无法操作！这一点就不讲了，JavaEye上面已经有人抱怨过了。连Webwork的开发人员Pat Lightboy都在抱怨这一点。&nbsp;<br />
<br />
<br />
三宗罪：<span class="hilite1" style="background-color: #ffff00;">freemarker</span>为了编程方便把不可序列化的东西往session里面放！&nbsp;<br />
<span class="hilite1" style="background-color: #ffff00;">freemarker</span>支持在页面里面直接操作Session，request等，例如${Session[...]}，方便确实很方便，但是一旦需要做群集，就会报错。&nbsp;<br />
今天是b051问起我这个问题，他在做Tomcat群集的时候发现<span class="hilite1" style="background-color: #ffff00;">freemarker</span>报错，HttpSessionHashModel不可序列化。他修改该类源代码，让他实现序列化接口，仍然报错。我一看，HttpSessionHashModel包含的属性：&nbsp;<br />
<div class="dp-highlighter" style="padding: 1px; overflow: auto; font-family: Consolas,'Courier New',Courier,mono; font-size: 12px; background-color: transparent; width: 97%; margin-left: 9px;">
<div class="bar">
<div class="tools" style="margin: 0px; padding: 3px; text-align: left; color: black; font-weight: bold;">Java代码&nbsp;<a href="http://www.javaeye.com/topic/17468#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" title="复制代码" style="color: #006699; text-decoration: underline;"><img src="http://www.javaeye.com/images/icon_copy.gif" alt="复制代码" style="border-width: 0px;" /></a></div>
</div>
<ol start="1" class="dp-j" style="border: 1px solid #d1d7dc; margin: 0px 0px 1px; padding: 2px 0px; font-size: 1em; line-height: 1.4em; list-style-type: decimal; background-color: #ffffff; color: #2b91af;">
    <li style="border-left: 1px solid #d1d7dc; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; font-size: 1em; background-color: #fafafa; line-height: 18px;"><span style="color: black;"><span class="keyword" style="color: #7f0055; font-weight: bold;">private</span><span style="color: black;">&nbsp;HttpSession&nbsp;session;&nbsp;&nbsp;</span></span></li>
    <li style="border-left: 1px solid #d1d7dc; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; font-size: 1em; background-color: #fafafa; line-height: 18px;"><span style="color: black;"><span class="keyword" style="color: #7f0055; font-weight: bold;">private</span><span style="color: black;">&nbsp;</span><span class="keyword" style="color: #7f0055; font-weight: bold;">final</span><span style="color: black;">&nbsp;ObjectWrapper&nbsp;wrapper;&nbsp;&nbsp;</span></span></li>
    <li style="border-left: 1px solid #d1d7dc; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; font-size: 1em; background-color: #fafafa; line-height: 18px;"><span style="color: black;">&nbsp;&nbsp;</span></li>
    <li style="border-left: 1px solid #d1d7dc; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; font-size: 1em; background-color: #fafafa; line-height: 18px;"><span style="color: black;"><span class="comment" style="color: #008200;">//&nbsp;These&nbsp;are&nbsp;required&nbsp;for&nbsp;lazy&nbsp;initializing&nbsp;session</span><span style="color: black;">&nbsp;&nbsp;</span></span></li>
    <li style="border-left: 1px solid #d1d7dc; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; font-size: 1em; background-color: #fafafa; line-height: 18px;"><span style="color: black;"><span class="keyword" style="color: #7f0055; font-weight: bold;">private</span><span style="color: black;">&nbsp;</span><span class="keyword" style="color: #7f0055; font-weight: bold;">final</span><span style="color: black;">&nbsp;FreemarkerServlet&nbsp;servlet;&nbsp;&nbsp;</span></span></li>
    <li style="border-left: 1px solid #d1d7dc; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; font-size: 1em; background-color: #fafafa; line-height: 18px;"><span style="color: black;"><span class="keyword" style="color: #7f0055; font-weight: bold;">private</span><span style="color: black;">&nbsp;</span><span class="keyword" style="color: #7f0055; font-weight: bold;">final</span><span style="color: black;">&nbsp;HttpServletRequest&nbsp;request;&nbsp;&nbsp;</span></span></li>
    <li style="border-left: 1px solid #d1d7dc; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; font-size: 1em; background-color: #fafafa; line-height: 18px;"><span style="color: black;"><span class="keyword" style="color: #7f0055; font-weight: bold;">private</span><span style="color: black;">&nbsp;</span><span class="keyword" style="color: #7f0055; font-weight: bold;">final</span><span style="color: black;">&nbsp;HttpServletResponse&nbsp;response;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
<br />
登时晕倒，这样的东西还往Session里面放？bad smell！&nbsp;<br />
严重警告应用需要往群集上面发布应用的同学们，千万别用<span class="hilite1" style="background-color: #ffff00;">freemarker</span>！&nbsp;<br />
<br />
不过瑕不掩瑜，<span class="hilite1" style="background-color: #ffff00;">freemarker</span>也是有优点的：&nbsp;<br />
<br />
1、易学易用&nbsp;<br />
我是看了一天文档就用得挺熟练了，<span class="hilite1" style="background-color: #ffff00;">freemarker</span>文档写得太好了，例子丰富，照做一遍全都会了。&nbsp;<br />
<br />
2、功能强大&nbsp;<br />
比Velocity强大多了，还支持JSP Tag。不过最有意义的是macro功能，可以自定义常用的macro，实现页面常规操作的可复用性。&nbsp;<br />
<br />
3、报错信息友好&nbsp;<br />
很多应用服务器的JSP报错信息是无法定位到源代码行的。不过<span class="hilite1" style="background-color: #ffff00;">freemarker</span>报错定位很准确，丝毫不差，而且信息丰富，一看就知道怎么回事(虽然那个黄黄的页面看起来让人难受)&nbsp;</span><img src ="http://www.blogjava.net/super2/aggbug/257819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-03-04 16:15 <a href="http://www.blogjava.net/super2/archive/2009/03/04/257819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于方法重载 overloading 和 方法覆盖 overridden</title><link>http://www.blogjava.net/super2/archive/2009/03/04/257817.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 04 Mar 2009 08:10:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/03/04/257817.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/257817.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/03/04/257817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/257817.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/257817.html</trackback:ping><description><![CDATA[<p>方法重载 overloading 的要求：</p>
<p>&nbsp;</p>
<p>一、方法必须同名<br />
<br />
二、参数必须不同。 参数不同包括参数类型不同，参数个数不同，只要有一种不同就可以了<br />
<br />
三、返回值可以相同或不同。在有多个同名方法的情况下，是根据参数不同，选择那个方法调用，而不是返回值</p>
<p>&nbsp;</p>
<p>方法覆盖 overridden 的要求：</p>
<p>&nbsp;</p>
<p>1）发生在父子类中；<br />
<br />
2）同名、同参、同返回值<br />
<br />
3）访问权限跟父类相同或更宽；不能比父类更封闭；<span style="color: #ff0000;">例如父类中有一个 public void show(); 在子类中有一个方法覆盖：private void show(); 就会出错</span><br />
<br />
4）子类方法抛出异常的类型不能比父类方法更宽泛；<span style="color: #ff0000;">例如父类中有一个 public void show() throws IOException; 在子类中有一个方法覆盖：private void show() throws Exception; 就会出错</span></p>
<p>&nbsp;</p>
<p>就方法覆盖的第3）条可以理解为儿子必须比老子更开放</p>
<p>&nbsp;</p>
<p>第4）条可以理解为儿子必须比老子范的错误更小</p>
<p>&nbsp;</p>
<p>这就叫进步啊</p><img src ="http://www.blogjava.net/super2/aggbug/257817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-03-04 16:10 <a href="http://www.blogjava.net/super2/archive/2009/03/04/257817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自动设置JAVA环境变量的脚本转自(JAVA中文世界---紫叶)</title><link>http://www.blogjava.net/super2/archive/2009/03/04/257815.html</link><dc:creator>淘声依旧</dc:creator><author>淘声依旧</author><pubDate>Wed, 04 Mar 2009 08:06:00 GMT</pubDate><guid>http://www.blogjava.net/super2/archive/2009/03/04/257815.html</guid><wfw:comment>http://www.blogjava.net/super2/comments/257815.html</wfw:comment><comments>http://www.blogjava.net/super2/archive/2009/03/04/257815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super2/comments/commentRss/257815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super2/services/trackbacks/257815.html</trackback:ping><description><![CDATA[<p><span style="font-size: large;">看到很多初学者反复问这个问题，写了一个很简单的一个脚本，用于自动设置环境变量。把代码拷贝，另存为javaEnv.bat。安装完Java 2 SDK之后，开一个命令行窗口,输入</span><strong><span style="font-size: large;">javaEnv java2SDKDir</span></strong><span style="font-size: large;">(java2SDKDir是你的java的安装目录，不带路径最后的\。如果安装路径中有空格，请用javaEnv "java2SDKDir"格式)并运行。</span><strong><span style="font-size: large;">(注：一定要在javaEnv后边加上你的sdk的目录，setx的问题可以看</span><a href="http://bbs.chinajavaworld.com/thread.jspa?messageID=711725#711725" target="_blank"><span style="font-size: large;">这里</span></a><span style="font-size: large;">)</span></strong></p>
<pre><span style="font-size: large;">@echo 你提供的jdk安装目录为：%1<br />
<br />
@echo off<br />
<br />
IF EXIST %1\bin\java.exe (<br />
<br />
rem 如输入正确的 Java2SDK 安装目录，开始设置环境变量<br />
<br />
@setx JAVA_HOME %1<br />
<br />
@setx path %JAVA_HOME%\bin;%path%<br />
<br />
@setx classpath %classpath%;.<br />
<br />
@setx classpath %classpath%;%JAVA_HOME%\lib\tools.jar<br />
<br />
@setx classpath %classpath%;%JAVA_HOME%\lib\dt.jar<br />
<br />
@setx classpath %classpath%;%JAVA_HOME%\jre\lib\rt.jar<br />
<br />
@echo on<br />
<br />
@echo Java 2 SDK 环境参数设置完毕，正常退出。<br />
<br />
)  ELSE (<br />
<br />
IF %1==</span><span style="font-size: large;">""</span><span style="font-size: large;"> (<br />
<br />
rem 如没有提供安装目录，提示之后退出<br />
<br />
@echo on<br />
<br />
@echo 没有提供 Java2SDK 的安装目录,不做任何设置，现在退出环境变量设置。<br />
<br />
) ELSE (<br />
<br />
rem 如果提供非空的安装目录但没有bin\java.exe，则指定的目录为错误的目录<br />
<br />
@echo on<br />
<br />
@echo 非法的 Java2SDK 的安装目录,不做任何设置，现在退出环境变量设置。<br />
<br />
)<br />
<br />
)</span></pre>
<p>&nbsp;</p><img src ="http://www.blogjava.net/super2/aggbug/257815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super2/" target="_blank">淘声依旧</a> 2009-03-04 16:06 <a href="http://www.blogjava.net/super2/archive/2009/03/04/257815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>