﻿<?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-eagle-随笔分类-java</title><link>http://www.blogjava.net/eagle-daiq/category/55004.html</link><description> 学无止境,细节决定成败.</description><language>zh-cn</language><lastBuildDate>Wed, 14 Nov 2018 17:27:13 GMT</lastBuildDate><pubDate>Wed, 14 Nov 2018 17:27:13 GMT</pubDate><ttl>60</ttl><item><title>jenkins 自动化发布实践整理</title><link>http://www.blogjava.net/eagle-daiq/archive/2018/11/08/433476.html</link><dc:creator>月下孤城</dc:creator><author>月下孤城</author><pubDate>Thu, 08 Nov 2018 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/eagle-daiq/archive/2018/11/08/433476.html</guid><wfw:comment>http://www.blogjava.net/eagle-daiq/comments/433476.html</wfw:comment><comments>http://www.blogjava.net/eagle-daiq/archive/2018/11/08/433476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/eagle-daiq/comments/commentRss/433476.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/eagle-daiq/services/trackbacks/433476.html</trackback:ping><description><![CDATA[最近实践Jenkins的自动化发布，即实现指定项目的编译-打包-上传-发布的持续集成发版过程。中途遇到不少问题，整理如下以备后忘。&nbsp;<br /><div><strong>1.Jenkins安装</strong><br /><div>Jenkins是开源软件，直接到官网下载最新版本安装。具体过程不再累述，网上资料很多。本文安装版本jenkins-2.138.2。</div><strong>2.Jenkins全局设置</strong><br /><div>打开Jenkins-全局工具配置 配置编译打包的工具，我使用的是maven，按具体环境配置好相应信息。若项目工程使用其他工具，如gradle在对应项配置信息即可。<br /><img src="http://www.blogjava.net/images/blogjava_net/eagle-daiq/gpz.png" width="1504" height="590" alt="" /></div><div><strong>3.publish over ssh</strong><br />Jenkins - 插件管理 可选插件tab页下安装publish over ssh插件。用于Jenkins服务器ssh传输文件到Linux服务器。<br />安装好publish over ssh插件后，到Jenkins - 配置中 publish over ssh项设置相关上传Linux服务器信息。<br /><ul><li>Passphrase&nbsp; - 默认上传服务器密码</li><li>Path to key&nbsp; - Jenkins服务器ssh key目录</li><li>key&nbsp; - Jenkins服务器ssh key内容，一般为~/.ssh目录下id_rsa.pub内容</li><li>SSH Servers - 上传服务器的配置</li></ul>Jenkins ssh key的生成网上有很多资料，不再过多介绍。我是使用的Passphrase, 登录验证key或者passphrase方式可以二选一，可根据具体情况选择。<br /><br />ssh server设置：<br />统一配置发布文件的Linux服务器，如下图。<br /><img src="http://www.blogjava.net/images/blogjava_net/eagle-daiq/server.png" width="1512" height="291" alt="" /><br />其中 remote directory 表示发布文件到服务器的默认目录。若为空默认为当前登录用户目录。<br /><br /><br /><strong>4.项目发布<br /></strong>本文以svn的订单order项目为例，通过Jenkins工具，经过编译-打包-上传-发布过程，动态的将java jar发布到两台服务器。<br />4.1 新建任务<br />Jenkins - 新建任务，创建order发布的一个任务。由于项目是基于maven的，所以选择'构建一个maven项目'进入配置页面。<br /><br /><img src="http://www.blogjava.net/images/blogjava_net/eagle-daiq/task.png" width="1271" height="523" alt="" /><br /><br />配置svn代码库信息：<br /><div><img src="http://www.blogjava.net/images/blogjava_net/eagle-daiq/svn.png" width="1679" height="801" alt="" /></div>build配置：对应项目输入项目构建命令。<br /><img src="http://www.blogjava.net/images/blogjava_net/eagle-daiq/build.png" width="1458" height="230" alt="" /><span style="white-space: pre;">	<br /><br />p</span>ost steps：配置发布服务器的信息。如下图。<br /><br /><img src="http://www.blogjava.net/images/blogjava_net/eagle-daiq/postcfg.png" width="1389" height="877" alt="" /><br />由于order订单服务是集群部署，分别设置了2台 ssh server。<br />source files 是指上传到服务器的发布文件。Jenkins默认编译后文件在workspace目录下，这里输入target/{发布jar文件}. 上传到发布服务器后，不需要target目录，所以 remove prefix中填target/。 <br />Remote directory可以为空，由于我们在第3步中已经设置了全局默认ssh server的remote directory ，所以这里可以不填，如这里设置将覆盖之前的全局配置目录。<br />exec command是文件上传到发布服务器后，需要执行的shell脚本指令，用于发布order jar包的启动备份命令。图中app-deploy.sh为应用jar文件的启动备份shell脚本文件，需放到发布服务器指定目录下。其中BUILD_ID=DONTKILLME是为了kill 老的运行jar时避免当前执行进程不被误杀。<br /><br />app-deploy.sh文件：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#!/bin/sh<br />##&nbsp;java&nbsp;env<br />##&nbsp;service&nbsp;name<br />SERVICE_NAME=$1<br />SERVICE_DIR=/usr/service/<br />JAR_NAME=$SERVICE_NAME\.jar<br />PID=$SERVICE_NAME\.pid<br /><br />#function&nbsp;start<br />start(){<br />&nbsp;&nbsp;&nbsp;cd&nbsp;$SERVICE_DIR<br />&nbsp;&nbsp;&nbsp;source&nbsp;/etc/profile<br />&nbsp;&nbsp;&nbsp;##&nbsp;nohup&nbsp;java&nbsp;-Xms256m&nbsp;-Xmx512m&nbsp;-jar&nbsp;$JAR_NAME&nbsp;&gt;log/$SERVICE_NAME.out&nbsp;2&gt;&amp;1&nbsp;&amp;<br />&nbsp;&nbsp;&nbsp;nohup&nbsp;java&nbsp;-jar&nbsp;-Xms256m&nbsp;-Xmx256m&nbsp;$JAR_NAME&nbsp;&gt;/dev/<span style="color: #0000FF; ">null</span>&nbsp;2&gt;&amp;1&nbsp;&amp;<br />&nbsp;&nbsp;&nbsp;echo&nbsp;$!&nbsp;&gt;&nbsp;$SERVICE_DIR/$PID<br />&nbsp;&nbsp;&nbsp;echo&nbsp;"####&nbsp;start&nbsp;$SERVICE_NAME"<br />}<br /><br />#&nbsp;function&nbsp;stop<br />stop(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd&nbsp;$SERVICE_DIR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;-f&nbsp;"$SERVICE_DIR/$PID"&nbsp;];&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kill&nbsp;`cat&nbsp;$SERVICE_DIR/$PID`<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;-rf&nbsp;$SERVICE_DIR/$PID<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"####&nbsp;stop&nbsp;$SERVICE_NAME"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;3<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PROCESS=`ps&nbsp;-ef|grep&nbsp;$JAR_NAME&nbsp;|grep&nbsp;-v&nbsp;grep|grep&nbsp;-v&nbsp;PPID|awk&nbsp;'{&nbsp;print&nbsp;$2}'`<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;in&nbsp;$PROCESS<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Kill&nbsp;the&nbsp;$SERVICE_NAME&nbsp;process&nbsp;[&nbsp;$i&nbsp;]"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kill&nbsp;-9&nbsp;$i<br />&nbsp;&nbsp;&nbsp;&nbsp;done<br />}<br /><br />#&nbsp;function&nbsp;clean<br />clean(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"---start&nbsp;do&nbsp;do&nbsp;clean&nbsp;phase."<br />&nbsp;&nbsp;&nbsp;&nbsp;cd&nbsp;$SERVICE_DIR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;!&nbsp;-d&nbsp;"lastDeploy"&nbsp;];&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mkdir&nbsp;lastDeploy<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;-f&nbsp;"$JAR_NAME"&nbsp;];&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"backup&nbsp;$JAR_NAME"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mv&nbsp;$JAR_NAME&nbsp;lastDeploy/$JAR_NAME\_`date&nbsp;"+%Y%m%d%H%M%S"`<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;-d&nbsp;"tmp"&nbsp;];&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mv&nbsp;-f&nbsp;tmp/$JAR_NAME&nbsp;./<br />&nbsp;&nbsp;&nbsp;&nbsp;fi<br />}<br /><br /><span style="color: #0000FF; ">case</span>&nbsp;"$2"&nbsp;in<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;start)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;stop)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;restart)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"####&nbsp;restart&nbsp;$SERVICE_NAME"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;clean)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"####&nbsp;clean&nbsp;$SERVICE_NAME"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;deploy)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"####&nbsp;deploy&nbsp;$SERVICE_NAME"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />esac<br />exit&nbsp;0</div>以上脚本发布逻辑如下：<br />1.先stop老的jar应用程序。先从记录的pid文件中找kill的进程，找不到通过ps指令查找当前运行jar文件，再kill -9 杀掉。<br />2.将老的jar程序移动到lastDeploy目录备份，并加上时间戳后缀。将待发布的新jar文件从tmp目录移动到发布目录。<br />3.启动新的jar程序文件。<br /><br /><br /><div></div></div></div><img src ="http://www.blogjava.net/eagle-daiq/aggbug/433476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/eagle-daiq/" target="_blank">月下孤城</a> 2018-11-08 11:53 <a href="http://www.blogjava.net/eagle-daiq/archive/2018/11/08/433476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java加密算法实现（RSA,AES,DES,Hmac,MD5,Base64）</title><link>http://www.blogjava.net/eagle-daiq/archive/2017/05/28/432558.html</link><dc:creator>月下孤城</dc:creator><author>月下孤城</author><pubDate>Sun, 28 May 2017 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/eagle-daiq/archive/2017/05/28/432558.html</guid><wfw:comment>http://www.blogjava.net/eagle-daiq/comments/432558.html</wfw:comment><comments>http://www.blogjava.net/eagle-daiq/archive/2017/05/28/432558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/eagle-daiq/comments/commentRss/432558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/eagle-daiq/services/trackbacks/432558.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: KeyAlgorithmEnuKeyAlgorithmEnuCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;1&nbsp;/**&nbsp;2&nbsp;&nbsp;*&nbsp;系统支持的加密算法&nbsp;3&nbsp;&nbsp;*/...&nbsp;&nbsp;<a href='http://www.blogjava.net/eagle-daiq/archive/2017/05/28/432558.html'>阅读全文</a><img src ="http://www.blogjava.net/eagle-daiq/aggbug/432558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/eagle-daiq/" target="_blank">月下孤城</a> 2017-05-28 17:16 <a href="http://www.blogjava.net/eagle-daiq/archive/2017/05/28/432558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java可执行jar读取外部属性文件的方法</title><link>http://www.blogjava.net/eagle-daiq/archive/2016/03/18/429717.html</link><dc:creator>月下孤城</dc:creator><author>月下孤城</author><pubDate>Fri, 18 Mar 2016 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/eagle-daiq/archive/2016/03/18/429717.html</guid><wfw:comment>http://www.blogjava.net/eagle-daiq/comments/429717.html</wfw:comment><comments>http://www.blogjava.net/eagle-daiq/archive/2016/03/18/429717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/eagle-daiq/comments/commentRss/429717.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/eagle-daiq/services/trackbacks/429717.html</trackback:ping><description><![CDATA[有一个可执行的exl2xsd.jar文件，在exl2xsd.jar中需要读取配置文件的config.properties信息。如下截图。<br /><img src="http://www.blogjava.net/images/blogjava_net/eagle-daiq/244C.tmp.jpg" width="781" height="279" alt="" /><br />读取jar包外的方法逻辑:通过获取类文件所在code source的路径来定位jar包路径。然后由"jar包路径+配置文件名"的方式取得对应属性文件。<br /><br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;取类对应source源目录路径<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;clazz<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&nbsp;qiang.dai<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;getCodeSourcePath(Class&nbsp;clazz)&nbsp;{<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;=&nbsp;clazz.getProtectionDomain().getCodeSource().getLocation();<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path&nbsp;=&nbsp;url.getPath();<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(path.toUpperCase().endsWith(".JAR"))&nbsp;{<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;index&nbsp;=&nbsp;path.lastIndexOf("/");<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;=&nbsp;path.substring(0,&nbsp;index);<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;java.net.URLDecoder.decode(path,&nbsp;"UTF-8");<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(UnsupportedEncodingException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"";<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />读取配置文件:<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;ConfigManager()&nbsp;{<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;classPath&nbsp;=&nbsp;URLUtil.getCodeSourcePath(ConfigManager.<span style="color: #0000FF; ">class</span>);<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;prop&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Properties();<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("path="+classPath+File.separator+CONFIG_FILE_NAME);</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prop.load(<span style="color: #0000FF; ">new</span>&nbsp;FileReader(<span style="color: #0000FF; ">new</span>&nbsp;File(<span style="color: #0000FF; ">new</span>&nbsp;File(classPath),CONFIG_FILE_NAME)));<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initConfigs(prop);<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(String.format("******初始化配置文件失败,请检查文件[%s]在当前目录下存在******",&nbsp;CONFIG_FILE_NAME));<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;RuntimeException(e);<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div><img src ="http://www.blogjava.net/eagle-daiq/aggbug/429717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/eagle-daiq/" target="_blank">月下孤城</a> 2016-03-18 10:10 <a href="http://www.blogjava.net/eagle-daiq/archive/2016/03/18/429717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poi解析excel列子</title><link>http://www.blogjava.net/eagle-daiq/archive/2016/03/18/429716.html</link><dc:creator>月下孤城</dc:creator><author>月下孤城</author><pubDate>Fri, 18 Mar 2016 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/eagle-daiq/archive/2016/03/18/429716.html</guid><wfw:comment>http://www.blogjava.net/eagle-daiq/comments/429716.html</wfw:comment><comments>http://www.blogjava.net/eagle-daiq/archive/2016/03/18/429716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/eagle-daiq/comments/commentRss/429716.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/eagle-daiq/services/trackbacks/429716.html</trackback:ping><description><![CDATA[工作中有时会用java程序分析excel文件内容。本文介绍使用poi解析excel&nbsp;2007及以上版本的方法，以备参考。<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;poi解析excel&nbsp;&nbsp;&nbsp;&nbsp;sample<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;针对2007及以上版本&nbsp;使用XSSF解析<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;EncryptedDocumentException<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;InvalidFormatException<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;IOException<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;parseExcel()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;EncryptedDocumentException,&nbsp;InvalidFormatException,&nbsp;IOException{<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;is&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;FileInputStream("e:\\excel.xlsx");<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Workbook&nbsp;workbook&nbsp;=&nbsp;WorkbookFactory.create(is);&nbsp;&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sheet&nbsp;sheet&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;workbook.getNumberOfSheets();&nbsp;i++)&nbsp;{<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;获取每个Sheet表</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sheet&nbsp;=&nbsp;workbook.getSheetAt(i);<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sheetName&nbsp;=&nbsp;sheet.getSheetName();<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(workbook.isSheetHidden(i)){<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">判断sheet页是否被隐藏</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("sheet="+sheetName+",&nbsp;is&nbsp;hidden.");<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;sheet.getPhysicalNumberOfRows();&nbsp;j++)&nbsp;{<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;获取每行</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(j==0)&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">第一行title，不处理</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Row&nbsp;row&nbsp;=&nbsp;sheet.getRow(j);<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(row&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">处理每行数据</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(row.getZeroHeight()){<br /><span style="color: #008080; ">29</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;<span style="color: #008000; ">//</span><span style="color: #008000; ">行是否被隐藏</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #008000; "></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;System.out.println("---Sheet表["+sheetName+"],第"&nbsp;+&nbsp;j&nbsp;+&nbsp;"行被隐藏，不处理---");<br /><span style="color: #008080; ">31</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;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;columns&nbsp;=&nbsp;row.getPhysicalNumberOfCells();<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;c=0;c&lt;columns;c++){<br /><span style="color: #008080; ">35</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;Cell&nbsp;cell&nbsp;=&nbsp;row.getCell(c);<br /><span style="color: #008080; ">36</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;<span style="color: #008000; ">//</span><span style="color: #008000; ">TODO:&nbsp;busyness&nbsp;process<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000; "><br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("---Sheet表["+sheetName+"],第"&nbsp;+&nbsp;j&nbsp;+&nbsp;"行处理出错<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.---");<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;RuntimeException(e);<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("---Sheet表["+sheetName+"],第"&nbsp;+&nbsp;j&nbsp;+&nbsp;"行处理完毕---");<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div><img src ="http://www.blogjava.net/eagle-daiq/aggbug/429716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/eagle-daiq/" target="_blank">月下孤城</a> 2016-03-18 09:51 <a href="http://www.blogjava.net/eagle-daiq/archive/2016/03/18/429716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>