﻿<?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-For Me Blog</title><link>http://www.blogjava.net/feng0801/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 01 May 2026 11:41:13 GMT</lastBuildDate><pubDate>Fri, 01 May 2026 11:41:13 GMT</pubDate><ttl>60</ttl><item><title>HttpClient 超时异常含义</title><link>http://www.blogjava.net/feng0801/archive/2018/04/20/433176.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Fri, 20 Apr 2018 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2018/04/20/433176.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/433176.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2018/04/20/433176.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/433176.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/433176.html</trackback:ping><description><![CDATA[<div>
<p>关于HTTP请求超时字段定义<br /></p><div>一、ConnectionRequestTimeout 超时</div><div>HttpClient 使用连接池来管理连接，这个时间是从连接池获取连接的超时时间，可以联想从数据库连接池获取数据库连接。</div><div><br />二、ConnectTimeout 超时</div><div>建立连接超时，客户端和服务器间建立连接进行的三次握手完成的时间</div><div><br />三、SocketTimeout 超时</div><div>数据传输过程中数据包之间间隔的最大时间，Http响应报文可能有多个小报文组成，</div><div>如果传输报文的间隔时间超过设置这个时间，会报 java.net.SocketTimeoutException: Read timed out 异常的</div></div><img src ="http://www.blogjava.net/feng0801/aggbug/433176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2018-04-20 14:36 <a href="http://www.blogjava.net/feng0801/archive/2018/04/20/433176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse 常用快捷键汇总</title><link>http://www.blogjava.net/feng0801/archive/2015/11/20/428306.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Fri, 20 Nov 2015 08:36:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2015/11/20/428306.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/428306.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2015/11/20/428306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/428306.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/428306.html</trackback:ping><description><![CDATA[<div><span style="color: #ff6600;">提示：编写Eclipse常用快捷键写成文档，主要是为了自己熟悉一下这些快捷键，方便以后查找和编程中使用！</span></div>
<div>一、编辑类快捷键</div>
<div>1、Ctrl + 1 快速修复，可以解决很多问题，例如import类、try catch包围等。</div>
<div>2、Ctrl + Shift + F 格式化当前代码。</div>
<div>3、Ctrl + Shift + M 添加类的import引入。</div>
<div>4、Ctrl + Shift + M 组织类的import引入，既有Ctrl + Shift + M 的作用，又可以帮你去除没有用的引入。</div>
<div>5、Ctrl + Y 重做与Ctrl + Z 相反的作用。</div>
<div>6、Alt + / 内容辅助</div>
<div>7、Ctrl + D 删除当前行或者选中的多行</div>
<div>8、Alt + Down 当前行和下面一行交换位置</div>
<div>9、Alt + Up 当前行和上面一行交换位置</div>
<div>10、Shift + Enter 在当前行的下一行插入空行</div>
<div>11、Ctrl + / 注释当前行，再次按则取消注释</div>
<div>二、选择快捷键</div>
<div>1、Alt + Shift + Up 选择封装元素</div>
<div>2、Alt + Shift + Left 选择上一个元素</div>
<div>3、Alt + Shift + Right选择下一个元素</div>
<div>4、Shift + Left 从光标处开始往左选择字符串</div>
<div>5、Shift + Right 从光标处开始往右选择字符串</div>
<div>6、Ctrl + Shift + Left 选中光标左边的单词</div>
<div>7、Ctrl + Shift + Right 选中光标右边的单词</div>
<div>&nbsp;</div>
<div>三、移动快捷键</div>
<div>1、Ctrl + Left 光标移到左边单词的开头，</div>
<div>2、Ctrl + Right 光标移到右边单词的末尾。</div>
<div>&nbsp;</div>
<div>四、搜索快捷键</div>
<div>1、Ctrl + K 参照选中的文字快速定位到下一个，如果没有选中文字则搜索上一次使用搜索的文字。</div>
<div>2、Ctrl + Shift + K 参照选中的文字快速定位到上一个。</div>
<div>3、Ctrl + J 正向增量查找，按下这个快捷键后，你所输入的每个字母编辑器都提供快速匹配到某个单词，如果没有在状态栏中显示没有找到，退出这个模式按ESC键。</div>
<div>4、Ctrl + Shift + J 反向增量查找</div>
<div>5、Ctrl + Shift + U 列出所有包含字符串的行</div>
<div>6、Ctrl + G 工作区中的声明</div>
<div>7、Ctrl + Shift + G 工作区中的引用</div>
<div>&nbsp;</div>
<div>五、导航快捷键</div>
<div>1、Ctrl + Shift + T 搜索类</div>
<div>2、Ctrl + Shift + R 搜索工程中的文件</div>
<div>3、Ctrl + E 快速显示当前编辑区的下拉列表</div>
<div>4、F4 打开类型层次结构</div>
<div>5、F3 跳转到声明处</div>
<div>6、Alt + Left 前一个编辑页面</div>
<div>7、Alt + Right 下一个编辑页面</div>
<div>8、Ctrl + PageUp/PageDown在编辑器中，切换已经打开的文件</div>
<div>&nbsp;</div>
<div>六、调试快捷键</div>
<div>1、F5 单步跳入</div>
<div>2、F6 单步跳过</div>
<div>3、F7 单步还回</div>
<div>4、F8 继续</div>
<div>5、Ctrl + Shift + D 显示变量的值</div>
<div>6、Ctrl + shift + B 在当前行设置或者去掉断点</div>
<div>7、Ctrl + R 运行至行，比较好用可以省好多的断点</div>
<div>&nbsp;</div>
<div>七、重构快捷键</div>
<div>1、Alt + Shift + R 重命名类名、方法名、属性（变量）名。</div>
<div>2、Alt + Shift + M 把一段函数内的代码抽取成方法，这是重构里面最常用的方法之一，特别是对于一大坨代码很有用。</div>
<div>3、Alt + Shift + C 修改函数结构，比较实用有N个函数调用了这个方法修改一次就行了。</div>
<div>4、Alt + Shift + L 抽取本地变量，可以直接把一些魔法数字和字符串抽取成一个变量，尤其是多出调用的时候。</div>
<div>5、Alt + Shift + F 把Class中的局部变量变为全局变量</div>
<div>6、Alt + Shift + I 合并变量，将创建简化</div>
<div>7、Alt + Shift + Z 撤销重构</div>
<div>&nbsp;</div>
<div>八、其他快捷键</div>
<div>1、Alt + Enter 显示当前选择资源的属性，在windows下查看文件的属性就是这个快捷键，通常可以用来查看文件在windows中的实际路径。</div>
<div>2、Ctrl + Up文本编辑器向上滚行</div>
<div>3、Ctrl + Down 文本编辑器向下滚行</div>
<div>4、Ctrl + M 最大化当前的Edit或者View，再按则缩小</div>
<div>5、Ctrl + O 快速显示Outline</div>
<div>6、Ctrl + T 快速显示当前类的继承结构，选中接口方法按下这快捷可以跳转到实现类，在项目DAO中经常用。</div>
<div>7、Ctrl + W 关闭当前Editer</div>
<div>8、Ctrl + L 文本编辑器转至行</div>
<div>9、F2 显示工具提示描述，选择类或者变量按下该键会有提示出来</div><img src ="http://www.blogjava.net/feng0801/aggbug/428306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2015-11-20 16:36 <a href="http://www.blogjava.net/feng0801/archive/2015/11/20/428306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么要两次调用encodeURI来解决乱码问题</title><link>http://www.blogjava.net/feng0801/archive/2015/08/18/426866.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Tue, 18 Aug 2015 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2015/08/18/426866.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/426866.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2015/08/18/426866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/426866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/426866.html</trackback:ping><description><![CDATA[<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(85,85,85); padding-bottom: 0px; padding-top: 0px; font: 15px/35px 'microsoft yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: 'Courier New'"><span style="font-family: 'Courier New'; background-color: rgb(245,245,245)">今天遇到调用encodeURL调用二次的疑问，虽然之前知道要调用二次，但是具体不是太清楚里面具体的运行过程，这是转载的这个写的比较详细，把整个运行过程详细解读了一下，非常不错所以转载过了供其他人分享。<br />.encodeURL函数主要是来对URI来做转码，它默认是采用的UTF-8的编码.</span><br /><span style="font-family: 'Courier New'; background-color: rgb(245,245,245)">. UTF-8编码的格式:一个汉字来三个字节构成，每一个字节会转换成16进制的编码，同时添加上%号.</span><br /></span></p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(85,85,85); padding-bottom: 0px; padding-top: 0px; font: 15px/35px 'microsoft yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: 'Courier New'">假设页面端输入的中文是一个&#8220;中&#8221;，按照下面步骤进行解码</span></p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(85,85,85); padding-bottom: 0px; padding-top: 0px; font: 15px/35px 'microsoft yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: 'Courier New'; font-weight: bold; color: rgb(128,0,0)">1</span><span style="font-family: 'Courier New'">.第一次encodeURI，<span style="color: rgb(255,0,255); line-height: 1.5">按照utf</span></span><span style="font-family: 'Courier New'; color: rgb(255,0,255)">-8方式获取字节数组变成[-28,-72-83]，对字节码数组进行遍历，把每个字节转化成对应的16进制数，这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD] &nbsp;此时已经没有了多字节字符，全部是单字节字符。</span></p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(85,85,85); padding-bottom: 0px; padding-top: 0px; font: 15px/35px 'microsoft yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: 'Courier New'"><span><strong>2、<span style="font-family: 'Courier New'">第二次encodeURI，进行编码，会把%看成一个转义字符，并不编码%以后字符，会把%编码成%25.把数组最后变成</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">[</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">%25E4,%25B8,%25AD</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">]</span><span style="font-family: 'Courier New'">然后就把处理后的数据</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">[</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">%25E4,%25B8,%25AD</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">]</span><span style="font-family: 'Courier New'">发往服务器端，<br />当应用服务器调用getParameter方法，getParameter方法会去向应用服务器请求参数<br />应用服务器最初获得的就是发送来的</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">[</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">%25E4,%25B8,%25AD</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">]</span><span style="font-family: 'Courier New'">，应用服务器会对这个数据进行URLdecode操作，应用服务器进行解码的这一次，不管是按照UTF-8，还是GBK，还是ISO-8859，,都能得到</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">[</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">%E4,%B8,%AD</span><span style="font-family: 'Courier New'; color: rgb(255,0,0)">]</span><span style="font-family: 'Courier New'">，因为都会把%25解析成%.并把这个值返回给getParameter方法</span></strong></span></span></p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(85,85,85); padding-bottom: 0px; padding-top: 0px; font: 15px/35px 'microsoft yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: 'Courier New'"><span><strong>3\、再用UTF-8解码一次，就得到"中"了。</strong></span></span></p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(85,85,85); padding-bottom: 0px; padding-top: 0px; font: 15px/35px 'microsoft yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-family: 'Courier New'"><span><strong>想想看，如果不编码两次，当服务器自动解码的时候，假如是按照ISO-8859去解码UTF-8编码的东西，就是会出现乱码。</strong></span></span></p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(85,85,85); padding-bottom: 0px; padding-top: 0px; font: 15px/35px 'microsoft yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">JS:</p>
<div class="dp-highlighter bg_sql" style="overflow: hidden; border-top-color: rgb(204,204,204); width: 938px; white-space: normal; word-spacing: 0px; text-transform: none; border-left-color: rgb(204,204,204); color: rgb(85,85,85); border-bottom-color: rgb(204,204,204); text-align: left; padding-top: 1px; font: 12px/35px Consolas, 'Courier New', Courier, mono, serif; margin: 18px 0px; widows: 1; border-right-color: rgb(204,204,204); letter-spacing: normal; background-color: rgb(231,229,220); text-indent: 0px; -webkit-text-stroke-width: 0px">
<div class="bar" style="padding-left: 45px">
<div class="tools" style="color: silver; padding-bottom: 10px; padding-top: 3px; font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; padding-left: 10px; border-left: rgb(108,226,108) 3px solid; padding-right: 8px; background-color: rgb(248,248,248); font-stretch: normal"><strong>[sql]</strong><span class="Apple-converted-space">&nbsp;</span><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" title="view plain" class="ViewSource" style="font-size: 9px; text-decoration: none; border-top: medium none; height: 16px; border-right: medium none; width: 16px;background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); background-repeat: no-repeat; border-bottom: medium none; background-position: 0% 0%; color: rgb(12,137,207); padding-bottom: 1px; padding-top: 1px; padding-left: 1px; margin: 0px 10px 0px 0px; border-left: medium none; display: inline-block; padding-right: 1px; text-indent: -2000px; background-size: initial; background-origin: initial; background-clip: initial" href="http://blog.csdn.net/howlaa/article/details/12834595#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" title="copy" class="CopyToClipboard" style="font-size: 9px; text-decoration: none; border-top: medium none; height: 16px; border-right: medium none; width: 16px;background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); background-repeat: no-repeat; border-bottom: medium none; background-position: 0% 0%; color: rgb(12,137,207); padding-bottom: 1px; padding-top: 1px; padding-left: 1px; margin: 0px 10px 0px 0px; border-left: medium none; display: inline-block; padding-right: 1px; text-indent: -2000px; background-size: initial; background-origin: initial; background-clip: initial" href="http://blog.csdn.net/howlaa/article/details/12834595#">copy</a> 
<div style="height: 18px; width: 18px; position: absolute; left: 417px; z-index: 99; top: 833px"><embed id="ZeroClipboardMovie_1" name="ZeroClipboardMovie_1" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" height="18" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" wmode="transparent" flashvars="id=1&amp;width=18&amp;height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false"></div></div></div>
<ol class="dp-sql" style="list-style-type: decimal; border-top: medium none; border-right: medium none; border-bottom: medium none; color: rgb(92,92,92); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 0px 1px 45px; border-left: medium none; padding-right: 0px; background-color: rgb(255,255,255)"><li class="alt" style="border-top-style: none; list-style-type: decimal-leading-zero; list-style-position: outside; border-bottom-style: none; color: ; padding-bottom: 0px !important; padding-top: 0px !important; border-right-style: none; padding-left: 10px !important; margin: 0px; border-left: rgb(108,226,108) 3px solid; line-height: 18px; padding-right: 3px !important; background-color: rgb(255,255,255)"><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px"><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">document.authorityForm.</span><span class="keyword" style="border-top: medium none; border-right: medium none; border-bottom: medium none; font-weight: bold; color: rgb(0,102,153); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">action</span><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">&nbsp;=&nbsp;basePath3+</span><span class="string" style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: blue; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">"User_viewUser.do?id="</span><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">+id+</span><span class="string" style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: blue; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">"&amp;roleName="</span><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">+encodeURI(encodeURI(roleName))+</span><span class="string" style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: blue; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">"&amp;roleType="</span><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">+roleType;&nbsp;&nbsp;</span></span></li></ol></div>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(85,85,85); padding-bottom: 0px; padding-top: 0px; font: 15px/35px 'microsoft yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><br />JAVA后台：<br />&nbsp;&nbsp;&nbsp;</p>
<div class="dp-highlighter bg_sql" style="overflow: hidden; border-top-color: rgb(204,204,204); width: 938px; white-space: normal; word-spacing: 0px; text-transform: none; border-left-color: rgb(204,204,204); color: rgb(85,85,85); border-bottom-color: rgb(204,204,204); text-align: left; padding-top: 1px; font: 12px/35px Consolas, 'Courier New', Courier, mono, serif; margin: 18px 0px; widows: 1; border-right-color: rgb(204,204,204); letter-spacing: normal; background-color: rgb(231,229,220); text-indent: 0px; -webkit-text-stroke-width: 0px">
<div class="bar" style="padding-left: 45px">
<div class="tools" style="color: silver; padding-bottom: 10px; padding-top: 3px; font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; padding-left: 10px; border-left: rgb(108,226,108) 3px solid; padding-right: 8px; background-color: rgb(248,248,248); font-stretch: normal"><strong>[sql]</strong><span class="Apple-converted-space">&nbsp;</span><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" title="view plain" class="ViewSource" style="font-size: 9px; text-decoration: none; border-top: medium none; height: 16px; border-right: medium none; width: 16px;background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); background-repeat: no-repeat; border-bottom: medium none; background-position: 0% 0%; color: rgb(12,137,207); padding-bottom: 1px; padding-top: 1px; padding-left: 1px; margin: 0px 10px 0px 0px; border-left: medium none; display: inline-block; padding-right: 1px; text-indent: -2000px; background-size: initial; background-origin: initial; background-clip: initial" href="http://blog.csdn.net/howlaa/article/details/12834595#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" title="copy" class="CopyToClipboard" style="font-size: 9px; text-decoration: none; border-top: medium none; height: 16px; border-right: medium none; width: 16px;background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); background-repeat: no-repeat; border-bottom: medium none; background-position: 0% 0%; color: rgb(12,137,207); padding-bottom: 1px; padding-top: 1px; padding-left: 1px; margin: 0px 10px 0px 0px; border-left: medium none; display: inline-block; padding-right: 1px; text-indent: -2000px; background-size: initial; background-origin: initial; background-clip: initial" href="http://blog.csdn.net/howlaa/article/details/12834595#">copy</a> 
<div style="height: 18px; width: 18px; position: absolute; left: 417px; z-index: 99; top: 1043px"><embed id="ZeroClipboardMovie_2" name="ZeroClipboardMovie_2" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" height="18" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" wmode="transparent" flashvars="id=2&amp;width=18&amp;height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false"></div></div></div>
<ol class="dp-sql" style="list-style-type: decimal; border-top: medium none; border-right: medium none; border-bottom: medium none; color: rgb(92,92,92); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 0px 1px 45px; border-left: medium none; padding-right: 0px; background-color: rgb(255,255,255)"><li class="alt" style="border-top-style: none; list-style-type: decimal-leading-zero; list-style-position: outside; border-bottom-style: none; color: ; padding-bottom: 0px !important; padding-top: 0px !important; border-right-style: none; padding-left: 10px !important; margin: 0px; border-left: rgb(108,226,108) 3px solid; line-height: 18px; padding-right: 3px !important; background-color: rgb(255,255,255)"><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px"><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">roleName&nbsp;=&nbsp;java.net.URLDecoder.decode(getRequest().getParameter(</span><span class="string" style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: blue; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">"roleName"</span><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">),</span><span class="string" style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: blue; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">"UTF-8"</span><span style="border-top: medium none; border-right: medium none; border-bottom: medium none; color: black; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px">);&nbsp;&nbsp;</span></span></li></ol></div><img src ="http://www.blogjava.net/feng0801/aggbug/426866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2015-08-18 11:20 <a href="http://www.blogjava.net/feng0801/archive/2015/08/18/426866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java基础之理解Annotation</title><link>http://www.blogjava.net/feng0801/archive/2015/06/11/425636.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Thu, 11 Jun 2015 10:06:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2015/06/11/425636.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/425636.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2015/06/11/425636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/425636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/425636.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body">
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="color: #0000ff"><strong><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">一</span>、概念</strong></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　 Annontation</span>是<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Java5</span>开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制，用来将任何的信息或元数据（<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">metadata</span>）与程序元素（类、方法、成员变量等）进行关联。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">　　更通俗的意思是为程序的元素（类、方法、成员变量）加上更直观更明了的说明，这些说明信息是与程序的业务逻辑无关，并且是供指定的工具或框架使用的。<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"> </span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Annontation</span>像一种修饰符一样，应用于包、类型、构造方法、方法、成员变量、参数及本地变量的声明语句中。<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"> </span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="color: #0000ff"><strong><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">二</span>、原理</strong></span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　Annotation</span>其实是一种接口。通过<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Java</span>的反射机制相关的<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">API</span>来访问<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>信息。相关类（框架或工具中的类）根据这些信息来决定如何使用该程序元素或改变它们的行为。<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"> </span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　annotation</span>是不会影响程序代码的执行，无论<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>怎么变化，代码都始终如一地执行。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　Java</span>语言解释器在工作时会忽略这些<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>，因此在<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">JVM </span>中这些<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>是&#8220;不起作用&#8221;的，只能通过配套的工具才能对这些<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annontaion</span>类型的信息进行访问和处理。<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"> </span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="color: #333399"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　Annotation</span>与<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">interface</span>的异同</span>：</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　　　1</span>）、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Annotation</span>类型使用关键字<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">@interface</span>而不是<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">interface</span>。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">　　这个关键字声明隐含了一个信息：它是继承了<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">java.lang.annotation.Annotation</span>接口，并非声明了一个<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">interface</span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　　　2</span>）、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Annotation</span>类型、方法定义是独特的、受限制的。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　Annotation </span>类型的方法必须声明为无参数、无异常抛出的。这些方法定义了<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>的成员：方法名成为了成员名，而方法返回值成为了成员的类型。而方法返回值类型必须为<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">primitive</span>类型、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Class</span>类型、枚举类型、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>类型或者由前面类型之一作为元素的一维数组。方法的后面可以使用 <span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">default</span>和一个默认数值来声明成员的默认值，<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">null</span>不能作为成员默认值，这与我们在非<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>类型中定义方法有很大不同。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　Annotation</span>类型和它的方法不能使用<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>类型的参数、成员不能是<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">generic</span>。只有返回值类型是<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Class</span>的方法可以在<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>类型中使用<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">generic</span>，因为此方法能够用类转换将各种类型转换为<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Class</span>。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　　　3</span>）、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Annotation</span>类型又与接口有着近似之处。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">　　它们可以定义常量、静态成员类型（比如枚举类型定义）。<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Annotation</span>类型也可以如接口一般被实现或者继承。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><strong><span style="color: #0000ff"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">三</span>、应用场合</span></strong></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　annotation</span>一般作为一种辅助途径，应用在软件框架或工具中，在这些工具类中根据不同的 <span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annontation</span>注解信息采取不同的处理过程或改变相应程序元素（类、方法及成员变量等）的行为。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">　　例如：<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Junit</span>、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Struts</span>、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Spring</span>等流行工具框架中均广泛使用了<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annontion</span>。使代码的灵活性大提高。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><strong><span style="color: #0000ff"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">&nbsp;四</span>、常见标准的<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Annotation</span></span></strong></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"></span>　　从<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">java5</span>版本开始，自带了三种标准<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annontation</span>类型<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">,</span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"></span>　　　　（<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">1</span>）、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Override</span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　java.lang.Override </span>是一个<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">marker annotation</span>类型，它被用作标注方法。它说明了被标注的方法重载了父类的方法，起到了断言的作用。如果我们使用了这种<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>在一个没有覆盖父类方法的方法时，<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">java</span>编译器将以一个编译错误来警示。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">　　这个<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotaton</span>常常在我们试图覆盖父类方法而确又写错了方法名时加一个保障性的校验过程。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"></span>　　　　（<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">2</span>）、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Deprecated</span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　Deprecated</span>也是一种<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">marker annotation</span>。当一个类型或者类型成员使用<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">@Deprecated</span>修饰的话，编译器将不鼓励使用这个被标注的程序元素。所以使用这种修饰具有一定的 &#8220;延续性&#8221;：如果我们在代码中通过继承或者覆盖的方式使用了这个过时的类型或者成员，虽然继承或者覆盖后的类型或者成员并不是被声明为 <span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">@Deprecated</span>，但编译器仍然要报警。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">　　注意：<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">@Deprecated</span>这个<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>类型和<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">javadoc</span>中的 <span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">@deprecated</span>这个<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">tag</span>是有区别的：前者是<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">java</span>编译器识别的，而后者是被<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">javadoc</span>工具所识别用来生成文档（包含程序成员为什么已经过时、它应当如何被禁止或者替代的描述）。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"></span>　　　　（<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">3</span>）、<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">SuppressWarnings</span></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"></span>　　此注解能告诉<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Java</span>编译器关闭对类、方法及成员变量的警告。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"></span>　　有时编译时会提出一些警告，对于这些警告有的隐藏着<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">Bug</span>，有的是无法避免的，对于某些不想看到的警告信息，可以通过这个注解来屏蔽。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　SuppressWarning</span>不是一个<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">marker annotation</span>。它有一个类型为<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">String[]</span>的成员，这个成员的值为被禁止的警告名。对于<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">javac</span>编译器来讲，被<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">-Xlint</span>选项有效的警告名也同样对<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">@SuppressWarings</span>有效，同时编译器忽略掉无法识别的警告名。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">　　annotation</span>语法允许在<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>名后跟括号，括号中是使用逗号分割的<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">name=value</span>对用于为<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>的成员赋值：</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"></span>代码：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><pre><span style="color: #000000">@SuppressWarnings(value</span><span style="color: #000000">=</span><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">fallthrough</span><span style="color: #000000">"</span><span style="color: #000000">})<br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> lintTrap() { </span><span style="color: #008000">/*</span><span style="color: #008000"> sloppy method body omitted </span><span style="color: #008000">*/</span><span style="color: #000000"> }</span></pre></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">在这个例子中<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">SuppressWarnings annotation</span>类型只定义了一个单一的成员，所以只有一个简单的<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">value={...}</span>作为<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">name=value</span>对。又由于成员值是一个数组，故使用大括号来声明数组值。</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">注意：我们可以在下面的情况中缩写<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>：当<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annotation</span>只有单一成员，并成员命名为<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">"value="</span>。这时可以省去<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">"value="</span>。比如将上面的<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">SuppressWarnings annotation</span>进行缩写：</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">代码：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><pre><span style="color: #000000">@SuppressWarnings({</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">fallthrough</span><span style="color: #000000">"</span><span style="color: #000000">})</span></pre></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm">如果<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">SuppressWarnings</span>所声明的被禁止警告个数为一个时，可以省去大括号：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"></p>
<div class="cnblogs_code"><pre><span style="color: #000000">@SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">)</span></pre></div>
<p style="margin-bottom: 0cm"></p>
<p style="margin-bottom: 0cm"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"></p>
<p>&nbsp;</p>
<p style="margin-bottom: 0cm"><strong><span style="color: #0000ff"><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">五</span>、自定义<span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif">annontation</span>示例</span></strong><span style="font-family: DejaVu Serif, serif" face="DejaVu Serif, serif"> </span></p>
<p>&nbsp;</p>
<p>&nbsp; 示例共涉及四个类：</p>
<p>　　清单1:Author.java</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre><span style="color: #0000ff">package</span><span style="color: #000000"> com.magc.annotation;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.Documented;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.ElementType;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.Retention;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.RetentionPolicy;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.Target;<br /><br />    </span><span style="color: #008000">/**</span><span style="color: #008000"><br />     * 定义作者信息，name和group<br />     * </span><span style="color: #808080">@author</span><span style="color: #008000"> magc<br />     *<br />     </span><span style="color: #008000">*/</span><span style="color: #000000"><br />    @Retention(RetentionPolicy.RUNTIME)<br />    @Target(ElementType.METHOD)<br />    @Documented<br /></span><span style="color: #0000ff">public</span><span style="color: #000000"> @</span><span style="color: #0000ff">interface</span><span style="color: #000000"> Author {<br /><br />        String name();<br />        String group();<br />}</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div>
<p>　　清单2:Description.java</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre><span style="color: #008000">/**</span><span style="color: #008000"><br /> * <br /> </span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #0000ff">package</span><span style="color: #000000"> com.magc.annotation;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.Documented;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.ElementType;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.Retention;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.RetentionPolicy;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.annotation.Target;<br /><br /></span><span style="color: #008000">/**</span><span style="color: #008000"><br /> * </span><span style="color: #808080">@author</span><span style="color: #008000"> magc<br /> *<br /> * 定义描述信息 value<br /> </span><span style="color: #008000">*/</span><span style="color: #000000"><br />    @Retention(RetentionPolicy.RUNTIME)<br />    @Target(ElementType.TYPE)<br />    @Documented<br />    <br /></span><span style="color: #0000ff">public</span><span style="color: #000000"> @</span><span style="color: #0000ff">interface</span><span style="color: #000000"> Description {<br />        String value();<br />}</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div>
<p>清单3:Utility.java</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre><span style="color: #0000ff">package</span><span style="color: #000000"> com.magc.annotation;<br /><br />    @Description(value </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">这是一个有用的工具类</span><span style="color: #000000">"</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Utility {<br /><br />        @Author(name </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">haoran_202</span><span style="color: #000000">"</span><span style="color: #000000">,group</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.magc</span><span style="color: #000000">"</span><span style="color: #000000">)<br />        </span><span style="color: #0000ff">public</span><span style="color: #000000"> String work()<br />        {<br />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">work over!</span><span style="color: #000000">"</span><span style="color: #000000">;<br />        }<br />        <br />        <br />    <br />}</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div>
<p>注：这是个普通的Java类，运行了@Description和@Author注解。</p>
<p>清单3:AnalysisAnnotation.java</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre><span style="color: #0000ff">package</span><span style="color: #000000"> com.magc.annotation;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.reflect.Method;<br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> AnalysisAnnotation {<br />    </span><span style="color: #008000">/**</span><span style="color: #008000"><br />     * 在运行时分析处理annotation类型的信息<br />     * <br />     * <br />     </span><span style="color: #008000">*/</span><span style="color: #000000"><br />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {<br />        </span><span style="color: #0000ff">try</span><span style="color: #000000"> {<br />                </span><span style="color: #008000">//</span><span style="color: #008000">通过运行时反射API获得annotation信息</span><span style="color: #008000"><br /></span><span style="color: #000000">                Class rt_class </span><span style="color: #000000">=</span><span style="color: #000000"> Class.forName(</span><span style="color: #000000">"</span><span style="color: #000000">com.magc.annotation.Utility</span><span style="color: #000000">"</span><span style="color: #000000">);<br />                Method[] methods </span><span style="color: #000000">=</span><span style="color: #000000"> rt_class.getMethods();<br />                <br />                </span><span style="color: #0000ff">boolean</span><span style="color: #000000"> flag </span><span style="color: #000000">=</span><span style="color: #000000"> rt_class.isAnnotationPresent(Description.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />                <br />                </span><span style="color: #0000ff">if</span><span style="color: #000000">(flag)<br />                {<br />                    Description description </span><span style="color: #000000">=</span><span style="color: #000000"> (Description)rt_class.getAnnotation(Description.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />                    System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Utility's Description---&gt;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">description.value());<br />                    </span><span style="color: #0000ff">for</span><span style="color: #000000"> (Method method : methods) {<br />                        </span><span style="color: #0000ff">if</span><span style="color: #000000">(method.isAnnotationPresent(Author.</span><span style="color: #0000ff">class</span><span style="color: #000000">))<br />                        {<br />                            Author author </span><span style="color: #000000">=</span><span style="color: #000000"> (Author)method.getAnnotation(Author.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />                            System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Utility's Author---&gt;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">author.name()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000"> from </span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">author.group());<br />                            <br />                        }<br />                    }<br />                }<br />            <br />            <br />            } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (ClassNotFoundException e) {<br />                e.printStackTrace();<br />            }<br />    }<br /><br />}</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div>
<p>注：这是个与自定义@Description和@Author配套的基础框架或工具类，通过此类来获得与普通Java类Utility.java关联的信息,即描述和作者。</p>
<p>运行AnalysisAnnotation,输出结果为：</p>
<p><span style="color: #00ff00">Utility's Description---&gt;这是一个有用的工具类</span><br /><span style="color: #00ff00">Utility's Author---&gt;haoran_202 from com.magc</span><br /><br /></p></div><img src ="http://www.blogjava.net/feng0801/aggbug/425636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2015-06-11 18:06 <a href="http://www.blogjava.net/feng0801/archive/2015/06/11/425636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE级联查询</title><link>http://www.blogjava.net/feng0801/archive/2015/03/12/423398.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Thu, 12 Mar 2015 04:04:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2015/03/12/423398.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/423398.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2015/03/12/423398.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/423398.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/423398.html</trackback:ping><description><![CDATA[<div id="article_content" class="article_content">
<div><font size="4">在ORACLE 数据库中有一种方法可以实现级联查询<br />select *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //要查询的字段<br />from table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //具有子接点ID与父接点ID的表&nbsp; <br />start with selfid=id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //给定一个startid(字段名为子接点ID，及开始的ID号)<br />connect by prior selfid=parentid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //联接条件为子接点等于父接点，不能反<br /><br />这个SQL主要用于菜单的级联查询，给一个父接点可以查出所有的子接点。及子接点的子接点，一查到底，很实用。不过呢这个程序只能在oracle里面用，我目前还不知道在其它数据库里是怎么调用的。等我找到了，再贴出来与大家分享。</font></div>
<div><font size="4"></font></div>
<div><font size="4">这个程序，估计好多人看不明白，其实放了这么久我也一时没看明白，重新测了一下，补充说明一下，不然我下次又看不懂了。</font></div>
<div><font size="4"></font></div>
<div><font size="4">以一个windows系统的菜单为例。我那一个这样的表menu。</font></div>
<div><font size="4">说明：</font></div>
<div><font size="4">mid:菜单的ID号</font></div>
<div><font size="4">mname：菜单名称</font></div>
<div><font size="4">mpid：菜单的</font></div>
<div><font size="4">quickey：快捷键</font></div>
<div><font size="4">validate:权限表（存放userid,或者角色id）</font></div>
<div>
<table border="1" cellspacing="1" summary="" cellpadding="1" width="200">
<tbody>
<tr>
<td>mid</td>
<td>mname</td>
<td>mpid</td>
<td>quickey</td>
<td>validate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td></tr>
<tr>
<td>1</td>
<td>文件</td>
<td>&nbsp;</td>
<td>ctrl+f</td>
<td>1，2，3，4，11，23，45</td></tr>
<tr>
<td>2</td>
<td>编辑</td>
<td>&nbsp;</td>
<td>ctrl+e</td>
<td>&nbsp;</td></tr>
<tr>
<td>3</td>
<td>新建</td>
<td>1</td>
<td>alt+w</td>
<td>&nbsp;</td></tr>
<tr>
<td>4</td>
<td>文件夹</td>
<td>3</td>
<td>&nbsp;</td>
<td>
<p>&nbsp;</p></td></tr></tbody></table></div>
<div>如果我想知道在&#8220;文件&#8221;菜单下有那些子菜单的话。我就可以这样用这个SQL程序：</div>
<div>select * from menu</div>
<div>start with mid=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
<div>connect by prior mid=mpid;</div>
<div>这样就可以把&nbsp;&#8220;文件&#8221;里的子菜单全部列出来了。当然实际应用不会这么简单，如附加其实条件，尤其是权限管理，这时根据你的系统要求，是对个个验证，还是对角色验证，把这些人的ID放在validate这个字段里，组成一个字符串，N个ID用逗号隔开，（注意，在往数据库保存时要注意对字符串处理一下，截取掉最后一个逗号这样可以节省很多麻烦）</div>
<div>select * from menu</div>
<div>where validate in(&#8230;&#8230;)</div>
<div>and mid in(</div>
<div>
<div>&nbsp;&nbsp; select mid from menu&nbsp; //这里不能用*号了。</div>
<div>&nbsp;&nbsp; start with mid=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
<div>&nbsp;&nbsp; connect by prior mid=mpid;</div></div>
<div>)</div>
<div></div>
<div></div>
<div>最后再补充一点关于随机查询的代码</div>
<div>select * from user order by sys_guid()</div></div><img src ="http://www.blogjava.net/feng0801/aggbug/423398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2015-03-12 12:04 <a href="http://www.blogjava.net/feng0801/archive/2015/03/12/423398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何以Java实现网页截图技术</title><link>http://www.blogjava.net/feng0801/archive/2015/01/21/422317.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Wed, 21 Jan 2015 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2015/01/21/422317.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/422317.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2015/01/21/422317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/422317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/422317.html</trackback:ping><description><![CDATA[<p>今天看到某网友关于&#8220;如何以Java实现网页截图技术&#8221;的咨询帖，由于出现该咨询的地点非常不适合较长回复，故以博文形式回答。</p>
<p>&nbsp;</p>
<p>事实上，如果您想以Java实现网页截图，也就是&#8220;输入一段网址，几秒钟过后就能截取一张网页缩略图&#8221;的效果。那么，您至少有3种方式可以选择。</p>
<p>&nbsp;</p>
<p><span style="color: #ff6600">1、最直接的方式&#8212;&#8212;使用Robot</span> </p>
<p>&nbsp;</p>
<p><strong>方法详解：该方法利用Robat提供的强大桌面操作能力，硬性调用浏览器打开指定网页，并将网页信息保存到本地。</strong> </p>
<p>&nbsp;</p>
<p>优势：简单易用，不需要任何第三方插件。</p>
<p>&nbsp;</p>
<p>缺点：不能同时处理大量数据，技术含量过低，属于应急型技巧。</p>
<p>&nbsp;</p>
<p>实现方法：使用如下代码即可</p><br />
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="#">view plain</a><a class="CopyToClipboard" title="copy" href="http://www.blogjava.net/feng0801/admin/EditPosts.aspx?opt=1#">copy</a><a class="PrintSource" title="print" href="#">print</a><a class="About" title="?" href="http://www.blogjava.net/feng0801/admin/EditPosts.aspx?opt=1#">?</a></div></div>
<ol class="dp-j"><li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;MalformedURLException,&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOException,&nbsp;URISyntaxException,&nbsp;AWTException&nbsp;{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//此方法仅适用于JdK1.6及以上版本 </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Desktop.getDesktop().browse(&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">new</span><span>&nbsp;URL(</span><span class="string">"http://google.com/intl/en/"</span><span>).toURI());&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Robot&nbsp;robot&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Robot();&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;robot.delay(</span><span class="number">10000</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;d&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Dimension(Toolkit.getDefaultToolkit().getScreenSize());&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;width&nbsp;=&nbsp;(</span><span class="keyword">int</span><span>)&nbsp;d.getWidth();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;height&nbsp;=&nbsp;(</span><span class="keyword">int</span><span>)&nbsp;d.getHeight();&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//最大化浏览器 </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;robot.keyRelease(KeyEvent.VK_F11);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;robot.delay(</span><span class="number">2000</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Image&nbsp;image&nbsp;=&nbsp;robot.createScreenCapture(</span><span class="keyword">new</span><span>&nbsp;Rectangle(</span><span class="number">0</span><span>,&nbsp;</span><span class="number">0</span><span>,&nbsp;width,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height));&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage&nbsp;bi&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BufferedImage(width,&nbsp;height,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage.TYPE_INT_RGB);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Graphics&nbsp;g&nbsp;=&nbsp;bi.createGraphics();&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;g.drawImage(image,&nbsp;</span><span class="number">0</span><span>,&nbsp;</span><span class="number">0</span><span>,&nbsp;width,&nbsp;height,&nbsp;</span><span class="keyword">null</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//保存图片 </span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;ImageIO.write(bi,&nbsp;</span><span class="string">"jpg"</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;File(</span><span class="string">"google.jpg"</span><span>));&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li></ol></div><textarea style="display: none" class="java" rows="15" cols="50" name="code">	public static void main(String[] args) throws MalformedURLException,
			IOException, URISyntaxException, AWTException {
		//此方法仅适用于JdK1.6及以上版本
		Desktop.getDesktop().browse(
				new URL("http://google.com/intl/en/").toURI());
		Robot robot = new Robot();
		robot.delay(10000);
		Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());
		int width = (int) d.getWidth();
		int height = (int) d.getHeight();
		//最大化浏览器
		robot.keyRelease(KeyEvent.VK_F11);
		robot.delay(2000);
		Image image = robot.createScreenCapture(new Rectangle(0, 0, width,
				height));
		BufferedImage bi = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		Graphics g = bi.createGraphics();
		g.drawImage(image, 0, 0, width, height, null);
		//保存图片
		ImageIO.write(bi, "jpg", new File("google.jpg"));
	}
</textarea> 
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #ff6600">2、最常规的方式&#8212;&#8212;利用JNI，调用第三方C/C++组件</span> <br /></p>
<p><strong>方法详解：目前来讲，Java领域对于网页截图组件的开发明显不足（商机？），当您需要完成此种操作时，算得上碰到了Java的软肋。但是，众所周知Java也拥有强大的JNI能力，可以轻易将C/C++开发的同类组件引为己用。</strong> </p>
<p>优势：实现简单，只需要封装对应的DLL文件，就可以让Java实现同类功能。</p>
<p>&nbsp;</p>
<p>劣势：同其他JNI实现一样，在跨平台时存在隐患，而且您的程序将不再属于纯Java应用。</p>
<p>&nbsp;</p>
<p>实现方法：可参见此用例，具体封装何种C/C++组件请自行选择。</p>
<p>&nbsp;</p>
<p>PS：示例来源于ACA HTML to Image Converter项目（<a href="http://www.acasystems.com/en/web-thumb-activex/faq-convert-html-to-image-in-java.htm">http://www.acasystems.com/en/web-thumb-activex/faq-convert-html-to-image-in-java.htm</a> ），这是一个收费的HTML转Image第三方组件，但封装方式在Java中大同小异。</p>
<p>&nbsp;</p>
<p>引用JNI封装：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">?</font></u></a></div></div>
<ol class="dp-j"><li class="alt"><span class="keyword">import</span><span>&nbsp;sun.awt.*;&nbsp;&nbsp;</span></li><li><span></span><span class="keyword">import</span><span>&nbsp;java.awt.*;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.swing.*;&nbsp;&nbsp;</span></span></li><li><span></span><span class="keyword">import</span><span>&nbsp;java.awt.event.*;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.awt.*;&nbsp;&nbsp;</span></span></li><li><span></span><span class="keyword">import</span><span>&nbsp;java.awt.peer.*;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Snap&nbsp;&nbsp;</span></span></li><li><span>{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">static</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;System.loadLibrary(</span><span class="string">"Snap"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(&nbsp;String[]&nbsp;argv&nbsp;)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Snap&nbsp;t_xSnap&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Snap();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;t_xSnap.Start(</span><span class="string">"http://www.google.com"</span><span>,&nbsp;</span><span class="string">"snapshot-google.png"</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">native</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;Start(String&nbsp;pi_strURL,&nbsp;String&nbsp;pi_strImageName);&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li></ol></div>
<p><textarea style="display: none" class="java" rows="15" cols="50" name="code">import sun.awt.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.peer.*;
public class Snap
{
  static
  {
    System.loadLibrary("Snap");
  }
  public static void main( String[] argv )
  {
    Snap t_xSnap = new Snap();
    t_xSnap.Start("http://www.google.com", "snapshot-google.png");
  }
  public native void Start(String pi_strURL, String pi_strImageName);
}
</textarea> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>CPP部分的实现：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">?</font></u></a></div></div>
<ol class="dp-j"><li class="alt"><span>#include&nbsp;&lt;windows.h&gt;&nbsp;&nbsp;</span></li><li><span>#include&nbsp;&lt;atlbase.h&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>#include&nbsp;</span><span class="string">"snap.h"</span><span>&nbsp;&nbsp;</span></span></li><li><span>#pragma&nbsp;comment(lib,</span><span class="string">"atl.lib"</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>#</span><span class="keyword">import</span><span>&nbsp;</span><span class="string">"./../../acawebthumb.dll"</span><span>&nbsp;no_namespace&nbsp;&nbsp;</span></span></li><li><span>JNIEXPORT&nbsp;</span><span class="keyword">void</span><span>&nbsp;JNICALL&nbsp;Java_Snap_Start(JNIEnv&nbsp;*pEnv,&nbsp;jobject,&nbsp;jstring&nbsp;pi_strUrl,&nbsp;jstring&nbsp;pi_strFileName)&nbsp;&nbsp;</span></span></li><li class="alt"><span>{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;CoInitialize(</span><span class="number">0</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;_bstr_t&nbsp;t_strUrl&nbsp;=&nbsp;pEnv-&gt;GetStringUTFChars(pi_strUrl,&nbsp;</span><span class="number">0</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;_bstr_t&nbsp;t_strFileName&nbsp;=&nbsp;pEnv-&gt;GetStringUTFChars(pi_strFileName,&nbsp;</span><span class="number">0</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;IThumbMakerPtr&nbsp;HTML_Converter&nbsp;=&nbsp;NULL;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;HRESULT&nbsp;hr&nbsp;=&nbsp;HTML_Converter.CreateInstance(L</span><span class="string">"ACAWebThumb.ThumbMaker"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(SUCCEEDED(hr))&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;HTML_Converter-&gt;SetURL(t_strUrl);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(&nbsp;</span><span class="number">0</span><span>&nbsp;==&nbsp;HTML_Converter-&gt;StartSnap()&nbsp;)&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTML_Converter-&gt;SaveImage(t_strFileName);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(HTML_Converter)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;HTML_Converter.Release();&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;CoUninitialize();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>}&nbsp;&nbsp;</span></li></ol></div>
<p><textarea style="display: none" class="java" rows="15" cols="50" name="code">#include &lt;windows.h&gt;
#include &lt;atlbase.h&gt;
#include "snap.h"
#pragma comment(lib,"atl.lib")
#import "./../../acawebthumb.dll" no_namespace
JNIEXPORT void JNICALL Java_Snap_Start(JNIEnv *pEnv, jobject, jstring pi_strUrl, jstring pi_strFileName)
{
  CoInitialize(0);
  _bstr_t t_strUrl = pEnv-&gt;GetStringUTFChars(pi_strUrl, 0);
  _bstr_t t_strFileName = pEnv-&gt;GetStringUTFChars(pi_strFileName, 0);	
  IThumbMakerPtr HTML_Converter = NULL;
  HRESULT hr = HTML_Converter.CreateInstance(L"ACAWebThumb.ThumbMaker");	
  if (SUCCEEDED(hr))
  { 
    HTML_Converter-&gt;SetURL(t_strUrl);
    if ( 0 == HTML_Converter-&gt;StartSnap() )
      HTML_Converter-&gt;SaveImage(t_strFileName);
  }
  if (HTML_Converter)
    HTML_Converter.Release();
  CoUninitialize();    	  	
}
</textarea> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>以该组件图像化yahoo界面的效果图：</p>
<p>&nbsp;</p>
<p><img alt="00" src="http://image.acasystems.com/html-to-image-converter/ex-www.yahoo.com-200.jpg" width="200" height="216" /> </p>
<p><span style="color: #ff6600"><br /></span></p>
<p><span style="color: #ff6600">3、最扎实的方法&#8212;&#8212;自行解析HTML标记，并将其图像化</span> </p>
<p>&nbsp;</p>
<p><strong>方法详解：众所周知，HTML之所以在浏览器中以具体的网页格式出现，并非服务器端传了一整个应用到客户端，而是源自于浏览器对于客户端自行解析的结果。因此，只要我们将对应的解析一一实现，那么将网页图形化，就将不是什么难事。</strong> </p>
<p><strong><br /></strong></p>
<p>优势：纯Java实现，一劳永逸，一旦开发完成则永远通用，而且有一定的商用价值。</p>
<p>&nbsp;</p>
<p>劣势：开发费时，且需要针对不同语法做精确分析，才能保证输出的基本正确。尤其在涉及到JavaScript解析时，难度将尤其增大。</p>
<p>&nbsp;</p>
<p>实现方法：目前尚无具体案例可供参考。但是，由于Java有jdic之类的浏览器项目存在（<a href="https://jdic.dev.java.net/">https://jdic.dev.java.net/</a> ），而Java图形界面又属绘制生成。从理论上说，我们可以将所有具备Graphics的组件图形化保存。</p>
<p>&nbsp;</p>
<p>而如果自行解析，那么您需要建立HTML解析器（或使用第三方的，万幸Java在这方面的组件很多），了解Java2D机制，了解何时该使用drawString绘制文字，何时又该使用drawImage插入图片等等。</p>
<p>&nbsp;</p>
<p><span style="color: #000000"><br /></span></p>
<p><strong><span style="color: #000000">补充：</span> </strong></p>
<p>&nbsp;</p>
<p>这是一个利用内置浏览器截图的示例，使用了DJNativeSwing组件。</p>
<p>&nbsp;</p>
<p>示例工程下载地址（Eclipse工程，含lib）：<a href="http://greenvm.googlecode.com/files/Screenshot.7z">http://greenvm.googlecode.com/files/Screenshot.7z</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools"><strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">view plain</font></u></a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">copy</font></u></a><a class="PrintSource" title="print" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">print</font></u></a><a class="About" title="?" href="http://blog.csdn.net/cping1982/article/details/5353049#"><u><font color="#0000ff">?</font></u></a></div></div>
<ol class="dp-j"><li class="alt"><span class="keyword">import</span><span>&nbsp;java.awt.BorderLayout;&nbsp;&nbsp;</span></li><li><span></span><span class="keyword">import</span><span>&nbsp;java.awt.Dimension;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.awt.FlowLayout;&nbsp;&nbsp;</span></span></li><li><span></span><span class="keyword">import</span><span>&nbsp;java.awt.image.BufferedImage;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.io.File;&nbsp;&nbsp;</span></span></li><li><span></span><span class="keyword">import</span><span>&nbsp;java.io.IOException;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.imageio.ImageIO;&nbsp;&nbsp;</span></span></li><li><span></span><span class="keyword">import</span><span>&nbsp;javax.swing.JFrame;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.swing.JPanel;&nbsp;&nbsp;</span></span></li><li><span></span><span class="keyword">import</span><span>&nbsp;javax.swing.SwingUtilities;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;chrriis.dj.nativeswing.swtimpl.NativeComponent;&nbsp;&nbsp;</span></span></li><li><span></span><span class="keyword">import</span><span>&nbsp;chrriis.dj.nativeswing.swtimpl.NativeInterface;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;&nbsp;&nbsp;</span></span></li><li><span></span><span class="keyword">import</span><span>&nbsp;chrriis.dj.nativeswing.swtimpl.components.WebBrowserAdapter;&nbsp;&nbsp;</span></span></li><li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;chrriis.dj.nativeswing.swtimpl.components.WebBrowserEvent;&nbsp;&nbsp;</span></span></li><li><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Main&nbsp;</span><span class="keyword">extends</span><span>&nbsp;JPanel&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/**</span>&nbsp;</span></li><li><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span>&nbsp;</li><li class="alt"><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">long</span><span>&nbsp;serialVersionUID&nbsp;=&nbsp;1L;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;行分隔符 </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;LS&nbsp;=&nbsp;System.getProperty(</span><span class="string">"line.separator"</span><span>,&nbsp;</span><span class="string">"/n"</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;文件分割符 </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;FS&nbsp;=&nbsp;System.getProperty(</span><span class="string">"file.separator"</span><span>,&nbsp;</span><span class="string">"//"</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//以javascript脚本获得网页全屏后大小 </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;StringBuffer&nbsp;jsDimension;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">static</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;StringBuffer();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"var&nbsp;width&nbsp;=&nbsp;0;"</span><span>).append(LS);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"var&nbsp;height&nbsp;=&nbsp;0;"</span><span>).append(LS);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"if(document.documentElement)&nbsp;{"</span><span>).append(LS);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">"&nbsp;&nbsp;width&nbsp;=&nbsp;Math.max(width,&nbsp;document.documentElement.scrollWidth);"</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(LS);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">"&nbsp;&nbsp;height&nbsp;=&nbsp;Math.max(height,&nbsp;document.documentElement.scrollHeight);"</span><span>)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(LS);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"}"</span><span>).append(LS);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"if(self.innerWidth)&nbsp;{"</span><span>).append(LS);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"&nbsp;&nbsp;width&nbsp;=&nbsp;Math.max(width,&nbsp;self.innerWidth);"</span><span>)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(LS);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"&nbsp;&nbsp;height&nbsp;=&nbsp;Math.max(height,&nbsp;self.innerHeight);"</span><span>)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(LS);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"}"</span><span>).append(LS);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"if(document.body.scrollWidth)&nbsp;{"</span><span>).append(LS);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">"&nbsp;&nbsp;width&nbsp;=&nbsp;Math.max(width,&nbsp;document.body.scrollWidth);"</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(LS);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">"&nbsp;&nbsp;height&nbsp;=&nbsp;Math.max(height,&nbsp;document.body.scrollHeight);"</span><span>)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(LS);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"}"</span><span>).append(LS);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsDimension.append(</span><span class="string">"return&nbsp;width&nbsp;+&nbsp;':'&nbsp;+&nbsp;height;"</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span><span class="comment">//DJNativeSwing组件请于http://djproject.sourceforge.net/main/index.html下载 </span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Main(</span><span class="keyword">final</span><span>&nbsp;String&nbsp;url,&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;maxWidth,&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;maxHeight)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">super</span><span>(</span><span class="keyword">new</span><span>&nbsp;BorderLayout());&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JPanel&nbsp;webBrowserPanel&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;JPanel(</span><span class="keyword">new</span><span>&nbsp;BorderLayout());&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;fileName&nbsp;=&nbsp;System.currentTimeMillis()&nbsp;+&nbsp;</span><span class="string">".jpg"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;JWebBrowser&nbsp;webBrowser&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;JWebBrowser(</span><span class="keyword">null</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webBrowser.setBarsVisible(</span><span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webBrowser.navigate(url);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webBrowserPanel.add(webBrowser,&nbsp;BorderLayout.CENTER);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(webBrowserPanel,&nbsp;BorderLayout.CENTER);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JPanel&nbsp;panel&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;JPanel(</span><span class="keyword">new</span><span>&nbsp;FlowLayout(FlowLayout.CENTER,&nbsp;</span><span class="number">4</span><span>,&nbsp;</span><span class="number">4</span><span>));&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webBrowser.addWebBrowserListener(</span><span class="keyword">new</span><span>&nbsp;WebBrowserAdapter()&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;监听加载进度 </span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;loadingProgressChanged(WebBrowserEvent&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;当加载完毕时 </span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(e.getWebBrowser().getLoadingProgress()&nbsp;==&nbsp;</span><span class="number">100</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;(String)&nbsp;webBrowser&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.executeJavascriptWithResult(jsDimension.toString());&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;index&nbsp;=&nbsp;result&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;?&nbsp;-</span><span class="number">1</span><span>&nbsp;:&nbsp;result.indexOf(</span><span class="string">":"</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NativeComponent&nbsp;nativeComponent&nbsp;=&nbsp;webBrowser&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getNativeComponent();&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;originalSize&nbsp;=&nbsp;nativeComponent.getSize();&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;imageSize&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Dimension(Integer.parseInt(result&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.substring(</span><span class="number">0</span><span>,&nbsp;index)),&nbsp;Integer.parseInt(result&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.substring(index&nbsp;+&nbsp;</span><span class="number">1</span><span>)));&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageSize.width&nbsp;=&nbsp;Math.max(originalSize.width,&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageSize.width&nbsp;+&nbsp;</span><span class="number">50</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageSize.height&nbsp;=&nbsp;Math.max(originalSize.height,&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageSize.height&nbsp;+&nbsp;</span><span class="number">50</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nativeComponent.setSize(imageSize);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage&nbsp;image&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BufferedImage(imageSize.width,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageSize.height,&nbsp;BufferedImage.TYPE_INT_RGB);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nativeComponent.paintComponent(image);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nativeComponent.setSize(originalSize);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;当网页超出目标大小时 </span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(imageSize.width&nbsp;&gt;&nbsp;maxWidth&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;imageSize.height&nbsp;&gt;&nbsp;maxHeight)&nbsp;{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//截图部分图形 </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image&nbsp;=&nbsp;image.getSubimage(</span><span class="number">0</span><span>,&nbsp;</span><span class="number">0</span><span>,&nbsp;maxWidth,&nbsp;maxHeight);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/*此部分为使用缩略图</span>&nbsp;</span></li><li><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;width&nbsp;=&nbsp;image.getWidth(),&nbsp;height&nbsp;=&nbsp;image</span>&nbsp;</li><li class="alt"><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getHeight();</span>&nbsp;</li><li><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AffineTransform&nbsp;tx&nbsp;=&nbsp;new&nbsp;AffineTransform();</span>&nbsp;</li><li class="alt"><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.scale((double)&nbsp;maxWidth&nbsp;/&nbsp;width,&nbsp;(double)&nbsp;maxHeight</span>&nbsp;</li><li><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;height);</span>&nbsp;</li><li class="alt"><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AffineTransformOp&nbsp;op&nbsp;=&nbsp;new&nbsp;AffineTransformOp(tx,</span>&nbsp;</li><li><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AffineTransformOp.TYPE_NEAREST_NEIGHBOR);</span>&nbsp;</li><li class="alt"><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//缩小</span>&nbsp;</li><li><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image&nbsp;=&nbsp;op.filter(image,&nbsp;null);*/</span><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;输出图像 </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageIO.write(image,&nbsp;</span><span class="string">"jpg"</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;File(fileName));&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(IOException&nbsp;ex)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;退出操作 </span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(</span><span class="number">0</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(panel,&nbsp;BorderLayout.SOUTH);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NativeInterface.open();&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SwingUtilities.invokeLater(</span><span class="keyword">new</span><span>&nbsp;Runnable()&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;run()&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;SWT组件转Swing组件，不初始化父窗体将无法启动webBrowser </span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFrame&nbsp;frame&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;JFrame(</span><span class="string">"以DJ组件保存指定网页截图"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;加载指定页面，最大保存为640x480的截图 </span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.getContentPane().add(&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">new</span><span>&nbsp;Main(</span><span class="string">"http://blog.csdn.net/cping1982"</span><span>,&nbsp;</span><span class="number">640</span><span>,&nbsp;</span><span class="number">480</span><span>),&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BorderLayout.CENTER);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setSize(</span><span class="number">800</span><span>,&nbsp;</span><span class="number">600</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;仅初始化，但不显示 </span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.invalidate();&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.pack();&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setVisible(</span><span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NativeInterface.runEventPump();&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li></ol></div>
<p><textarea style="display: none" class="java" rows="15" cols="50" name="code">import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import chrriis.dj.nativeswing.swtimpl.NativeComponent;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;
import chrriis.dj.nativeswing.swtimpl.components.WebBrowserAdapter;
import chrriis.dj.nativeswing.swtimpl.components.WebBrowserEvent;
public class Main extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// 行分隔符
	final static public String LS = System.getProperty("line.separator", "/n");
	// 文件分割符
	final static public String FS = System.getProperty("file.separator", "//");
	//以javascript脚本获得网页全屏后大小
	final static StringBuffer jsDimension;
	
	static {
		jsDimension = new StringBuffer();
		jsDimension.append("var width = 0;").append(LS);
		jsDimension.append("var height = 0;").append(LS);
		jsDimension.append("if(document.documentElement) {").append(LS);
		jsDimension.append(
						"  width = Math.max(width, document.documentElement.scrollWidth);")
				.append(LS);
		jsDimension.append(
						"  height = Math.max(height, document.documentElement.scrollHeight);")
				.append(LS);
		jsDimension.append("}").append(LS);
		jsDimension.append("if(self.innerWidth) {").append(LS);
		jsDimension.append("  width = Math.max(width, self.innerWidth);")
				.append(LS);
		jsDimension.append("  height = Math.max(height, self.innerHeight);")
				.append(LS);
		jsDimension.append("}").append(LS);
		jsDimension.append("if(document.body.scrollWidth) {").append(LS);
		jsDimension.append(
				"  width = Math.max(width, document.body.scrollWidth);")
				.append(LS);
		jsDimension.append(
				"  height = Math.max(height, document.body.scrollHeight);")
				.append(LS);
		jsDimension.append("}").append(LS);
		jsDimension.append("return width + ':' + height;");
	}
  //DJNativeSwing组件请于http://djproject.sourceforge.net/main/index.html下载
	public Main(final String url, final int maxWidth, final int maxHeight) {
		super(new BorderLayout());
		JPanel webBrowserPanel = new JPanel(new BorderLayout());
		final String fileName = System.currentTimeMillis() + ".jpg";
		final JWebBrowser webBrowser = new JWebBrowser(null);
		webBrowser.setBarsVisible(false);
		webBrowser.navigate(url);
		webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
		add(webBrowserPanel, BorderLayout.CENTER);
		JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));
		webBrowser.addWebBrowserListener(new WebBrowserAdapter() {
			// 监听加载进度
			public void loadingProgressChanged(WebBrowserEvent e) {
				// 当加载完毕时
				if (e.getWebBrowser().getLoadingProgress() == 100) {
					String result = (String) webBrowser
							.executeJavascriptWithResult(jsDimension.toString());
					int index = result == null ? -1 : result.indexOf(":");
					NativeComponent nativeComponent = webBrowser
							.getNativeComponent();
					Dimension originalSize = nativeComponent.getSize();
					Dimension imageSize = new Dimension(Integer.parseInt(result
							.substring(0, index)), Integer.parseInt(result
							.substring(index + 1)));
					imageSize.width = Math.max(originalSize.width,
							imageSize.width + 50);
					imageSize.height = Math.max(originalSize.height,
							imageSize.height + 50);
					nativeComponent.setSize(imageSize);
					BufferedImage image = new BufferedImage(imageSize.width,
							imageSize.height, BufferedImage.TYPE_INT_RGB);
					nativeComponent.paintComponent(image);
					nativeComponent.setSize(originalSize);
					// 当网页超出目标大小时
					if (imageSize.width &gt; maxWidth
							|| imageSize.height &gt; maxHeight) {
						//截图部分图形
						image = image.getSubimage(0, 0, maxWidth, maxHeight);
						/*此部分为使用缩略图
						int width = image.getWidth(), height = image
							.getHeight();
						 AffineTransform tx = new AffineTransform();
						tx.scale((double) maxWidth / width, (double) maxHeight
								/ height);
						AffineTransformOp op = new AffineTransformOp(tx,
								AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
						//缩小
						image = op.filter(image, null);*/
					}
					try {
						// 输出图像
						ImageIO.write(image, "jpg", new File(fileName));
					} catch (IOException ex) {
						ex.printStackTrace();
					}
					// 退出操作
					System.exit(0);
				}
			}
		}
		);
		add(panel, BorderLayout.SOUTH);
	}
	public static void main(String[] args) {
		NativeInterface.open();
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				// SWT组件转Swing组件，不初始化父窗体将无法启动webBrowser
				JFrame frame = new JFrame("以DJ组件保存指定网页截图");
				// 加载指定页面，最大保存为640x480的截图
				frame.getContentPane().add(
						new Main("http://blog.csdn.net/cping1982", 640, 480),
						BorderLayout.CENTER);
				frame.setSize(800, 600);
				// 仅初始化，但不显示
				frame.invalidate();
				frame.pack();
				frame.setVisible(false);
			}
		});
		NativeInterface.runEventPump();
	}
}
</textarea> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/feng0801/aggbug/422317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2015-01-21 12:00 <a href="http://www.blogjava.net/feng0801/archive/2015/01/21/422317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java文件下载 </title><link>http://www.blogjava.net/feng0801/archive/2015/01/04/422028.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Sun, 04 Jan 2015 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2015/01/04/422028.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/422028.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2015/01/04/422028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/422028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/422028.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;HttpServletResponse&nbsp;download(String&nbsp;path,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;path是指欲下载的文件的路径。</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&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(path);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;取得文件名。</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;filename&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;file.getName();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;取得文件的后缀名。</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;ext&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;filename.substring(filename.lastIndexOf(</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">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">).toUpperCase();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;以流的形式下载文件。</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;fis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BufferedInputStream(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileInputStream(path));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[fis.available()];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fis.read(buffer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fis.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;清空response</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;设置response的Header</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.addHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Disposition</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">attachment;filename=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(filename.getBytes()));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.addHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Length</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;file.length());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream&nbsp;toClient&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BufferedOutputStream(response.getOutputStream());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span style="color: #000000">"</span><span style="color: #000000">application/octet-stream</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toClient.write(buffer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toClient.flush();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toClient.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;response;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;downloadLocal(HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;FileNotFoundException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;下载本地文件</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fileName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Operator.doc</span><span style="color: #000000">"</span><span style="color: #000000">.toString();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;文件的默认保存名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;读到流中</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inStream&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileInputStream(</span><span style="color: #000000">"</span><span style="color: #000000">c:/Operator.doc</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;文件的存放路径<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;设置输出的格式</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span style="color: #000000">"</span><span style="color: #000000">bin</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.addHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Disposition</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">attachment;&nbsp;filename=\</span><span style="color: #000000">""</span><span style="color: #000000">&nbsp;+&nbsp;fileName&nbsp;+&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">\</span><span style="color: #000000">""</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;循环取出流中的数据</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[</span><span style="color: #000000">100</span><span style="color: #000000">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;len;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;((len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;inStream.read(b))&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.getOutputStream().write(b,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;len);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inStream.close();<br />&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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;downloadNet(HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;MalformedURLException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;下载网络文件</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;bytesum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;byteread&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;URL(</span><span style="color: #000000">"</span><span style="color: #000000">windine.blogdriver.com/logo.gif</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLConnection&nbsp;conn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;url.openConnection();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inStream&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;conn.getInputStream();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileOutputStream(</span><span style="color: #000000">"</span><span style="color: #000000">c:/abc.gif</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[</span><span style="color: #000000">1204</span><span style="color: #000000">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;length;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;((byteread&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;inStream.read(buffer))&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytesum&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;byteread;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(bytesum);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.write(buffer,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;byteread);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(FileNotFoundException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<div>//支持在线打开文件的一种
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_103_1081_Open_Image" onclick="this.style.display='none'; Codehighlighter1_103_1081_Open_Text.style.display='none'; Codehighlighter1_103_1081_Closed_Image.style.display='inline'; Codehighlighter1_103_1081_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_103_1081_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_103_1081_Closed_Text.style.display='none'; Codehighlighter1_103_1081_Open_Image.style.display='inline'; Codehighlighter1_103_1081_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;downLoad(String&nbsp;filePath,&nbsp;HttpServletResponse&nbsp;response,&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;isOnLine)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_103_1081_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_103_1081_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&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 /><img id="Codehighlighter1_167_253_Open_Image" onclick="this.style.display='none'; Codehighlighter1_167_253_Open_Text.style.display='none'; Codehighlighter1_167_253_Closed_Image.style.display='inline'; Codehighlighter1_167_253_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_167_253_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_167_253_Closed_Text.style.display='none'; Codehighlighter1_167_253_Open_Image.style.display='inline'; Codehighlighter1_167_253_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">f.exists())&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_167_253_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_167_253_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.sendError(</span><span style="color: #000000">404</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">File&nbsp;not&nbsp;found!</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedInputStream&nbsp;br&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BufferedInputStream(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileInputStream(f));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;buf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[</span><span style="color: #000000">1024</span><span style="color: #000000">];<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.reset();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;非常重要</span><span style="color: #008000"><br /><img id="Codehighlighter1_452_717_Open_Image" onclick="this.style.display='none'; Codehighlighter1_452_717_Open_Text.style.display='none'; Codehighlighter1_452_717_Closed_Image.style.display='inline'; Codehighlighter1_452_717_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_452_717_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_452_717_Closed_Text.style.display='none'; Codehighlighter1_452_717_Open_Image.style.display='inline'; Codehighlighter1_452_717_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(isOnLine)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_452_717_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_452_717_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;在线打开方式</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;URL(</span><span style="color: #000000">"</span><span style="color: #000000">file:///</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;filePath);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(u.openConnection().getContentType());<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Disposition</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">inline;&nbsp;filename=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;f.getName());<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;文件名应该编码成UTF-8</span><span style="color: #008000"><br /><img id="Codehighlighter1_724_902_Open_Image" onclick="this.style.display='none'; Codehighlighter1_724_902_Open_Text.style.display='none'; Codehighlighter1_724_902_Closed_Image.style.display='inline'; Codehighlighter1_724_902_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_724_902_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_724_902_Closed_Text.style.display='none'; Codehighlighter1_724_902_Open_Image.style.display='inline'; Codehighlighter1_724_902_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_724_902_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_724_902_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;纯下载方式</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span style="color: #000000">"</span><span style="color: #000000">application/x-msdownload</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Disposition</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">attachment;&nbsp;filename=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;f.getName());<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream&nbsp;out&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;response.getOutputStream();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;((len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;br.read(buf))&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(buf,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;len);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;br.close();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>方式</div><br /><img src ="http://www.blogjava.net/feng0801/aggbug/422028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2015-01-04 16:32 <a href="http://www.blogjava.net/feng0801/archive/2015/01/04/422028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java修改xml文件</title><link>http://www.blogjava.net/feng0801/archive/2014/07/29/401396.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Tue, 29 Jul 2014 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2014/07/29/401396.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/401396.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2014/07/29/401396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/401396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/401396.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">原始的message.xml<br /></span><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;&lt;</span><span style="color: #000000">users</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">Messages</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">sendName</span><span style="color: #000000">&gt;</span><span style="color: #000000">sendUsers</span><span style="color: #000000">&lt;/</span><span style="color: #000000">sendName</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">receiveName</span><span style="color: #000000">&gt;</span><span style="color: #000000">snake</span><span style="color: #000000">&lt;/</span><span style="color: #000000">receiveName</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">date</span><span style="color: #000000">&gt;</span><span style="color: #000000">2007</span><span style="color: #000000">-</span><span style="color: #000000">12</span><span style="color: #000000">-</span><span style="color: #000000">04</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">12</span><span style="color: #000000">:</span><span style="color: #000000">20</span><span style="color: #000000">:</span><span style="color: #000000">00</span><span style="color: #000000">&lt;/</span><span style="color: #000000">date</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">status</span><span style="color: #000000">&gt;</span><span style="color: #000000">1</span><span style="color: #000000">&lt;/</span><span style="color: #000000">status</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">message</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">this</span><span style="color: #000000">&nbsp;is&nbsp;Content</span><span style="color: #000000">&lt;/</span><span style="color: #000000">message</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">Messages</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">users</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><br />java程序<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.File;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.xml.parsers.DocumentBuilder;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.xml.parsers.DocumentBuilderFactory;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.xml.transform.Transformer;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.xml.transform.TransformerFactory;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.xml.transform.dom.DOMSource;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.xml.transform.stream.StreamResult;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.w3c.dom.Document;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.w3c.dom.Node;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.w3c.dom.NodeList;<br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UpdateXml&nbsp;{<br />&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">boolean</span><span style="color: #000000">&nbsp;doc2XmlFile(Document&nbsp;document,&nbsp;String&nbsp;filename)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TransformerFactory&nbsp;tFactory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;TransformerFactory.newInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transformer&nbsp;transformer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tFactory.newTransformer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;transformer.setOutputProperty(OutputKeys.ENCODING,&nbsp;"GB2312");</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOMSource&nbsp;source&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DOMSource(document);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamResult&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StreamResult(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(filename));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transformer.transform(source,&nbsp;result);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;flag;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&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;Document&nbsp;load(String&nbsp;filename)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;document&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilderFactory&nbsp;factory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DocumentBuilderFactory<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.newInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilder&nbsp;builder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.newDocumentBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;builder.parse(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(filename));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.normalize();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;document;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;<br />&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;xmlUpdateDemo()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;document&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;load(</span><span style="color: #000000">"</span><span style="color: #000000">message.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;root&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getDocumentElement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(root.hasChildNodes())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NodeList&nbsp;ftpnodes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root.getChildNodes();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ftpnodes.getLength();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NodeList&nbsp;ftplist&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ftpnodes.item(i).getChildNodes();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ftplist.getLength();&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;subnode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ftplist.item(k);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;if&nbsp;(subnode.getNodeType()==Node.ELEMENT_NODE&amp;&amp;subnode.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;getNodeName()=="ftp-chn")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;ftpnodes.item(i).removeChild(subnode);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;}</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(subnode.getNodeType()&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;Node.ELEMENT_NODE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;subnode.getNodeName()&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">status</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subnode.getFirstChild().setNodeValue(</span><span style="color: #000000">"</span><span style="color: #000000">9</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc2XmlFile(document,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">message.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&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;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateXml.xmlUpdateDemo();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />修改后的message.xml<br /></span><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;&lt;</span><span style="color: #000000">users</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">Messages</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">sendName</span><span style="color: #000000">&gt;</span><span style="color: #000000">sendUsers</span><span style="color: #000000">&lt;/</span><span style="color: #000000">sendName</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">receiveName</span><span style="color: #000000">&gt;</span><span style="color: #000000">snake</span><span style="color: #000000">&lt;/</span><span style="color: #000000">receiveName</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">date</span><span style="color: #000000">&gt;</span><span style="color: #000000">2007</span><span style="color: #000000">-</span><span style="color: #000000">12</span><span style="color: #000000">-</span><span style="color: #000000">04</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">12</span><span style="color: #000000">:</span><span style="color: #000000">20</span><span style="color: #000000">:</span><span style="color: #000000">00</span><span style="color: #000000">&lt;/</span><span style="color: #000000">date</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">status</span><span style="color: #000000">&gt;</span><span style="color: #000000">9</span><span style="color: #000000">&lt;/</span><span style="color: #000000">status</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">message</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">this</span><span style="color: #000000">&nbsp;is&nbsp;Content</span><span style="color: #000000">&lt;/</span><span style="color: #000000">message</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">Messages</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">users</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span></div> <img src ="http://www.blogjava.net/feng0801/aggbug/401396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2014-07-29 17:05 <a href="http://www.blogjava.net/feng0801/archive/2014/07/29/401396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant 入门</title><link>http://www.blogjava.net/feng0801/archive/2014/07/29/401513.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Tue, 29 Jul 2014 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2014/07/29/401513.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/401513.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2014/07/29/401513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/401513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/401513.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、概述ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具，大多用于Java环境中的软件开发。在实际软件开发中，有很多地方可以用到ant。&nbsp;开发环境：System：WindowsJDK：1.6+IDE：eclipseant：1.9.1&nbsp;Email：hoojo_@126.comBlog：http://blog....&nbsp;&nbsp;<a href='http://www.blogjava.net/feng0801/archive/2014/07/29/401513.html'>阅读全文</a><img src ="http://www.blogjava.net/feng0801/aggbug/401513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2014-07-29 17:01 <a href="http://www.blogjava.net/feng0801/archive/2014/07/29/401513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ant使用例子</title><link>http://www.blogjava.net/feng0801/archive/2014/07/29/416297.html</link><dc:creator>ForMeBlog</dc:creator><author>ForMeBlog</author><pubDate>Tue, 29 Jul 2014 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2014/07/29/416297.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/416297.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2014/07/29/416297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/416297.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/416297.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Ant是一个Apache基金会下的跨平台的构件工具，它可以实现项目的自动构建和部署等功能。在本文中，主要让读者熟悉怎样将Ant应用到Java项目中，让它简化构建和部署操作。&nbsp;一．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装与配置下载地址：http://ant.apache.org...&nbsp;&nbsp;<a href='http://www.blogjava.net/feng0801/archive/2014/07/29/416297.html'>阅读全文</a><img src ="http://www.blogjava.net/feng0801/aggbug/416297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">ForMeBlog</a> 2014-07-29 16:49 <a href="http://www.blogjava.net/feng0801/archive/2014/07/29/416297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>