﻿<?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-天堂露珠の技術ブログ-随笔分类-Java</title><link>http://www.blogjava.net/wintys/category/38339.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Feb 2012 20:40:04 GMT</lastBuildDate><pubDate>Mon, 13 Feb 2012 20:40:04 GMT</pubDate><ttl>60</ttl><item><title>[原]手动打包JAR为可执行文件</title><link>http://www.blogjava.net/wintys/archive/2012/02/13/jar_package.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Mon, 13 Feb 2012 12:35:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2012/02/13/jar_package.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/369892.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2012/02/13/jar_package.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/369892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/369892.html</trackback:ping><description><![CDATA[<div>[标题]:[原]手动打包JAR为可执行文件<br />
[时间]:2012-02-13<br />
[摘要]:打包JAR的步骤、JAR包内部的资源访问以及MANIFEST.MF文件格式注意事项。<br />
[关键字]: Java、package、打包、Jar、manifest、可执行文件<br />
[文章编号]:暂无<br />
[环境]: JDK 7.0<br />
[作者]: wintys&nbsp; (wintys@gmail.com)<br />
<br />
[正文]: <br />
0、背景<br />
&nbsp;&nbsp;&nbsp; 尽管IDE自动打包JAR的功能已经很强大，但是手动打包JAR的步骤和注意事项也得心知肚明。对于简单的示例程序，使用手动打包也很方便。<br />
<br />
1、打包JAR<br />
&nbsp;&nbsp; &nbsp;1.1 建立清单文件<br />
&nbsp;&nbsp; &nbsp;以下内容为文件内容&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;清单文件MANIFEST.MF(在D:\test\class目录下):<br />
&nbsp;&nbsp; &nbsp;================== <br />
<div class="mycode">
&nbsp;&nbsp; &nbsp;Manifest-Version: 1.0&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;Main-Class: a（主类的路径，此选项可选,如果希望在windows下双击就执行，必须写)&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;Created-By: 1.7.0_02 (Oracle Corporation)(随便写，这个是创建人名字)&nbsp; &nbsp;<br />
</div>
&nbsp;&nbsp; &nbsp;==================&nbsp; &nbsp;<br />
<br />
&nbsp;&nbsp; &nbsp;1.2 打包&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;在D:\test\class\目录下执行&nbsp; &nbsp;<br />
<div class="mycode">
&nbsp;&nbsp; &nbsp;jar cvfm classes.jar MANIFEST.MF *.*&nbsp; &nbsp;<br />
</div>
<br />
&nbsp;&nbsp; &nbsp;以上命令将class下所有文件打包到classes.jar,生成在class目录下。&nbsp; &nbsp;<br />
<br />
&nbsp;&nbsp; &nbsp;1.3 执行&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;输入java -jar classes.jar执行&nbsp; 或&nbsp;&nbsp; 双击classes.jar即可。 <br />
<br />
&nbsp;&nbsp; &nbsp;1.4 另一种方案&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;如果希望使用非JAR工具建立JAR文件, 建议使用WinRAR。首先还是需要建立一个清单文件(名字必须为MANIFEST.MF), 向此文件中写入同使用JAR 工具时一样的内容, 接着需要建立一个META-INF子目录, 然后将 MANIFEST.MF放入此目录, 接着就可以保持目录结构将所有这些内容使用 WinRAR 压缩为 ZIP 格式的文件，文件名取为 xxx.jar 即可。<br />
<br />
2、需要注意的相关问题<br />
2.1 JAR中的资源访问<br />
&nbsp;&nbsp;&nbsp; 程序的资源文件(如*.gif, *.jpg, *.jpeg, *.properties 等等)不能使用物理路径, 只能使用相对于当前类文件的相对资源路径, 只有这样才能保证打包以后程序才能找到这些资源文件. 那么, 这些文件在打开的时候都要使用下列语句:<br />
&nbsp;&nbsp;&nbsp; URL url = getClass().getResource(String name);<br />
&nbsp;&nbsp;&nbsp; 或者<br />
&nbsp;&nbsp;&nbsp; InputStream in = getClass().getResourceAsStream(String name);<br />
<br />
&nbsp;&nbsp; &nbsp;例如:<br />
<div class="mycode">
&nbsp;&nbsp; &nbsp;URL url = getClass().getResource("loading.gif");<br />
&nbsp;&nbsp; &nbsp;ImageIcon icon = new ImageIcon(url);<br />
</div>
&nbsp;&nbsp;&nbsp; 其它的资源文件的使用也与此相似. 不过属性文件(*.properties)的使用, Java 自动会加载 JAR 文件中的属性文件, 例如:<br />
ResourceBundle.getBundle("com.abc.test");<br />
那么, 这个文件只要放在 JAR 文件目录结构下的 com/abc/test.properties, Java 就能自动找到这个文件.<br />
<br />
2.2 清单文件的格式<br />
MANIFEST.MF内容示例（添加JAR库文件，在Class-Path指明路径）:<br />
<div class="mycode">
&nbsp;&nbsp; &nbsp;Manifest-Version: 1.0&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;Class-Path: lib/commons-codec-1.4.jar lib/commons-logging-1.1.1.jar li<br />
&nbsp;&nbsp; &nbsp; b/httpclient-4.1.3.jar lib/httpclient-cache-4.1.3.jar lib/httpcore-4.<br />
&nbsp;&nbsp; &nbsp; 1.4.jar lib/httpmime-4.1.3.jar&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;Created-By: 1.7.0_02 (Oracle Corporation)<br />
&nbsp;&nbsp; &nbsp;Main-Class: MyLogin<br />
</div>
<br />
&nbsp;&nbsp; &nbsp;a.清单文件文件条目的冒号后有一个空格。<br />
&nbsp;&nbsp; &nbsp;b.清单文件总是以Manifest-Version属性开头<br />
&nbsp;&nbsp; &nbsp;c.每行最长72个字符，如果超过，采用续行。（手动写MANIFEST.MF时不受此限，用JAR.exe生成JAR包时会自动断行。）<br />
&nbsp;&nbsp; &nbsp;d.确认每行都以回车结束，否则改行将会被忽略。<br />
&nbsp;&nbsp; &nbsp;e.如果Class-Path 中的存在路径，使用"/"分隔目录，与平台无关。<br />
&nbsp;&nbsp; &nbsp;f.Class-Path中的jar包之间用空格分隔，而非分号。<br />
&nbsp;&nbsp; &nbsp;g.如果库不打包入JAR，写成：Class-Path: ./lib/jacob.jar ./lib/jdom.jar ./lib/log4j.jar<br />
<br />
[参考资料]: <br />
&nbsp;&nbsp; &nbsp;[1]*《命令行用JAR打包CALSS文件,很简单》: http://www.diybl.com/course/3_program/java/javajs/20090407/164482.html<br />
&nbsp;&nbsp; &nbsp;[2] 《打包程序为 JAR 可执行文件》 : http://www.moon-soft.com/doc/25438.htm<br />
&nbsp;&nbsp; &nbsp;[3] 《打jar把第三方的jar也打进去》 : http://www.blogjava.net/soddabao/archive/2007/01/08/92455.html<br />
&nbsp;&nbsp; &nbsp;[4] 《Jar命令 Manifest.mf的用法》 : http://ganqing.iteye.com/blog/1138341<br />
&nbsp;&nbsp; &nbsp;[5] 《关于 jar包中MANIFEST.MF 写法 》 : http://blog.csdn.net/happyhell/article/details/6639792<br />
&nbsp;&nbsp; &nbsp;[6]*《JAR File Specification》(Oracle) : http://docs.oracle.com/javase/1.3/docs/guide/jar/jar.html#The%20META-INF%20directory<br /><div id="mycopyright" style="border-width: 1px 0pt 0pt; border-top: 1px solid red; padding: 5px; margin-top: 5px;">  <span style="color: #ff0000;">原创作品，转载请务必保持原文完整性并注明出处。<br />  作者:wintys (wintys@gmail.com)<br />  博客:http://www.blogjava.net/wintys</span>  </div></div><img src ="http://www.blogjava.net/wintys/aggbug/369892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2012-02-13 20:35 <a href="http://www.blogjava.net/wintys/archive/2012/02/13/jar_package.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]手机姓名秀 - NameShow</title><link>http://www.blogjava.net/wintys/archive/2010/01/30/java_javame_nameshow.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Sat, 30 Jan 2010 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2010/01/30/java_javame_nameshow.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/311343.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2010/01/30/java_javame_nameshow.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/311343.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/311343.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 手机姓名秀 - NameShow : 在手机上展示你的姓名。<br>1、如果你的名字是生僻字，没法组成常见词，别人问起，你得解释半天，最终还是要拿笔写出来别人才明白。<br>2、当你想向别人展示个性签名时，拿出纸质签名就太土了，也不方便。<br>3、当你需要展示名片时，纸质名片没有带，手机总带了吧？NameShow就派上用场了。.<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2010/01/30/java_javame_nameshow.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/311343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2010-01-30 21:48 <a href="http://www.blogjava.net/wintys/archive/2010/01/30/java_javame_nameshow.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Tomcat配置JNDI数据源</title><link>http://www.blogjava.net/wintys/archive/2009/06/12/java_tomcat_jndi_datasource.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Fri, 12 Jun 2009 04:43:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/06/12/java_tomcat_jndi_datasource.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/281820.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/06/12/java_tomcat_jndi_datasource.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/281820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/281820.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在Tomcat中配置JNDI数据源&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/06/12/java_tomcat_jndi_datasource.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/281820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-06-12 12:43 <a href="http://www.blogjava.net/wintys/archive/2009/06/12/java_tomcat_jndi_datasource.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]授权标准覆盖机制</title><link>http://www.blogjava.net/wintys/archive/2009/05/14/java_EndorsedStandardsOverrideMechanism.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Thu, 14 May 2009 15:32:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/05/14/java_EndorsedStandardsOverrideMechanism.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/270728.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/05/14/java_EndorsedStandardsOverrideMechanism.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/270728.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/270728.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Endorsed Standards Override Mechanism&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/05/14/java_EndorsedStandardsOverrideMechanism.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/270728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-05-14 23:32 <a href="http://www.blogjava.net/wintys/archive/2009/05/14/java_EndorsedStandardsOverrideMechanism.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]SAX使用示例</title><link>http://www.blogjava.net/wintys/archive/2009/04/26/java_saxdemo.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Sun, 26 Apr 2009 11:18:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/04/26/java_saxdemo.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/267595.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/04/26/java_saxdemo.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/267595.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/267595.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文介绍了SAX解析XML的方法。还阐述了创建XMLReader两种方法。一种是使用javax.xml.parsers.SAXParser驱动,另一种是使用第三方驱动org.apache.xerces.parsers.SAXParser。&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/04/26/java_saxdemo.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/267595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-04-26 19:18 <a href="http://www.blogjava.net/wintys/archive/2009/04/26/java_saxdemo.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]方法返回值为数组的另一种表示方法</title><link>http://www.blogjava.net/wintys/archive/2009/04/25/java_toCharArrayReturn.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Sat, 25 Apr 2009 14:28:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/04/25/java_toCharArrayReturn.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/267522.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/04/25/java_toCharArrayReturn.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/267522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/267522.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: public char toCharArray()[] {}&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/04/25/java_toCharArrayReturn.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/267522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-04-25 22:28 <a href="http://www.blogjava.net/wintys/archive/2009/04/25/java_toCharArrayReturn.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]JNI简单示例</title><link>http://www.blogjava.net/wintys/archive/2009/04/05/java_jnitest.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Sun, 05 Apr 2009 13:33:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/04/05/java_jnitest.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/264028.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/04/05/java_jnitest.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/264028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/264028.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java通过JNI调用DLL&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/04/05/java_jnitest.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/264028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-04-05 21:33 <a href="http://www.blogjava.net/wintys/archive/2009/04/05/java_jnitest.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]对Class.getMethod()的调用未经检查</title><link>http://www.blogjava.net/wintys/archive/2009/04/05/error_getmethodunchecked.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Sun, 05 Apr 2009 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/04/05/error_getmethodunchecked.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/263997.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/04/05/error_getmethodunchecked.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/263997.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/263997.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 警告:[unchecked]对作为普通类型 java.lang.Class 的成员的 getMethod(java.lang.String,java.lang.Class <?>...) 的调用未经检查.&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/04/05/error_getmethodunchecked.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/263997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-04-05 15:52 <a href="http://www.blogjava.net/wintys/archive/2009/04/05/error_getmethodunchecked.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]EL函数的使用</title><link>http://www.blogjava.net/wintys/archive/2009/04/03/java_elfunction.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Fri, 03 Apr 2009 13:29:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/04/03/java_elfunction.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/263824.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/04/03/java_elfunction.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/263824.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/263824.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 简单的EL函数示例。&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/04/03/java_elfunction.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/263824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-04-03 21:29 <a href="http://www.blogjava.net/wintys/archive/2009/04/03/java_elfunction.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]使用Ant实现zip压缩解压功能</title><link>http://www.blogjava.net/wintys/archive/2009/03/19/java_antzipunzip.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Thu, 19 Mar 2009 05:17:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/19/java_antzipunzip.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/260750.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/19/java_antzipunzip.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/260750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/260750.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 先前写了一篇blog《使用org.apache.tools.zip实现zip压缩和解压》，现对它进行了改进：找出了几个Bug，修改了部分代码，增加了注释，添加了图形界面，打了个可执行包，双就可以运行了。源代码如下，希望大家多提意见。&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/03/19/java_antzipunzip.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/260750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-19 13:17 <a href="http://www.blogjava.net/wintys/archive/2009/03/19/java_antzipunzip.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Java范型浅析</title><link>http://www.blogjava.net/wintys/archive/2009/03/18/260427.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Wed, 18 Mar 2009 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/18/260427.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/260427.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/18/260427.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/260427.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/260427.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: (转载自:[url]http://blog.csdn.net/andycpp/archive/2007/08/17/1748731.aspx[/url])写的很好,保存一下.&nbsp;&nbsp;&nbsp; 从jdk1.5开始，Java中开始支持范型了。范型是一个很有用的编程工具，给我们带来了极大的灵活性。在看了《java核心编程》之后，我小有收获，写出来与大家分享。&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/03/18/260427.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/260427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-18 12:02 <a href="http://www.blogjava.net/wintys/archive/2009/03/18/260427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]使用java.util.zip实现zip压缩和解压</title><link>http://www.blogjava.net/wintys/archive/2009/03/18/260426.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Wed, 18 Mar 2009 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/18/260426.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/260426.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/18/260426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/260426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/260426.html</trackback:ping><description><![CDATA[<div>
<div>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px; font-size: 10pt; width: 98%; color: rgb(0, 0, 0); line-height: 16px; font-family: verdana,宋体; background-color: rgb(238, 238, 238);"><font color="#0000ff">import</font> java.io.*; <br />
<font color="#0000ff">import</font> java.util.zip.*; <br />
<font color="#008000">/** <br />
*功能:zip压缩、解压 <br />
*说明:本程序通过ZipOutputStream和ZipInputStream实现了zip压缩和解压功能. <br />
*问题:由于java.util.zip包并不支持汉字,当zip文件中有名字为中文的文件时, <br />
*&nbsp;&nbsp;&nbsp;&nbsp; 就会出现异常:"Exception&nbsp;&nbsp;in thread "main " java.lang.IllegalArgumentException&nbsp;&nbsp;<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285) <br />
*解决: <br />
*　　方法1、修改import java.util.zip.ZipInputStream和ZipOutputStream. <br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.util.zip只支持UTF-8,Ant里面可以指定编码. <br />
*　　方法2、使用Apache Ant里提供的zip工具。 <br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不使用java.util.zip的包,把ant.jar放到classpath中. <br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序中使用import org.apache.tools.zip.*; <br />
* <br />
*仅供编程学习参考. <br />
* <br />
*@author Winty <br />
*@date&nbsp;&nbsp; 2008-8-3 <br />
*@Usage: <br />
*&nbsp;&nbsp; 压缩:java Zip -zip "directoryName" <br />
*&nbsp;&nbsp; 解压:java Zip -unzip "fileName.zip" <br />
*/</font> <br />
<br />
<font color="#0000ff">public</font> <font color="#0000ff">class</font> Zip{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> ZipInputStream&nbsp;&nbsp;zipIn;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//解压Zip </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> ZipOutputStream zipOut;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008000">//压缩Zip </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> ZipEntry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zipEntry; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> <font color="#0000ff">static</font> <font color="#0000ff">int</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bufSize;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//size of bytes </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> <font color="#0000ff">byte</font>[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> <font color="#0000ff">int</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; readedBytes; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> Zip(){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>(512); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> Zip(<font color="#0000ff">int</font> bufSize){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.bufSize = bufSize; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.buf = <font color="#0000ff">new</font> <font color="#0000ff">byte</font>[<font color="#0000ff">this</font>.bufSize]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//压缩文件夹内的文件 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">void</font> doZip(String zipDirectory){<font color="#008000">//zipDirectoryPath:需要压缩的文件夹名 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File file; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File zipDir; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zipDir = <font color="#0000ff">new</font> File(zipDirectory); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String zipFileName = zipDir.getName() + <font color="#800000">".zip"</font>;<font color="#008000">//压缩后生成的zip文件名 </font><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">try</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut = <font color="#0000ff">new</font> ZipOutputStream(<font color="#0000ff">new</font> BufferedOutputStream(<font color="#0000ff">new</font> FileOutputStream(zipFileName))); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handleDir(zipDir , <font color="#0000ff">this</font>.zipOut); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<font color="#0000ff">catch</font>(IOException ioe){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ioe.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//由doZip调用,递归完成目录文件读取 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> <font color="#0000ff">void</font> handleDir(File dir , ZipOutputStream zipOut)<font color="#0000ff">throws</font> IOException{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream fileIn; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File[] files; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files = dir.listFiles(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(files.length == 0){<font color="#008000">//如果目录为空,则单独创建之. </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//ZipEntry的isDirectory()方法中,目录以"/"结尾. </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.putNextEntry(<font color="#0000ff">new</font> ZipEntry(dir.toString() + <font color="#800000">"/"</font>)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.closeEntry(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font>{<font color="#008000">//如果目录不为空,则分别处理目录和文件. </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">for</font>(File fileName : files){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//System.out.println(fileName); </font><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(fileName.isDirectory()){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handleDir(fileName , <font color="#0000ff">this</font>.zipOut); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileIn = <font color="#0000ff">new</font> FileInputStream(fileName); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.putNextEntry(<font color="#0000ff">new</font> ZipEntry(fileName.toString())); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">while</font>((<font color="#0000ff">this</font>.readedBytes = fileIn.read(<font color="#0000ff">this</font>.buf))&gt;0){ <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;<font color="#0000ff">this</font>.zipOut.write(<font color="#0000ff">this</font>.buf , 0 , <font color="#0000ff">this</font>.readedBytes); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.closeEntry(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//解压指定zip文件 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">void</font> unZip(String unZipfileName){<font color="#008000">//unZipfileName需要解压的zip文件名 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream fileOut; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File file; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">try</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipIn = <font color="#0000ff">new</font> ZipInputStream (<font color="#0000ff">new</font> BufferedInputStream(<font color="#0000ff">new</font> FileInputStream(unZipfileName))); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">while</font>((<font color="#0000ff">this</font>.zipEntry = <font color="#0000ff">this</font>.zipIn.getNextEntry()) != <font color="#0000ff">null</font>){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file = <font color="#0000ff">new</font> File(<font color="#0000ff">this</font>.zipEntry.getName()); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//System.out.println(file);/// </font><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(<font color="#0000ff">this</font>.zipEntry.isDirectory()){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.mkdirs(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//如果指定文件的目录不存在,则创建之. </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File parent = file.getParentFile(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(!parent.exists()){ <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;parent.mkdirs(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileOut = <font color="#0000ff">new</font> FileOutputStream(file); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">while</font>(( <font color="#0000ff">this</font>.readedBytes = <font color="#0000ff">this</font>.zipIn.read(<font color="#0000ff">this</font>.buf) ) &gt; 0){ <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;fileOut.write(<font color="#0000ff">this</font>.buf , 0 , <font color="#0000ff">this</font>.readedBytes ); <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;&nbsp;&nbsp;&nbsp;&nbsp;fileOut.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipIn.closeEntry();&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<font color="#0000ff">catch</font>(IOException ioe){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ioe.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//设置缓冲区大小 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">void</font> setBufSize(<font color="#0000ff">int</font> bufSize){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.bufSize = bufSize; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//测试Zip类 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> main(String[] args)<font color="#0000ff">throws</font> Exception{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(args.length==2){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String name = args[1]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Zip zip = <font color="#0000ff">new</font> Zip(); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(args[0].equals(<font color="#800000">"-zip"</font>)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip.doZip(name); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font> <font color="#0000ff">if</font>(args[0].equals(<font color="#800000">"-unzip"</font>)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip.unZip(name); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<font color="#800000">"Usage:"</font>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<font color="#800000">"压缩:java Zip -zip directoryName"</font>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<font color="#800000">"解压:java Zip -unzip fileName.zip"</font>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">throw</font> <font color="#0000ff">new</font> Exception(<font color="#800000">"Arguments error!"</font>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
}</div>
</div>
</div>
<br />
文章来源:<a href="http://wintys.blog.51cto.com/425414/90872">http://wintys.blog.51cto.com/425414/90872</a> 
<img src ="http://www.blogjava.net/wintys/aggbug/260426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-18 12:02 <a href="http://www.blogjava.net/wintys/archive/2009/03/18/260426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]使用org.apache.tools.zip实现zip压缩和解压</title><link>http://www.blogjava.net/wintys/archive/2009/03/18/260425.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Wed, 18 Mar 2009 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/18/260425.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/260425.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/18/260425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/260425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/260425.html</trackback:ping><description><![CDATA[<div>
<div style="border: 1px solid #cccccc; padding: 4px; font-size: 10pt; width: 98%; color: #000000; line-height: 16px; font-family: verdana,宋体; background-color: #eeeeee;"><font color="#0000ff">import</font> java.io.*; <br />
<font color="#0000ff">import</font> org.apache.tools.zip.*; <br />
<font color="#0000ff">import</font> java.util.Enumeration; <br />
<font color="#008000">/** <br />
*功能:zip压缩、解压(支持中文文件名) <br />
*说明:本程序通过使用Apache Ant里提供的zip工具org.apache.tools.zip实现了zip压缩和解压功能. <br />
*&nbsp;&nbsp; 解决了由于java.util.zip包不支持汉字的问题。 <br />
*&nbsp;&nbsp; 使用java.util.zip包时,当zip文件中有名字为中文的文件时, <br />
*&nbsp;&nbsp; 就会出现异常:"Exception&nbsp;&nbsp;in thread "main " java.lang.IllegalArgumentException&nbsp;&nbsp;<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;&nbsp; java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285) <br />
*注意: <br />
*&nbsp;&nbsp; 1、使用时把ant.jar放到classpath中,程序中使用import org.apache.tools.zip.*; <br />
*&nbsp;&nbsp; 2、Apache Ant 下载地址:[url]http://ant.apache.org/[/url] <br />
*&nbsp;&nbsp; 3、Ant ZIP API:[url]http://www.jajakarta.org/ant/ant-1.6.1/docs/mix/manual/api/org/apache/tools/zip/[/url] <br />
*&nbsp;&nbsp; 4、本程序使用Ant 1.7.1 中的ant.jar <br />
* <br />
*仅供编程学习参考. <br />
* <br />
*@author Winty <br />
*@date&nbsp;&nbsp; 2008-8-3 <br />
*@Usage: <br />
*&nbsp;&nbsp; 压缩:java AntZip -zip "directoryName" <br />
*&nbsp;&nbsp; 解压:java AntZip -unzip "fileName.zip" <br />
*/</font> <br />
<br />
<font color="#0000ff">public</font> <font color="#0000ff">class</font> AntZip{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> ZipFile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zipFile; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> ZipOutputStream zipOut;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008000">//压缩Zip </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> ZipEntry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zipEntry; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> <font color="#0000ff">static</font> <font color="#0000ff">int</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bufSize;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//size of bytes </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> <font color="#0000ff">byte</font>[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> <font color="#0000ff">int</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; readedBytes; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> AntZip(){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>(512); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> AntZip(<font color="#0000ff">int</font> bufSize){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.bufSize = bufSize; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.buf = <font color="#0000ff">new</font> <font color="#0000ff">byte</font>[<font color="#0000ff">this</font>.bufSize]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//压缩文件夹内的文件 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">void</font> doZip(String zipDirectory){<font color="#008000">//zipDirectoryPath:需要压缩的文件夹名 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File file; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File zipDir; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zipDir = <font color="#0000ff">new</font> File(zipDirectory); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String zipFileName = zipDir.getName() + <font color="#800000">".zip"</font>;<font color="#008000">//压缩后生成的zip文件名 </font><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">try</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut = <font color="#0000ff">new</font> ZipOutputStream(<font color="#0000ff">new</font> BufferedOutputStream(<font color="#0000ff">new</font> FileOutputStream(zipFileName))); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handleDir(zipDir , <font color="#0000ff">this</font>.zipOut); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<font color="#0000ff">catch</font>(IOException ioe){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ioe.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//由doZip调用,递归完成目录文件读取 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> <font color="#0000ff">void</font> handleDir(File dir , ZipOutputStream zipOut)<font color="#0000ff">throws</font> IOException{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream fileIn; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File[] files; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files = dir.listFiles(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(files.length == 0){<font color="#008000">//如果目录为空,则单独创建之. </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//ZipEntry的isDirectory()方法中,目录以"/"结尾. </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.putNextEntry(<font color="#0000ff">new</font> ZipEntry(dir.toString() + <font color="#800000">"/"</font>)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.closeEntry(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font>{<font color="#008000">//如果目录不为空,则分别处理目录和文件. </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">for</font>(File fileName : files){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//System.out.println(fileName); </font><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(fileName.isDirectory()){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handleDir(fileName , <font color="#0000ff">this</font>.zipOut); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileIn = <font color="#0000ff">new</font> FileInputStream(fileName); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.putNextEntry(<font color="#0000ff">new</font> ZipEntry(fileName.toString())); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">while</font>((<font color="#0000ff">this</font>.readedBytes = fileIn.read(<font color="#0000ff">this</font>.buf))&gt;0){ <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;<font color="#0000ff">this</font>.zipOut.write(<font color="#0000ff">this</font>.buf , 0 , <font color="#0000ff">this</font>.readedBytes); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipOut.closeEntry(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//解压指定zip文件 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">void</font> unZip(String unZipfileName){<font color="#008000">//unZipfileName需要解压的zip文件名 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream fileOut; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File file; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream inputStream; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">try</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipFile = <font color="#0000ff">new</font> ZipFile(unZipfileName); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">for</font>(Enumeration entries = <font color="#0000ff">this</font>.zipFile.getEntries(); entries.hasMoreElements();){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZipEntry entry = (ZipEntry)entries.nextElement(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file = <font color="#0000ff">new</font> File(entry.getName()); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(entry.isDirectory()){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.mkdirs(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//如果指定文件的目录不存在,则创建之. </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File parent = file.getParentFile(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(!parent.exists()){ <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;parent.mkdirs(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inputStream = zipFile.getInputStream(entry); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileOut = <font color="#0000ff">new</font> FileOutputStream(file); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">while</font>(( <font color="#0000ff">this</font>.readedBytes = inputStream.read(<font color="#0000ff">this</font>.buf) ) &gt; 0){ <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;fileOut.write(<font color="#0000ff">this</font>.buf , 0 , <font color="#0000ff">this</font>.readedBytes ); <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;&nbsp;&nbsp;&nbsp;&nbsp;fileOut.close(); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inputStream.close(); <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;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.zipFile.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<font color="#0000ff">catch</font>(IOException ioe){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ioe.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//设置缓冲区大小 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">void</font> setBufSize(<font color="#0000ff">int</font> bufSize){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.bufSize = bufSize; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//测试AntZip类 </font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> main(String[] args)<font color="#0000ff">throws</font> Exception{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(args.length==2){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String name = args[1]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AntZip zip = <font color="#0000ff">new</font> AntZip(); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(args[0].equals(<font color="#800000">"-zip"</font>)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip.doZip(name); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font> <font color="#0000ff">if</font>(args[0].equals(<font color="#800000">"-unzip"</font>)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip.unZip(name); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font>{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<font color="#800000">"Usage:"</font>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<font color="#800000">"压缩:java AntZip -zip directoryName"</font>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<font color="#800000">"解压:java AntZip -unzip fileName.zip"</font>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">throw</font> <font color="#0000ff">new</font> Exception(<font color="#800000">"Arguments error!"</font>); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
}</div>
</div>
<br />
文章来源:<a href="http://wintys.blog.51cto.com/425414/90878">http://wintys.blog.51cto.com/425414/90878</a><br />
<a href="/Files/wintys/import/ant.zip">ant1.7.1.jar下载</a><br />

<img src ="http://www.blogjava.net/wintys/aggbug/260425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-18 12:02 <a href="http://www.blogjava.net/wintys/archive/2009/03/18/260425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Java实现折半查找(二分查找)的递归和非递归算法</title><link>http://www.blogjava.net/wintys/archive/2009/03/18/260420.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Wed, 18 Mar 2009 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/18/260420.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/260420.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/18/260420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/260420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/260420.html</trackback:ping><description><![CDATA[Java二分查找实现,欢迎大家提出交流意见.<br />
<div>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-family: Verdana,宋体; width: 98%; line-height: 16px; font-size: 10pt;"><font color="#008000">/**<br />
*名称:BinarySearch<br />
*功能:实现了折半查找(二分查找)的递归和非递归算法.<br />
*说明:<br />
*&nbsp;&nbsp;&nbsp;&nbsp; 1、要求所查找的数组已有序,并且其中元素已实现Comparable&lt;T&gt;接口,如Integer、String等.<br />
*&nbsp;&nbsp;&nbsp;&nbsp;2、非递归查找使用search();,递归查找使用searchRecursively();<br />
*<br />
*本程序仅供编程学习参考<br />
*<br />
*@author:&nbsp;&nbsp; Winty<br />
*@date:&nbsp;&nbsp;&nbsp;&nbsp; 2008-8-11<br />
*@email:&nbsp;&nbsp;&nbsp;&nbsp;[email]wintys@gmail.com[/email]<br />
*/</font><br />
<br />
<font color="#0000ff">class</font> BinarySearch&lt;T <font color="#0000ff">extends</font> Comparable&lt;T&gt;&gt; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> T[]&nbsp;&nbsp;data;<font color="#008000">//要排序的数据</font><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> BinarySearch(T[] data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">this</font>.data = data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">int</font> search(T key){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">int</font> low;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">int</font> high;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">int</font> mid;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(data == <font color="#0000ff">null</font>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font> -1;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;high = data.length - 1;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">while</font>(low &lt;= high){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid = (low + high) / 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<font color="#800000">"mid "</font> + mid + <font color="#800000">" mid value:"</font> + data[mid]);///<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(key.compareTo(data[mid]) &lt; 0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;high = mid - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<font color="#0000ff">else</font> <font color="#0000ff">if</font>(key.compareTo(data[mid]) &gt; 0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low = mid + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<font color="#0000ff">else</font> <font color="#0000ff">if</font>(key.compareTo(data[mid]) == 0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font> mid;<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;<font color="#0000ff">return</font> -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">private</font> <font color="#0000ff">int</font> doSearchRecursively(<font color="#0000ff">int</font> low , <font color="#0000ff">int</font> high , T key){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">int</font> mid;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">int</font> result;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(low &lt;= high){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid = (low + high) / 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result = key.compareTo(data[mid]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<font color="#800000">"mid "</font> + mid + <font color="#800000">" mid value:"</font> + data[mid]);///<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(result &lt; 0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font> doSearchRecursively(low , mid - 1 , key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<font color="#0000ff">else</font> <font color="#0000ff">if</font>(result &gt; 0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font> doSearchRecursively(mid + 1 , high , key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<font color="#0000ff">else</font> <font color="#0000ff">if</font>(result == 0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font> mid;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font> -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">int</font> searchRecursively(T key){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font>(data ==<font color="#0000ff">null</font>)<font color="#0000ff">return</font> -1;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font> doSearchRecursively(0 , data.length - 1 , key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> main(String[] args){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer[] data = {1 ,4 ,5 ,8 ,15 ,33 ,48 ,77 ,96};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BinarySearch&lt;Integer&gt; binSearch = <font color="#0000ff">new</font> BinarySearch&lt;Integer&gt;(data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//System.out.println("Key index:" + binSearch.search(33) );</font><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<font color="#800000">"Key index:"</font> + binSearch.searchRecursively(3) );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//String [] dataStr = {"A" ,"C" ,"F" ,"J" ,"L" ,"N" ,"T"};</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//BinarySearch&lt;String&gt; binSearch = new BinarySearch&lt;String&gt;(dataStr);</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//System.out.println("Key index:" + binSearch.search("A") );</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</div>
</div>
<br />
<br />
文章来源:<a href="http://wintys.blog.51cto.com/425414/94051">http://wintys.blog.51cto.com/425414/94051</a> 
<img src ="http://www.blogjava.net/wintys/aggbug/260420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-18 12:02 <a href="http://www.blogjava.net/wintys/archive/2009/03/18/260420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]导出CodeHelp的数据</title><link>http://www.blogjava.net/wintys/archive/2009/03/16/java_codehelpexporter.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Mon, 16 Mar 2009 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/16/java_codehelpexporter.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/260051.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/16/java_codehelpexporter.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/260051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/260051.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: CodeHelp是专门为我们程序员设计的一款源代码管理软件。它能方便的管理您在编程和学习中有用的源代码，减少经常到处查找资料的劳动，节省您在开发中的时间和精力。这个软件不错，如果没有用过请到这里下载(http://www.nulldo.com/)。用了一段时间，发现它并没有文件导出功能。于是用Java写了一个CodeHelpExporter。&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/03/16/java_codehelpexporter.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/260051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-16 17:05 <a href="http://www.blogjava.net/wintys/archive/2009/03/16/java_codehelpexporter.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Java 小例子：数据持久化（保存数据到文件）</title><link>http://www.blogjava.net/wintys/archive/2009/03/16/java_Persistant.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Mon, 16 Mar 2009 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/16/java_Persistant.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/259960.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/16/java_Persistant.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/259960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/259960.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 说数据持久化，初学者可能还不太懂；但要说把数据保存到文件，这谁都懂了。为什么说持久化就是把数据保存到文件？持久化指的就是当程序退出后，其中的数据能够保留下来，供程序再次运行的时候使用。这些数据保留在什么地方最好呢？当然是文件里。 &nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/03/16/java_Persistant.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/259960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-16 11:00 <a href="http://www.blogjava.net/wintys/archive/2009/03/16/java_Persistant.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]Java访问ACCESS数据库 </title><link>http://www.blogjava.net/wintys/archive/2008/12/21/java_access.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Sun, 21 Dec 2008 14:27:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2008/12/21/java_access.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/247660.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2008/12/21/java_access.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/247660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/247660.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JDBC-ODBC桥的方式又可以通过两种方式访问Access:(1)、配置ODBC数据源的方式。(2)、无需配置ODBC数据源，使用连接字符串指定数据源。&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2008/12/21/java_access.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/247660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2008-12-21 22:27 <a href="http://www.blogjava.net/wintys/archive/2008/12/21/java_access.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>