﻿<?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/kyleYang/category/42721.html</link><description>孩儿立志出乡关，学不成名誓不还。
风华正茂乾坤地，人生无处不青山。
光阴如同流水去，珍惜时光最宝贵。
鹏程万里靠自己，飞黄腾达青少年。
</description><language>zh-cn</language><lastBuildDate>Wed, 11 Aug 2010 02:53:28 GMT</lastBuildDate><pubDate>Wed, 11 Aug 2010 02:53:28 GMT</pubDate><ttl>60</ttl><item><title>解析Java对象的equals()和hashCode()的使用</title><link>http://www.blogjava.net/kyleYang/archive/2010/08/11/328469.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 11 Aug 2010 00:44:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/08/11/328469.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/328469.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/08/11/328469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/328469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/328469.html</trackback:ping><description><![CDATA[
		<div class="Content-body" id="logcontent_82" style="TABLE-LAYOUT: fixed">
				<strong>前言</strong>
				<br />
				<p>在Java语言中，equals()和hashCode()两个函数的使用是紧密配合的，你要是自己设计其中一个，就要设计另外一个。在多数情况 下，这两个函数是不用考虑的，直接使用它们的默认设计就可以了。但是在一些情况下，这两个函数最好是自己设计，才能确保整个程序的正常运行。最常见的是当 一个对象被加入收集对象（collection object）时，这两个函数必须自己设计。更细化的定义是：如果你想将一个对象A放入另一个收集对象B里，或者使用这个对象A为查找一个元对象在收集对 象B里位置的钥匙，并支持是否容纳，删除收集对象B里的元对象这样的操作，那么，equals()和hashCode()函数必须开发者自己定义。其他情 况下，这两个函数是不需要定义的。</p>
				<strong>equals():</strong>
				<p>它是用于进行两个对象的比较的，是对象内容的比较，当然也能用于进行对象参阅值的比较。什么是对象参阅值的比较？就是两个参阅变量的值得比较，我们 都知道参阅变量的值其实就是一个数字，这个数字可以看成是鉴别不同对象的代号。两个对象参阅值的比较，就是两个数字的比较，两个代号的比较。这种比较是默 认的对象比较方式，在Object这个对象中，这种方式就已经设计好了。所以你也不用自己来重写，浪费不必要的时间。</p>对象内容的比较才是设计equals()的真正目的，Java语言对equals()的要求如下，这些要求是必须遵循的。否则，你就不该浪费时间： 
<ul><li>对称性：如果x.equals(y)返回是“true”，那么y.equals(x)也应该返回是“true”。 
</li><li>反射性：x.equals(x)必须返回是“true”。 
</li><li>类推性：如果x.equals(y)返回是“true”，而且y.equals(z)返回是“true”，那么z.equals(x)也应该返回是“true”。 
</li><li>还有一致性：如果x.equals(y)返回是“true”，只要x和y内容一直不变，不管你重复x.equals(y)多少次，返回都是“true”。 
</li><li>任何情况下，x.equals(null)，永远返回是“false”；x.equals(和x不同类型的对象)永远返回是“false”。</li></ul><strong>hashCode():<br /></strong>这 个函数返回的就是一个用来进行赫希操作的整型代号，请不要把这个代号和前面所说的参阅变量所代表的代号弄混了。后者不仅仅是个代号还具有在内存中才查找对 象的位置的功能。hashCode()所返回的值是用来分类对象在一些特定的收集对象中的位置。这些对象是HashMap, Hashtable, HashSet，等等。这个函数和上面的equals()函数必须自己设计，用来协助HashMap, Hashtable, HashSet，等等对自己所收集的大量对象进行搜寻和定位。<br /><br />这些收集对象究竟如何工作的，想象每个元对象hashCode是一个箱子的 编码，按照编码，每个元对象就是根据hashCode()提供的代号归入相应的箱子里。所有的箱子加起来就是一个HashSet，HashMap，或 Hashtable对象，我们需要寻找一个元对象时，先看它的代码，就是hashCode()返回的整型值，这样我们找到它所在的箱子，然后在箱子里，每 个元对象都拿出来一个个和我们要找的对象进行对比，如果两个对象的内容相等，我们的搜寻也就结束。这种操作需要两个重要的信息，一是对象的 hashCode()，还有一个是对象内容对比的结果。<br /><br />hashCode()的返回值和equals()的关系如下：<br /><ul><li>如果x.equals(y)返回“true”，那么x和y的hashCode()必须相等。 
</li><li>如果x.equals(y)返回“false”，那么x和y的hashCode()有可能相等，也有可能不等。</li></ul><p><br />为什么这两个规则是这样的，原因其实很简单，拿HashSet来说吧，HashSet可以拥有一个或更多的箱子，在同一个箱子中可以有一个 或更多的独特元对象（HashSet所容纳的必须是独特的元对象）。这个例子说明一个元对象可以和其他不同的元对象拥有相同的hashCode。但是一个 元对象只能和拥有同样内容的元对象相等。所以这两个规则必须成立。<br /><br /><strong>设计这两个函数所要注意到的：</strong><br />如果你设计的对象类型并不使用于收集性对象，那么没有必要自己再设计这两个函数的处理方式。这是正确的面向对象设计方法，任何用户一时用不到的功能，就先不要设计，以免给日后功能扩展带来麻烦。</p><p>如果你在设计时想别出心裁，不遵守以上的两套规则，那么劝你还是不要做这样想入非非的事。我还没有遇到过哪一个开发者和我说设计这两个函数要违背前面说的两个规则，我碰到这些违反规则的情况时，都是作为设计错误处理。</p><p>当一个对象类型作为收集型对象的元对象时，这个对象应该拥有自己处理equals()，和/或处理hashCode()的设计，而且要遵守前面所说 的两种原则。equals()先要查null和是否是同一类型。查同一类型是为了避免出现ClassCastException这样的异常给丢出来。查 null是为了避免出现NullPointerException这样的异常给丢出来。</p>如果你的对象里面容纳的数据过多，那么这两个函数 equals()和hashCode()将会变得效率低。如果对象中拥有无法serialized的数据，equals()有可能在操作中出现错误。想象 一个对象x，它的一个整型数据是transient型（不能被serialize成二进制数据流）。然而equals()和hashCode()都有依靠 这个整型数据，那么，这个对象在serialization之前和之后，是否一样？答案是不一样。因为serialization之前的整型数据是有效的 数据，在serialization之后，这个整型数据的值并没有存储下来，再重新由二进制数据流转换成对象后，两者（对象在serialization 之前和之后）的状态已经不同了。这也是要注意的。<br /><br /><span style="FONT-WEIGHT: bold">知道以上这些能够帮助你：</span><br />1. 进行更好的设计和开发。<br />2. 进行更好的测试案例开发。<br />3. 在面试过程中让面试者对你的学识渊博感到满意。 </div>
		<div class="Content-body">
				<img style="MARGIN: 0px 2px -4px 0px" alt="" src="http://tmsoft.lsxy.com/images/icon_trackback.gif" />
				<strong>引用通告地址:</strong>
				<span id="tbURL" title="点击复制到剪贴板" style="CURSOR: pointer" onclick="CopyText(document.all.tbURL)">
						<a href="http://tmsoft.lsxy.com/trackback.php?tbID=82&amp;extra=9aff4c">http://tmsoft.lsxy.com/trackback.php?tbID=82&amp;extra=9aff4c</a>
				</span>
		</div>
<img src ="http://www.blogjava.net/kyleYang/aggbug/328469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-08-11 08:44 <a href="http://www.blogjava.net/kyleYang/archive/2010/08/11/328469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COOKIE</title><link>http://www.blogjava.net/kyleYang/archive/2010/02/08/312346.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Mon, 08 Feb 2010 09:33:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/02/08/312346.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/312346.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/02/08/312346.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/312346.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/312346.html</trackback:ping><description><![CDATA[
		<div>1.COOKIE<br />HTTP COOKIE实质是服务端与在客户端之间传送的普通HTTP头,可保存也可不保存在客户的硬盘上.如果保存,每一个文件大小不超过4K的文本文件.多个COOKIE可保存到同一个文件中. 如果从编程角度来看,在JSP中COOKIE就是JAVA提供的一个类.常用的方法如下所表示，因为客户端可能不接受COOKIE，所以建议不用它，改用SESSION等其他方式。 </div>
		<div>
				<br />public class cookie <br />{ <br />public String getDomain() //返回该COOKIE的有效域 <br />public int getMaxAge() //返回该COOKIE的有效期,单位为秒 <br />public String getName() //返回该COOKIE的名称 <br />public String getPath() //返回该COOKIE的有效路径 <br />public boolean getSecure() //返回该COOKIE的安全设置 <br />public String getValue() //返回该COOKIE的值 <br />public void setDomain(java.lang.String pattern) //设置该COOKIE的有效域 <br />public void setMaxAge(int expiry) //设置该COOKIE的有效期,单位为秒 <br />public void setPath(java.lang.String uri) //设置该COOKIE的有效路径 <br />public void setSecure(boolean flag) //设置该COOKIE的安全设置 <br />public void setValue(java.lang.String newValue) //设置该COOKIE的值 <br />} <br />一个COOKIE包含以下五部分: </div>
		<div>NAME/VALUE对,设置该COOKIE的名字及它保存的值 <br />COOKIE通常和服务器相关,如果将域设为JAVA.SUN.COM,那么该COOKIE就和这个域相关,只对该网址起作用,当浏览该网址时,浏览器将把该COOKIE的内容发送给服务端,COOKIE是作为HTTP HEADER的一部分被发送的，如果没有设置域,那么COOKIE就只和创建该COOKIE的服务器相关. <br />路径用于指定服务器上可以使用该COOKIE的文件所在的路径,它只对该网址下的该路径下的应用起作用."/"表示服务器上所有目录都可以使用该COOKIE. <br />COOKIE都有一个有效期,有效期默认值为-1,这表示没有保存该COOKIE,当该浏览器退出时,该COOKIE立即失效. <br />安全选项true/false,如果设置为true,那么在服务端与在客户端之间传送该COOKIE的内容时,采用HTTPS协议. <br />如何检查一个客户端是否支持COOKIE的方法: <br />用下面的方法写一个COOKIE到客户端,并确认成功 <br />try <br />{ <br />Cookie c = new Cookie("mycookie","COOKIE TEST"); <br />response.addCookie(c); <br />} <br />catch(Exception e) <br />{ <br />      System.out.println(e); <br />} </div>
		<div>
				<br />然后在一个新的JSP文件中:用下面的方法取客户端的COOKIE到cookies中, 如果cookies.length ==0,说明该客户端的浏览器不支持COOKIE <br />try <br />{ <br />Cookie[] cookies = request.getCookies(); <br />if(cookies.length ==0) <br />{ <br />      System.out.println("not support cookie"); <br />} <br />} <br />catch(Exception e) <br />{ <br />      System.out.println(e); <br />}<br /><br />2.动态INCLUDE <br />用jsp:include动作实现 &lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化，适合用于包含动态页面，并且可以带参数。 <br />静态INCLUDE <br />用include伪码实现,定不会检查所含文件的变化，适用于包含静态页面&lt;%@ include file="included.htm" %&gt; <br />=================================================================== <br />1. 静态include的结果是把其他jsp引入当前jsp,两者合为一体 <br />动态include的结构是两者独立,直到输出时才合并( 看看jsp生成的java文件就可以知道了) <br />2.正是因为这样,动态include的jsp文件独立性很强,是一个单独的jsp文件,需要使用的对象,页面设置,都必须有自己创建,当然,还好它和include它的页面的request范围是一致的. <br />而静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的. </div>
		<div>详细出处参考：<a href="http://www.jb51.net/article/13159.htm">http://www.jb51.net/article/13159.htm</a></div>
<img src ="http://www.blogjava.net/kyleYang/aggbug/312346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-02-08 17:33 <a href="http://www.blogjava.net/kyleYang/archive/2010/02/08/312346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图片压缩和缩略图[JAVA]</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/25/310709.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Mon, 25 Jan 2010 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/25/310709.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/310709.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/25/310709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/310709.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/310709.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近工作需要对服务器上面的文件进行压缩，并且把原来一些缩略图进行压缩。贴出代码片断供大家交流。搜略图实现规定大小画布上缩小图片，方便列表显示。图片压缩提供了2种方法。1、可以自定义压缩比。2、采用ImageIO进行默认压缩（更安全一些，不会出现内存溢出）。														    				private				 				void				 doThumbCo...&nbsp;&nbsp;<a href='http://www.blogjava.net/kyleYang/archive/2010/01/25/310709.html'>阅读全文</a><img src ="http://www.blogjava.net/kyleYang/aggbug/310709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-25 11:30 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/25/310709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 数字格式化：小数点、百分比</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/17/309863.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sun, 17 Jan 2010 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/17/309863.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/309863.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/17/309863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/309863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/309863.html</trackback:ping><description><![CDATA[
		<p>1.Decimalformat df1 = new Decimalformat("####.000"); <br />　　 <br />      System.out.println(df1.format(1234.56));</p>
		<p>     显示：1234.560</p>
		<p>2.Numberformat nf = Numberformat.getPercentInstance(); <br />　　 <br />　 System.out.println(nf.format(0.47));</p>
		<p>     显示：47%</p>
		<p>3.DecimalFormat   df   =   new   DecimalFormat("###,##0.00");</p>
		<p>      System.out.println(nf.format(24.7));</p>
		<p>    显示：24.70</p>
		<p>      System.out.println(nf.format(23123.47));</p>
		<p>    显示：123,23.47</p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/309863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-17 17:13 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/17/309863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对Java配置文件Properties的读取、写入与更新操作</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/17/309862.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sun, 17 Jan 2010 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/17/309862.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/309862.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/17/309862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/309862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/309862.html</trackback:ping><description><![CDATA[当前项目路径是
<p>String filepath=System.getProperty("user.dir");</p><p>对下面的程序很有用...</p><p>/**<br />* 实现对Java配置文件Properties的读取、写入与更新操作<br />*/<br />package test;</p><p>import java.io.BufferedInputStream;<br />import java.io.FileInputStream;<br />import java.io.FileNotFoundException;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.OutputStream;<br />import java.util.Properties;</p><p><br />/**<br />* @author <br />* @version 2008.11.14<br />*/<br />public class SetSystemProperty {<br />    //属性文件的路径<br />    static String profilepath="mail.properties";<br />    /**<br />    * 采用静态方法<br />    */<br />    private static Properties props = new Properties();<br />    static {<br />        try {<br />            props.load(new FileInputStream(profilepath));<br />        } catch (FileNotFoundException e) {<br />            e.printStackTrace();<br />            System.exit(-1);<br />        } catch (IOException e) {        <br />            System.exit(-1);<br />        }<br />    }</p><p>    /**<br />    * 读取属性文件中相应键的值<br />    * @param key<br />    *            主键<br />    * @return String<br />    */<br />    public static String getKeyValue(String key) {<br />        return props.getProperty(key);<br />    }</p><p>    /**<br />    * 根据主键key读取主键的值value<br />    * @param filePath 属性文件路径<br />    * @param key 键名<br />    */ <br />    public static String readValue(String filePath, String key) {<br />        Properties props = new Properties();<br />        try {<br />            InputStream in = new BufferedInputStream(new FileInputStream(<br />                    filePath));<br />            props.load(in);<br />            String value = props.getProperty(key);<br />            System.out.println(key +"键的值是："+ value);<br />            return value;<br />        } catch (Exception e) {<br />            e.printStackTrace();<br />            return null;<br />        }<br />    }<br />    <br />    /**<br />    * 更新（或插入）一对properties信息(主键及其键值)<br />    * 如果该主键已经存在，更新该主键的值；<br />    * 如果该主键不存在，则插件一对键值。<br />    * @param keyname 键名<br />    * @param keyvalue 键值<br />    */ <br />    public static void writeProperties(String keyname,String keyvalue) {        <br />        try {<br />            // 调用 Hashtable 的方法 put，使用 getProperty 方法提供并行性。<br />            // 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。<br />            OutputStream fos = new FileOutputStream(profilepath);<br />            props.setProperty(keyname, keyvalue);<br />            // 以适合使用 load 方法加载到 Properties 表中的格式，<br />            // 将此 Properties 表中的属性列表（键和元素对）写入输出流<br />            props.store(fos, "Update '" + keyname + "' value");<br />        } catch (IOException e) {<br />            System.err.println("属性文件更新错误");<br />        }<br />    }</p><p>    /**<br />    * 更新properties文件的键值对<br />    * 如果该主键已经存在，更新该主键的值；<br />    * 如果该主键不存在，则插件一对键值。<br />    * @param keyname 键名<br />    * @param keyvalue 键值<br />    */ <br />    public void updateProperties(String keyname,String keyvalue) {<br />        try {<br />            props.load(new FileInputStream(profilepath));<br />            // 调用 Hashtable 的方法 put，使用 getProperty 方法提供并行性。<br />            // 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。<br />            OutputStream fos = new FileOutputStream(profilepath);            <br />            props.setProperty(keyname, keyvalue);<br />            // 以适合使用 load 方法加载到 Properties 表中的格式，<br />            // 将此 Properties 表中的属性列表（键和元素对）写入输出流<br />            props.store(fos, "Update '" + keyname + "' value");<br />        } catch (IOException e) {<br />            System.err.println("属性文件更新错误");<br />        }<br />    }<br />    //测试代码<br />    public static void main(String[] args) {<br />        readValue("mail.properties", "MAIL_SERVER_PASSWORD");<br />        writeProperties("MAIL_SERVER_INCOMING", "327@qq.com");        <br />        System.out.println("操作完成");<br />    }<br />}</p><img src ="http://www.blogjava.net/kyleYang/aggbug/309862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-17 17:04 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/17/309862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java反射经典实例</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/14/309547.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Thu, 14 Jan 2010 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/14/309547.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/309547.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/14/309547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/309547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/309547.html</trackback:ping><description><![CDATA[
		<h2 class="post-title">Java反射经典实例 Java Reflection Cookbook</h2>
		<div class="post-body">Java提供了一套机制来动态执行方法和构造方法，以及数组操作等，这套机制就叫——反射。反射机制是如今很多流行框架的实现基础，其中包括Spring、Hibernate等。原理性的问题不是本文的重点，接下来让我们在实例中学习这套精彩的机制。<br /><br />1. 得到某个对象的属性<br /><br /><div style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: rgb(238,238,238)"><font size="2"><span style="COLOR: rgb(0,128,128)">1</span> <span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object getProperty(Object owner, String fieldName) </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br /></span><span style="COLOR: rgb(0,128,128)">2</span> <span style="COLOR: rgb(0,0,0)">    Class ownerClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> owner.getClass();<br /></span><span style="COLOR: rgb(0,128,128)">3</span> <br /><span style="COLOR: rgb(0,128,128)">4</span> <span style="COLOR: rgb(0,0,0)">    Field field </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> ownerClass.getField(fieldName);<br /></span><span style="COLOR: rgb(0,128,128)">5</span> <br /><span style="COLOR: rgb(0,128,128)">6</span> <span style="COLOR: rgb(0,0,0)">    Object property </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> field.get(owner);<br /></span><span style="COLOR: rgb(0,128,128)">7</span> <br /><span style="COLOR: rgb(0,128,128)">8</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> property;<br /></span><span style="COLOR: rgb(0,128,128)">9</span> <span style="COLOR: rgb(0,0,0)">}</span></font></div><br />Class ownerClass = owner.getClass()：得到该对象的Class。<br /><br />Field field = ownerClass.getField(fieldName)：通过Class得到类声明的属性。<br /><br />Object property = field.get(owner)：通过对象得到该属性的实例，如果这个属性是非公有的，这里会报IllegalAccessException。<br /><br /><br /><br />2. 得到某个类的静态属性<br /><br /><div style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: rgb(238,238,238)"><font size="2"><span style="COLOR: rgb(0,128,128)"> 1</span> <span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object getStaticProperty(String className, String fieldName)<br /></span><span style="COLOR: rgb(0,128,128)"> 2</span> <span style="COLOR: rgb(0,0,0)">            </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br /></span><span style="COLOR: rgb(0,128,128)"> 3</span> <span style="COLOR: rgb(0,0,0)">    Class ownerClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> Class.forName(className);<br /></span><span style="COLOR: rgb(0,128,128)"> 4</span> <br /><span style="COLOR: rgb(0,128,128)"> 5</span> <span style="COLOR: rgb(0,0,0)">    Field field </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> ownerClass.getField(fieldName);<br /></span><span style="COLOR: rgb(0,128,128)"> 6</span> <br /><span style="COLOR: rgb(0,128,128)"> 7</span> <span style="COLOR: rgb(0,0,0)">    Object property </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> field.get(ownerClass);<br /></span><span style="COLOR: rgb(0,128,128)"> 8</span> <br /><span style="COLOR: rgb(0,128,128)"> 9</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> property;<br /></span><span style="COLOR: rgb(0,128,128)">10</span> <span style="COLOR: rgb(0,0,0)">}</span></font></div><br /><br />Class ownerClass = Class.forName(className) ：首先得到这个类的Class。<br /><br />Field field = ownerClass.getField(fieldName)：和上面一样，通过Class得到类声明的属性。<br /><br />Object property = field.get(ownerClass) ：这里和上面有些不同，因为该属性是静态的，所以直接从类的Class里取。<br /><br /><br />3. 执行某对象的方法<br /><br /><div style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: rgb(238,238,238)"><font size="2"><span style="COLOR: rgb(0,128,128)"> 1</span> <span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object invokeMethod(Object owner, String methodName, Object[] args) </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br /></span><span style="COLOR: rgb(0,128,128)"> 2</span> <br /><span style="COLOR: rgb(0,128,128)"> 3</span> <span style="COLOR: rgb(0,0,0)">    Class ownerClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> owner.getClass();<br /></span><span style="COLOR: rgb(0,128,128)"> 4</span> <br /><span style="COLOR: rgb(0,128,128)"> 5</span> <span style="COLOR: rgb(0,0,0)">    Class[] argsClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)"> Class[args.length];<br /></span><span style="COLOR: rgb(0,128,128)"> 6</span> <br /><span style="COLOR: rgb(0,128,128)"> 7</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> (</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> i </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">, j </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args.length; i </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)"> j; i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">) {<br /></span><span style="COLOR: rgb(0,128,128)"> 8</span> <span style="COLOR: rgb(0,0,0)">        argsClass[i] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args[i].getClass();<br /></span><span style="COLOR: rgb(0,128,128)"> 9</span> <span style="COLOR: rgb(0,0,0)">    }<br /></span><span style="COLOR: rgb(0,128,128)">10</span> <br /><span style="COLOR: rgb(0,128,128)">11</span> <span style="COLOR: rgb(0,0,0)">    Method method </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> ownerClass.getMethod(methodName, argsClass);<br /></span><span style="COLOR: rgb(0,128,128)">12</span> <br /><span style="COLOR: rgb(0,128,128)">13</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> method.invoke(owner, args);<br /></span><span style="COLOR: rgb(0,128,128)">14</span> <span style="COLOR: rgb(0,0,0)">}</span></font></div><br />Class owner_class = owner.getClass() ：首先还是必须得到这个对象的Class。<br /><br />5～9行：配置参数的Class数组，作为寻找Method的条件。<br /><br />Method method = ownerClass.getMethod(methodName, argsClass)：通过Method名和参数的Class数组得到要执行的Method。<br /><br />method.invoke(owner, args)：执行该Method，invoke方法的参数是执行这个方法的对象，和参数数组。返回值是Object，也既是该方法的返回值。<br /><br /><br />4. 执行某个类的静态方法<br /><br /><div style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: rgb(238,238,238)"><font size="2"><span style="COLOR: rgb(0,128,128)"> 1</span> <span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object invokeStaticMethod(String className, String methodName,<br /></span><span style="COLOR: rgb(0,128,128)"> 2</span> <span style="COLOR: rgb(0,0,0)">            Object[] args) </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br /></span><span style="COLOR: rgb(0,128,128)"> 3</span> <span style="COLOR: rgb(0,0,0)">    Class ownerClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> Class.forName(className);<br /></span><span style="COLOR: rgb(0,128,128)"> 4</span> <br /><span style="COLOR: rgb(0,128,128)"> 5</span> <span style="COLOR: rgb(0,0,0)">    Class[] argsClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)"> Class[args.length];<br /></span><span style="COLOR: rgb(0,128,128)"> 6</span> <br /><span style="COLOR: rgb(0,128,128)"> 7</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> (</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> i </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">, j </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args.length; i </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)"> j; i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">) {<br /></span><span style="COLOR: rgb(0,128,128)"> 8</span> <span style="COLOR: rgb(0,0,0)">        argsClass[i] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args[i].getClass();<br /></span><span style="COLOR: rgb(0,128,128)"> 9</span> <span style="COLOR: rgb(0,0,0)">    }<br /></span><span style="COLOR: rgb(0,128,128)">10</span> <br /><span style="COLOR: rgb(0,128,128)">11</span> <span style="COLOR: rgb(0,0,0)">    Method method </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> ownerClass.getMethod(methodName, argsClass);<br /></span><span style="COLOR: rgb(0,128,128)">12</span> <br /><span style="COLOR: rgb(0,128,128)">13</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> method.invoke(</span><span style="COLOR: rgb(0,0,255)">null</span><span style="COLOR: rgb(0,0,0)">, args);<br /></span><span style="COLOR: rgb(0,128,128)">14</span> <span style="COLOR: rgb(0,0,0)">}</span></font></div><br /><br />基本的原理和实例3相同，不同点是最后一行，invoke的一个参数是null，因为这是静态方法，不需要借助实例运行。<br /><br /><br /><br />5. 新建实例<br /><div style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: rgb(238,238,238)"><font size="2"><span style="COLOR: rgb(0,128,128)"> 1</span> <br /><span style="COLOR: rgb(0,128,128)"> 2</span> <span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object newInstance(String className, Object[] args) </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br /></span><span style="COLOR: rgb(0,128,128)"> 3</span> <span style="COLOR: rgb(0,0,0)">    Class newoneClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> Class.forName(className);<br /></span><span style="COLOR: rgb(0,128,128)"> 4</span> <br /><span style="COLOR: rgb(0,128,128)"> 5</span> <span style="COLOR: rgb(0,0,0)">    Class[] argsClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)"> Class[args.length];<br /></span><span style="COLOR: rgb(0,128,128)"> 6</span> <br /><span style="COLOR: rgb(0,128,128)"> 7</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> (</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> i </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">, j </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args.length; i </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)"> j; i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">) {<br /></span><span style="COLOR: rgb(0,128,128)"> 8</span> <span style="COLOR: rgb(0,0,0)">        argsClass[i] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args[i].getClass();<br /></span><span style="COLOR: rgb(0,128,128)"> 9</span> <span style="COLOR: rgb(0,0,0)">    }<br /></span><span style="COLOR: rgb(0,128,128)">10</span> <br /><span style="COLOR: rgb(0,128,128)">11</span> <span style="COLOR: rgb(0,0,0)">    Constructor cons </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> newoneClass.getConstructor(argsClass);<br /></span><span style="COLOR: rgb(0,128,128)">12</span> <br /><span style="COLOR: rgb(0,128,128)">13</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> cons.newInstance(args);<br /></span><span style="COLOR: rgb(0,128,128)">14</span> <br /><span style="COLOR: rgb(0,128,128)">15</span> <span style="COLOR: rgb(0,0,0)">}</span></font></div><br /><br />这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数，可以直接使用newoneClass.newInstance()来实现。<br /><br />Class newoneClass = Class.forName(className)：第一步，得到要构造的实例的Class。<br /><br />第5～第9行：得到参数的Class数组。<br /><br />Constructor cons = newoneClass.getConstructor(argsClass)：得到构造子。<br /><br />cons.newInstance(args)：新建实例。<br /><br /><br />6. 判断是否为某个类的实例<br /><br /><div style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: rgb(238,238,238)"><font size="2"><span style="COLOR: rgb(0,128,128)">1</span> <span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">boolean</span><span style="COLOR: rgb(0,0,0)"> isInstance(Object obj, Class cls) {<br /></span><span style="COLOR: rgb(0,128,128)">2</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> cls.isInstance(obj);<br /></span><span style="COLOR: rgb(0,128,128)">3</span> <span style="COLOR: rgb(0,0,0)">}</span></font></div><br /><br /><br />7. 得到数组中的某个元素<br /><div style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: rgb(238,238,238)"><font size="2"><span style="COLOR: rgb(0,128,128)">1</span> <span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object getByArray(Object array, </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> index) {<br /></span><span style="COLOR: rgb(0,128,128)">2</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> Array.get(array,index);<br /></span><span style="COLOR: rgb(0,128,128)">3</span> <span style="COLOR: rgb(0,0,0)">}</span></font></div><br /><br /><br />附完整源码：<br /><br /><div style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: rgb(238,238,238)"><font size="2"><span style="COLOR: rgb(0,0,255)">import</span><span style="COLOR: rgb(0,0,0)"> java.lang.reflect.Array;<br /></span><span style="COLOR: rgb(0,0,255)">import</span><span style="COLOR: rgb(0,0,0)"> java.lang.reflect.Constructor;<br /></span><span style="COLOR: rgb(0,0,255)">import</span><span style="COLOR: rgb(0,0,0)"> java.lang.reflect.Field;<br /></span><span style="COLOR: rgb(0,0,255)">import</span><span style="COLOR: rgb(0,0,0)"> java.lang.reflect.Method;<br /><br /><br /></span><span style="COLOR: rgb(0,128,0)">/**</span><span style="COLOR: rgb(0,128,0)"><br /> * Java Reflection Cookbook<br /> *<br /> * </span><span style="COLOR: rgb(128,128,128)">@author</span><span style="COLOR: rgb(0,128,0)"> Michael Lee<br /> * </span><span style="COLOR: rgb(128,128,128)">@since</span><span style="COLOR: rgb(0,128,0)"> 2006-8-23<br /> * </span><span style="COLOR: rgb(128,128,128)">@version</span><span style="COLOR: rgb(0,128,0)"> 0.1a<br /> </span><span style="COLOR: rgb(0,128,0)">*/</span><br /><br /><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">class</span><span style="COLOR: rgb(0,0,0)"> Reflection {<br />    </span><span style="COLOR: rgb(0,128,0)">/**</span><span style="COLOR: rgb(0,128,0)"><br />     * 得到某个对象的公共属性<br />     *<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> owner, fieldName<br />     * </span><span style="COLOR: rgb(128,128,128)">@return</span><span style="COLOR: rgb(0,128,0)"> 该属性对象<br />     * </span><span style="COLOR: rgb(128,128,128)">@throws</span><span style="COLOR: rgb(0,128,0)"> Exception<br />     *<br />     </span><span style="COLOR: rgb(0,128,0)">*/</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object getProperty(Object owner, String fieldName) </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br />        Class ownerClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> owner.getClass();<br /><br />        Field field </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> ownerClass.getField(fieldName);<br /><br />        Object property </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> field.get(owner);<br /><br />        </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> property;<br />    }<br /><br />    </span><span style="COLOR: rgb(0,128,0)">/**</span><span style="COLOR: rgb(0,128,0)"><br />     * 得到某类的静态公共属性<br />     *<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> className   类名<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> fieldName   属性名<br />     * </span><span style="COLOR: rgb(128,128,128)">@return</span><span style="COLOR: rgb(0,128,0)"> 该属性对象<br />     * </span><span style="COLOR: rgb(128,128,128)">@throws</span><span style="COLOR: rgb(0,128,0)"> Exception<br />     </span><span style="COLOR: rgb(0,128,0)">*/</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object getStaticProperty(String className, String fieldName)<br />            </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br />        Class ownerClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> Class.forName(className);<br /><br />        Field field </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> ownerClass.getField(fieldName);<br /><br />        Object property </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> field.get(ownerClass);<br /><br />        </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> property;<br />    }<br /><br /><br />    </span><span style="COLOR: rgb(0,128,0)">/**</span><span style="COLOR: rgb(0,128,0)"><br />     * 执行某对象方法<br />     *<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> owner<br />     *            对象<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> methodName<br />     *            方法名<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> args<br />     *            参数<br />     * </span><span style="COLOR: rgb(128,128,128)">@return</span><span style="COLOR: rgb(0,128,0)"> 方法返回值<br />     * </span><span style="COLOR: rgb(128,128,128)">@throws</span><span style="COLOR: rgb(0,128,0)"> Exception<br />     </span><span style="COLOR: rgb(0,128,0)">*/</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object invokeMethod(Object owner, String methodName, Object[] args)<br />            </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br /><br />        Class ownerClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> owner.getClass();<br /><br />        Class[] argsClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)"> Class[args.length];<br /><br />        </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> (</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> i </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">, j </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args.length; i </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)"> j; i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">) {<br />            argsClass[i] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args[i].getClass();<br />        }<br /><br />        Method method </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> ownerClass.getMethod(methodName, argsClass);<br /><br />        </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> method.invoke(owner, args);<br />    }<br /><br /><br />      </span><span style="COLOR: rgb(0,128,0)">/**</span><span style="COLOR: rgb(0,128,0)"><br />     * 执行某类的静态方法<br />     *<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> className<br />     *            类名<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> methodName<br />     *            方法名<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> args<br />     *            参数数组<br />     * </span><span style="COLOR: rgb(128,128,128)">@return</span><span style="COLOR: rgb(0,128,0)"> 执行方法返回的结果<br />     * </span><span style="COLOR: rgb(128,128,128)">@throws</span><span style="COLOR: rgb(0,128,0)"> Exception<br />     </span><span style="COLOR: rgb(0,128,0)">*/</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object invokeStaticMethod(String className, String methodName,<br />            Object[] args) </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br />        Class ownerClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> Class.forName(className);<br /><br />        Class[] argsClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)"> Class[args.length];<br /><br />        </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> (</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> i </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">, j </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args.length; i </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)"> j; i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">) {<br />            argsClass[i] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args[i].getClass();<br />        }<br /><br />        Method method </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> ownerClass.getMethod(methodName, argsClass);<br /><br />        </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> method.invoke(</span><span style="COLOR: rgb(0,0,255)">null</span><span style="COLOR: rgb(0,0,0)">, args);<br />    }<br /><br /><br /><br />    </span><span style="COLOR: rgb(0,128,0)">/**</span><span style="COLOR: rgb(0,128,0)"><br />     * 新建实例<br />     *<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> className<br />     *            类名<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> args<br />     *            构造函数的参数<br />     * </span><span style="COLOR: rgb(128,128,128)">@return</span><span style="COLOR: rgb(0,128,0)"> 新建的实例<br />     * </span><span style="COLOR: rgb(128,128,128)">@throws</span><span style="COLOR: rgb(0,128,0)"> Exception<br />     </span><span style="COLOR: rgb(0,128,0)">*/</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object newInstance(String className, Object[] args) </span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)"> Exception {<br />        Class newoneClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> Class.forName(className);<br /><br />        Class[] argsClass </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)"> Class[args.length];<br /><br />        </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> (</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> i </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">, j </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args.length; i </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)"> j; i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">) {<br />            argsClass[i] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> args[i].getClass();<br />        }<br /><br />        Constructor cons </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> newoneClass.getConstructor(argsClass);<br /><br />        </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> cons.newInstance(args);<br /><br />    }<br /><br /><br />    <br />    </span><span style="COLOR: rgb(0,128,0)">/**</span><span style="COLOR: rgb(0,128,0)"><br />     * 是不是某个类的实例<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> obj 实例<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> cls 类<br />     * </span><span style="COLOR: rgb(128,128,128)">@return</span><span style="COLOR: rgb(0,128,0)"> 如果 obj 是此类的实例，则返回 true<br />     </span><span style="COLOR: rgb(0,128,0)">*/</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">boolean</span><span style="COLOR: rgb(0,0,0)"> isInstance(Object obj, Class cls) {<br />        </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> cls.isInstance(obj);<br />    }<br />    <br />    </span><span style="COLOR: rgb(0,128,0)">/**</span><span style="COLOR: rgb(0,128,0)"><br />     * 得到数组中的某个元素<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> array 数组<br />     * </span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)"> index 索引<br />     * </span><span style="COLOR: rgb(128,128,128)">@return</span><span style="COLOR: rgb(0,128,0)"> 返回指定数组对象中索引组件的值<br />     </span><span style="COLOR: rgb(0,128,0)">*/</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object getByArray(Object array, </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> index) {<br />        </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> Array.get(array,index);<br />    }<br />}</span></font></div></div>
		<br />
<img src ="http://www.blogjava.net/kyleYang/aggbug/309547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-14 21:32 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/14/309547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中的过滤器Filter的使用配置</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/08/308744.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Fri, 08 Jan 2010 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/08/308744.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/308744.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/08/308744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/308744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/308744.html</trackback:ping><description><![CDATA[    import java.io.IOException;<br />　　import java.io.PrintWriter;<br />　　import javax.servlet.Filter;<br />　　import javax.servlet.FilterChain;<br />　　import javax.servlet.FilterConfig;<br />　　import javax.servlet.RequestDispatcher;<br />　　import javax.servlet.ServletException;<br />　　import javax.servlet.ServletRequest;<br />　　import javax.servlet.ServletResponse;<br />　　import javax.servlet.http.HttpServlet;<br />　　import javax.servlet.http.HttpServletRequest;<br />　　import javax.servlet.http.HttpServletResponse;<br />　　import javax.servlet.http.HttpSession;<br />　　/**<br />　　* 过滤器使用：用户没用登录，不可以在浏览器输入地址访问页面<br />　　* @author Administrator<br />　　*<br />　　*/<br />　　public class OnlineFilter extends HttpServlet implements Filter {<br /> 　　public void doFilter(ServletRequest request, ServletResponse response,<br />  　　FilterChain chain) throws IOException, ServletException {<br />  　　RequestDispatcher dispatcher = request.getRequestDispatcher("Login.jsp");<br />  　　HttpServletRequest req =(HttpServletRequest)request;<br />  　　HttpServletResponse res =(HttpServletResponse)response;<br />  　　HttpSession session =req.getSession(true);<br />  　　//从session 里面获取用户名的信息<br />  　　String user =(String)session.getAttribute("user");<br />  　　//判断如果没有取到用户信息，就跳转到登陆页面，提示用户进行登陆<br />      if(user == null || "".equals(user)){<br />   　　//跳转到登陆的页面，进行用户登录<br />   　　dispatcher.forward(request,response);<br />   　　System.out.println("用户没有登录，请登陆！");<br />  　　}else{<br />  　　 System.out.println("用户已经登陆成功，允许继续操作！");<br />  　　}<br />  　　chain.doFilter(request, response);<br /> 　　}<br /> 　　public void init(FilterConfig arg0) throws ServletException {<br /> 　　}<br /> 　　/**<br /> 　　* Destruction of the servlet. &lt;br&gt;<br /> 　　*/<br /> 　　public void destroy() {<br /> 　　super.destroy(); // Just puts "destroy" string in log<br /> 　　}<br /> 　　public void init() throws ServletException {<br /> 　　}<br />　　}<br />　　Web.xml配置<br />　　&lt;!-- 过滤器的  过滤用户登陆的session对象 --&gt;<br />　　&lt;filter&gt;<br />　　&lt;filter-name&gt;sessionFilter&lt;/filter-name&gt;<br />　　&lt;filter-class&gt;biz.sdna.cbrc.util.OnlineFilter&lt;/filter-class&gt;<br />　　&lt;/filter&gt;<br />　　&lt;filter-mapping&gt;<br />　　&lt;filter-name&gt;sessionFilter&lt;/filter-name&gt;<br />　　&lt;url-pattern&gt;/jsp/*&lt;/url-pattern&gt;<br />　　&lt;/filter-mapping&gt;<img src ="http://www.blogjava.net/kyleYang/aggbug/308744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-08 17:07 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/08/308744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java读写Excel</title><link>http://www.blogjava.net/kyleYang/archive/2009/12/19/306700.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sat, 19 Dec 2009 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/12/19/306700.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/306700.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/12/19/306700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/306700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/306700.html</trackback:ping><description><![CDATA[
		<p>本文主要向你演示如何使用JavaExcel API来读写Excel文件。关于JavaExcel API，这是一个开源的lib库。其相关的feature如下：</p>
		<p>支持Excel 95, 97, 2000, XP, 2003 的制表页。 <br />可以读写相关的Excel公式 （仅支持Excel 97 及以后版本） <br />可以生成 Excel 2000 格式的xls文件。 <br />支持字体，数字和日期格式。 <br />支持单元格的阴影，边框和颜色。 <br />可以修改已存在的制表页。 <br />国际化多语言集。(公式目前支持，英文，法文，西班牙文和德文） <br />支持图表拷贝。 <br />支持图片的插入和复制。 <br />日志生成可以使用Jakarta Commons Logging, log4j, JDK 1.4 Logger, 等。 <br />更多…… <br />你可以在这里下载：<a href="http://jexcelapi.sourceforge.net/">http://jexcelapi.sourceforge.net/</a>，然后，把jxl.jar加到你的Java的classpath中。</p>
		<p>下面是两段例程，一段是如何创建Excel，一段是如何读取Excel。</p>
		<p>
				<br />创建Excel</p>
		<p> packagewriter;  </p>
		<p>    </p>
		<p> importjava.io.File;  </p>
		<p> importjava.io.IOException;  </p>
		<p> importjava.util.Locale;  </p>
		<p>    </p>
		<p> importjxl.CellView;  </p>
		<p> importjxl.Workbook;  </p>
		<p> importjxl.WorkbookSettings;  </p>
		<p> importjxl.format.UnderlineStyle;  </p>
		<p> importjxl.write.Formula;  </p>
		<p> importjxl.write.Label;  </p>
		<p> importjxl.write.Number;  </p>
		<p> importjxl.write.WritableCellFormat;  </p>
		<p> importjxl.write.WritableFont;  </p>
		<p> importjxl.write.WritableSheet;  </p>
		<p> importjxl.write.WritableWorkbook;  </p>
		<p> importjxl.write.WriteException;  </p>
		<p> importjxl.write.biff.RowsExceededException;  </p>
		<p>    </p>
		<p> publicclassWriteExcel {  </p>
		<p>    </p>
		<p>     privateWritableCellFormat timesBoldUnderline;  </p>
		<p>     privateWritableCellFormat times;  </p>
		<p>     privateString inputFile;  </p>
		<p>    </p>
		<p> publicvoidsetOutputFile(String inputFile) {  </p>
		<p>     this.inputFile = inputFile;  </p>
		<p>     }  </p>
		<p>    </p>
		<p>     publicvoidwrite() throwsIOException, WriteException {  </p>
		<p>         File file = newFile(inputFile);  </p>
		<p>         WorkbookSettings wbSettings = newWorkbookSettings();  </p>
		<p>    </p>
		<p>         wbSettings.setLocale(newLocale("en", "EN"));  </p>
		<p>    </p>
		<p>         WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings);  </p>
		<p>         workbook.createSheet("Report", 0);  </p>
		<p>         WritableSheet excelSheet = workbook.getSheet(0);  </p>
		<p>         createLabel(excelSheet);  </p>
		<p>         createContent(excelSheet);  </p>
		<p>    </p>
		<p>         workbook.write();  </p>
		<p>         workbook.close();  </p>
		<p>     }  </p>
		<p>    </p>
		<p>     privatevoidcreateLabel(WritableSheet sheet)  </p>
		<p>             throwsWriteException {  </p>
		<p>         // Lets create a times font  </p>
		<p>         WritableFont times10pt = newWritableFont(WritableFont.TIMES, 10);  </p>
		<p>         // Define the cell format  </p>
		<p>         times = newWritableCellFormat(times10pt);  </p>
		<p>         // Lets automatically wrap the cells  </p>
		<p>         times.setWrap(true);  </p>
		<p>    </p>
		<p>         // Create create a bold font with unterlines  </p>
		<p>         WritableFont times10ptBoldUnderline = newWritableFont(  </p>
		<p>                 WritableFont.TIMES, 10, WritableFont.BOLD, false,  </p>
		<p>                 UnderlineStyle.SINGLE);  </p>
		<p>         timesBoldUnderline = newWritableCellFormat(times10ptBoldUnderline);  </p>
		<p>         // Lets automatically wrap the cells  </p>
		<p>         timesBoldUnderline.setWrap(true);  </p>
		<p>    </p>
		<p>         CellView cv = newCellView();  </p>
		<p>         cv.setFormat(times);  </p>
		<p>         cv.setFormat(timesBoldUnderline);  </p>
		<p>         cv.setAutosize(true);  </p>
		<p>    </p>
		<p>         // Write a few headers  </p>
		<p>         addCaption(sheet, 0, 0, "Header 1");  </p>
		<p>         addCaption(sheet, 1, 0, "This is another header");  </p>
		<p>    </p>
		<p>     }  </p>
		<p>    </p>
		<p>     privatevoidcreateContent(WritableSheet sheet) throwsWriteException,  </p>
		<p>             RowsExceededException {  </p>
		<p>         // Write a few number  </p>
		<p>         for(inti = 1; i &lt; 10; i++) {  </p>
		<p>             // First column  </p>
		<p>             addNumber(sheet, 0, i, i + 10);  </p>
		<p>             // Second column  </p>
		<p>             addNumber(sheet, 1, i, i * i);  </p>
		<p>         }  </p>
		<p>         // Lets calculate the sum of it  </p>
		<p>         StringBuffer buf = newStringBuffer();  </p>
		<p>         buf.append("SUM(A2:A10)");  </p>
		<p>         Formula f = newFormula(0, 10, buf.toString());  </p>
		<p>         sheet.addCell(f);  </p>
		<p>         buf = newStringBuffer();  </p>
		<p>         buf.append("SUM(B2:B10)");  </p>
		<p>         f = newFormula(1, 10, buf.toString());  </p>
		<p>         sheet.addCell(f);  </p>
		<p>    </p>
		<p>         // Now a bit of text  </p>
		<p>         for(inti = 12; i &lt; 20; i++) {  </p>
		<p>             // First column  </p>
		<p>             addLabel(sheet, 0, i, "Boring text "+ i);  </p>
		<p>             // Second column  </p>
		<p>             addLabel(sheet, 1, i, "Another text");  </p>
		<p>         }  </p>
		<p>     }  </p>
		<p>    </p>
		<p>     privatevoidaddCaption(WritableSheet sheet, intcolumn, introw, String s)  </p>
		<p>             throwsRowsExceededException, WriteException {  </p>
		<p>         Label label;  </p>
		<p>         label = newLabel(column, row, s, timesBoldUnderline);  </p>
		<p>         sheet.addCell(label);  </p>
		<p>     }  </p>
		<p>    </p>
		<p>     privatevoidaddNumber(WritableSheet sheet, intcolumn, introw,  </p>
		<p>             Integer integer) throwsWriteException, RowsExceededException {  </p>
		<p>         Number number;  </p>
		<p>         number = newNumber(column, row, integer, times);  </p>
		<p>         sheet.addCell(number);  </p>
		<p>     }  </p>
		<p>    </p>
		<p>     privatevoidaddLabel(WritableSheet sheet, intcolumn, introw, String s)  </p>
		<p>             throwsWriteException, RowsExceededException {  </p>
		<p>         Label label;  </p>
		<p>         label = newLabel(column, row, s, times);  </p>
		<p>         sheet.addCell(label);  </p>
		<p>     }  </p>
		<p>    </p>
		<p>     publicstaticvoidmain(String[] args) throwsWriteException, IOException {  </p>
		<p>         WriteExcel test = newWriteExcel();  </p>
		<p>         test.setOutputFile("c:/temp/lars.xls");  </p>
		<p>         test.write();  </p>
		<p>         System.out  </p>
		<p>                 .println("Please check the result file under c:/temp/lars.xls ");  </p>
		<p>     }  </p>
		<p> } </p>
		<p>
				<br />读取Excel</p>
		<p> packagereader;  </p>
		<p>    </p>
		<p> importjava.io.File;  </p>
		<p> importjava.io.IOException;  </p>
		<p>    </p>
		<p> importjxl.Cell;  </p>
		<p> importjxl.CellType;  </p>
		<p> importjxl.Sheet;  </p>
		<p> importjxl.Workbook;  </p>
		<p> importjxl.read.biff.BiffException;  </p>
		<p>    </p>
		<p> publicclassReadExcel {  </p>
		<p>    </p>
		<p>     privateString inputFile;  </p>
		<p>    </p>
		<p>     publicvoidsetInputFile(String inputFile) {  </p>
		<p>         this.inputFile = inputFile;  </p>
		<p>     }  </p>
		<p>    </p>
		<p>     publicvoidread() throwsIOException  {  </p>
		<p>         File inputWorkbook = newFile(inputFile);  </p>
		<p>         Workbook w;  </p>
		<p>         try{  </p>
		<p>             w = Workbook.getWorkbook(inputWorkbook);  </p>
		<p>             // Get the first sheet  </p>
		<p>             Sheet sheet = w.getSheet(0);  </p>
		<p>             // Loop over first 10 column and lines  </p>
		<p>    </p>
		<p>             for(intj = 0; j &lt; sheet.getColumns(); j++) {  </p>
		<p>                 for(inti = 0; i &lt; sheet.getRows(); i++) {  </p>
		<p>                     Cell cell = sheet.getCell(j, i);  </p>
		<p>                     CellType type = cell.getType();  </p>
		<p>                     if(cell.getType() == CellType.LABEL) {  </p>
		<p>                         System.out.println("I got a label " </p>
		<p>                                 + cell.getContents());  </p>
		<p>                     }  </p>
		<p>    </p>
		<p>                     if(cell.getType() == CellType.NUMBER) {  </p>
		<p>                         System.out.println("I got a number " </p>
		<p>                                 + cell.getContents());  </p>
		<p>                     }  </p>
		<p>    </p>
		<p>                 }  </p>
		<p>             }  </p>
		<p>         } catch(BiffException e) {  </p>
		<p>             e.printStackTrace();  </p>
		<p>         }  </p>
		<p>     }  </p>
		<p>     publicstaticvoidmain(String[] args) throwsIOException {  </p>
		<p>         ReadExcel test = newReadExcel();  </p>
		<p>         test.setInputFile("c:/temp/lars.xls");  </p>
		<p>         test.read();  </p>
		<p>     }  </p>
		<p> } <br /></p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/306700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-12-19 23:46 <a href="http://www.blogjava.net/kyleYang/archive/2009/12/19/306700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中的堆内存与栈内存分配浅析</title><link>http://www.blogjava.net/kyleYang/archive/2009/12/11/305612.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Fri, 11 Dec 2009 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/12/11/305612.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/305612.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/12/11/305612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/305612.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/305612.html</trackback:ping><description><![CDATA[
		<p>      Java 把内存划分成两种：一种是栈内存，另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配，当在一段代码块定义一个变量时，Java 就在栈中为这个变量分配内存空间，当超过变量的作用域后，Java 会自动释放掉为该变量分配的内存空间，该内存空间可以立即被另作它用。</p>
		<p>      堆内存用来存放由 new 创建的对象和数组，在堆中分配的内存，由 Java 虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或者对象之后，还可以在栈中定义一个特殊的变量，让栈中的这个变量的取值等于数组或对象在堆内存中的首地址，栈中的这个变量就成了数组或对象的引用变量，以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象，引用变量就相当于是为数组或者对象起的一个名称。引用变量是普通的变量，定义时在栈中分配，引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配，即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外，数组和对象本身占据的内存不会被释放，数组和对象在没有引用变量指向它的时候，才变为垃圾，不能在被使用，但仍然占据内存空间不放，在随后的一个不确定的时间被垃圾回收器收走（释放掉）。</p>
		<p>      这也是 Java 比较占内存的原因,实际上，栈中的变量指向堆内存中的变量，这就是 Java 中的指针！</p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/305612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-12-11 17:26 <a href="http://www.blogjava.net/kyleYang/archive/2009/12/11/305612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 图片切割,缩放,转换类型</title><link>http://www.blogjava.net/kyleYang/archive/2009/12/07/305002.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Mon, 07 Dec 2009 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/12/07/305002.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/305002.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/12/07/305002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/305002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/305002.html</trackback:ping><description><![CDATA[
		<p>import java.io.*;<br />import java.awt.*;<br />import java.awt.image.*;<br />import java.awt.Graphics;<br />import java.awt.color.ColorSpace;<br />import javax.imageio.ImageIO;</p>
		<p>public class ImageCut {<br /> /**<br />  * 缩放图像<br />  * <br />  * @param srcImageFile<br />  *            源图像文件地址<br />  * @param result<br />  *            缩放后的图像地址<br />  * @param scale<br />  *            缩放比例<br />  * @param flag<br />  *            缩放选择:true 放大; false 缩小;<br />  */<br /> public static void scale(String srcImageFile, String result, int scale,<br />   boolean flag) {<br />  try {<br />   BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件<br />   int width = src.getWidth(); // 得到源图宽<br />   int height = src.getHeight(); // 得到源图长<br />   if (flag) {<br />    // 放大<br />    width = width * scale;<br />    height = height * scale;<br />   } else {<br />    // 缩小<br />    width = width / scale;<br />    height = height / scale;<br />   }<br />   Image image = src.getScaledInstance(width, height,<br />     Image.SCALE_DEFAULT);<br />   BufferedImage tag = new BufferedImage(width, height,<br />     BufferedImage.TYPE_INT_RGB);<br />   Graphics g = tag.getGraphics();<br />   g.drawImage(image, 0, 0, null); // 绘制缩小后的图<br />   g.dispose();<br />   ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流<br />  } catch (IOException e) {<br />   e.printStackTrace();<br />  }<br /> }</p>
		<p> /**<br />  * 图像切割<br />  * <br />  * @param srcImageFile<br />  *            源图像地址<br />  * @param descDir<br />  *            切片目标文件夹<br />  * @param destWidth<br />  *            目标切片宽度<br />  * @param destHeight<br />  *            目标切片高度<br />  */<br /> public static void cut(String srcImageFile, String descDir, int destWidth,<br />   int destHeight) {<br />  try {<br />   Image img;<br />   ImageFilter cropFilter;<br />   // 读取源图像<br />   BufferedImage bi = ImageIO.read(new File(srcImageFile));<br />   int srcWidth = bi.getHeight(); // 源图宽度<br />   int srcHeight = bi.getWidth(); // 源图高度<br />   if (srcWidth &gt; destWidth &amp;&amp; srcHeight &gt; destHeight) {<br />    Image image = bi.getScaledInstance(srcWidth, srcHeight,<br />      Image.SCALE_DEFAULT);<br />    destWidth = 200; // 切片宽度<br />    destHeight = 150; // 切片高度<br />    int cols = 0; // 切片横向数量<br />    int rows = 0; // 切片纵向数量<br />    // 计算切片的横向和纵向数量<br />    if (srcWidth % destWidth == 0) {<br />     cols = srcWidth / destWidth;<br />    } else {<br />     cols = (int) Math.floor(srcWidth / destWidth) + 1;<br />    }<br />    if (srcHeight % destHeight == 0) {<br />     rows = srcHeight / destHeight;<br />    } else {<br />     rows = (int) Math.floor(srcHeight / destHeight) + 1;<br />    }<br />    // 循环建立切片<br />    // 改进的想法:是否可用多线程加快切割速度<br />    for (int i = 0; i &lt; rows; i++) {<br />     for (int j = 0; j &lt; cols; j++) {<br />      // 四个参数分别为图像起点坐标和宽高<br />      // 即: CropImageFilter(int x,int y,int width,int height)<br />      cropFilter = new CropImageFilter(j * 200, i * 150,<br />        destWidth, destHeight);<br />      img = Toolkit.getDefaultToolkit().createImage(<br />        new FilteredImageSource(image.getSource(),<br />          cropFilter));<br />      BufferedImage tag = new BufferedImage(destWidth,<br />        destHeight, BufferedImage.TYPE_INT_RGB);<br />      Graphics g = tag.getGraphics();<br />      g.drawImage(img, 0, 0, null); // 绘制缩小后的图<br />      g.dispose();<br />      // 输出为文件<br />      ImageIO.write(tag, "JPEG", new File(descDir<br />        + "pre_map_" + i + "_" + j + ".jpg"));<br />     }<br />    }<br />   }<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br /> }</p>
		<p> /**<br />  * 图像类型转换 GIF-&gt;JPG GIF-&gt;PNG PNG-&gt;JPG PNG-&gt;GIF(X)<br />  */<br /> public static void convert(String source, String result) {<br />  try {<br />   File f = new File(source);<br />   f.canRead();<br />   f.canWrite();<br />   BufferedImage src = ImageIO.read(f);<br />   ImageIO.write(src, "JPG", new File(result));<br />  } catch (Exception e) {<br />   // TODO Auto-generated catch block<br />   e.printStackTrace();<br />  }<br /> }</p>
		<p> /**<br />  * 彩色转为黑白<br />  * <br />  * @param source<br />  * @param result<br />  */<br /> public static void gray(String source, String result) {<br />  try {<br />   BufferedImage src = ImageIO.read(new File(source));<br />   ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);<br />   ColorConvertOp op = new ColorConvertOp(cs, null);<br />   src = op.filter(src, null);<br />   ImageIO.write(src, "JPEG", new File(result));<br />  } catch (IOException e) {<br />   e.printStackTrace();<br />  }<br /> }</p>
		<p> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />     cut("D:/logo.gif", "D:/", 20, 15);<br />     convert("D:/logo.gif", "D:/temp.png");<br /> }<br />}</p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/305002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-12-07 15:03 <a href="http://www.blogjava.net/kyleYang/archive/2009/12/07/305002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP连接远程FTP服务器，生成缩略图</title><link>http://www.blogjava.net/kyleYang/archive/2009/12/07/305000.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Mon, 07 Dec 2009 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/12/07/305000.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/305000.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/12/07/305000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/305000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/305000.html</trackback:ping><description><![CDATA[需求是这样的：<br />
图片文件放在远程FTP服务器上，图片是用作宣传的，很大。用户只能访问web服务器，用户需要在web上先预览图片的缩略图，然后点击链接下载该图片。<br />
<br />
目前有两种解决方案<br />
第一种方案，通过web服务器的jsp去连接ftp客户端，读取到远程FTP服务器上的图片，生成缩略图，返回到页面，然后用户选择想下载的图片，再一次通过jsp连接ftp下载到客户端。<br />
示例代码如下：<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0,0,0)">&lt;%--</span><span style="color: rgb(0,0,0)">&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;&nbsp;&nbsp;:&nbsp;img<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Created&nbsp;on&nbsp;:&nbsp;</span><span style="color: rgb(0,0,0)">2007</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">10</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">30</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">:</span><span style="color: rgb(0,0,0)">02</span><span style="color: rgb(0,0,0)">:</span><span style="color: rgb(0,0,0)">28</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;autumn<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">--%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">&lt;%</span><span style="color: rgb(0,0,0)">@page&nbsp;contentType</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">text/html</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;pageEncoding</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">UTF-8</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">&lt;%</span><span style="color: rgb(0,0,0)">@&nbsp;page&nbsp;</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">java.awt.image.BufferedImage</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">&lt;%</span><span style="color: rgb(0,0,0)">@&nbsp;page&nbsp;</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">java.awt.*</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">&lt;%</span><span style="color: rgb(0,0,0)">@&nbsp;page&nbsp;</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">com.sun.image.codec.jpeg.*</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">&lt;%</span><span style="color: rgb(0,0,0)">@&nbsp;page&nbsp;</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">sun.net.ftp.FtpClient</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">&lt;%</span><span style="color: rgb(0,0,0)">@&nbsp;page&nbsp;</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">sun.net.TelnetInputStream</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">&lt;%</span><span style="color: rgb(0,0,0)">@&nbsp;page&nbsp;</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">java.io.ByteArrayOutputStream</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">&lt;%</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />String&nbsp;path&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;request.getParameter(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">path</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img id="_474_2023_Open_Image" onclick="this.style.display='none'; document.getElementById('_474_2023_Open_Text').style.display='none'; document.getElementById('_474_2023_Closed_Image').style.display='inline'; document.getElementById('_474_2023_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_474_2023_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_474_2023_Closed_Text').style.display='none'; document.getElementById('_474_2023_Open_Image').style.display='inline'; document.getElementById('_474_2023_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: rgb(0,0,255)">try</span><span style="color: rgb(0,0,0)">&nbsp;</span><span id="_474_2023_Closed_Text" style="border-right: rgb(128,128,128) 1px solid; border-top: rgb(128,128,128) 1px solid; display: none; border-left: rgb(128,128,128) 1px solid; border-bottom: rgb(128,128,128) 1px solid; background-color: rgb(255,255,255)">...</span><span id="_474_2023_Open_Text"><span style="color: rgb(0,0,0)">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;response.flushBuffer();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;out.clear();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;out&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;pageContext.pushBody();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;out.clear();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;response.setContentType(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">image/jpg</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;response.addHeader(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">pragma</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">NO-cache</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;response.addHeader(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Cache-Control</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">no-cache</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;response.addDateHeader(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Expries</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;<br />
<img id="_743_754_Open_Image" onclick="this.style.display='none'; document.getElementById('_743_754_Open_Text').style.display='none'; document.getElementById('_743_754_Closed_Image').style.display='inline'; document.getElementById('_743_754_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_743_754_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_743_754_Closed_Text').style.display='none'; document.getElementById('_743_754_Open_Image').style.display='inline'; document.getElementById('_743_754_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;</span><span id="_743_754_Closed_Text" style="border-right: rgb(128,128,128) 1px solid; border-top: rgb(128,128,128) 1px solid; display: none; border-left: rgb(128,128,128) 1px solid; border-bottom: rgb(128,128,128) 1px solid; background-color: rgb(255,255,255)">/**/</span><span id="_743_754_Open_Text"><span style="color: rgb(0,128,0)">/*</span><span style="color: rgb(0,128,0)">连接ftp服务器</span><span style="color: rgb(0,128,0)">*/</span></span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;FtpClient&nbsp;fc&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;FtpClient();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;fc.openServer(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">127.0.0.1</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">连接ftp服务器，参数为ftp服务器地址</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;fc.login(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">test</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">test</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">登录ftp服务器，参数为ftp用户名密码</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;fc.binary();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">转成二进制模式</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;TelnetInputStream&nbsp;bis&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;fc.get(path);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">获取文件，返回输入流</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;BufferedImage&nbsp;image&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;javax.imageio.ImageIO.read(bis);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;bis.close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">关闭输入流</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;fc.closeServer();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">关闭服务器连接</span><span style="color: rgb(0,128,0)"><br />
<img id="_1213_1221_Open_Image" onclick="this.style.display='none'; document.getElementById('_1213_1221_Open_Text').style.display='none'; document.getElementById('_1213_1221_Closed_Image').style.display='inline'; document.getElementById('_1213_1221_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_1213_1221_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1213_1221_Closed_Text').style.display='none'; document.getElementById('_1213_1221_Open_Image').style.display='inline'; document.getElementById('_1213_1221_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;</span><span id="_1213_1221_Closed_Text" style="border-right: rgb(128,128,128) 1px solid; border-top: rgb(128,128,128) 1px solid; display: none; border-left: rgb(128,128,128) 1px solid; border-bottom: rgb(128,128,128) 1px solid; background-color: rgb(255,255,255)">/**/</span><span id="_1213_1221_Open_Text"><span style="color: rgb(0,128,0)">/*</span><span style="color: rgb(0,128,0)">生成缩略图</span><span style="color: rgb(0,128,0)">*/</span></span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">float</span><span style="color: rgb(0,0,0)">&nbsp;tag_w</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">80</span><span style="color: rgb(0,0,0)">;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">float</span><span style="color: rgb(0,0,0)">&nbsp;tag_h</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">60</span><span style="color: rgb(0,0,0)">;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;old_w</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">image.getWidth(</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">得到源图宽度</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;old_h</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">image.getHeight(</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">得到源图高度</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;new_w</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">缩略图的宽度</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;new_h</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">缩略图的高度</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">float</span><span style="color: rgb(0,0,0)">&nbsp;tempdouble;<br />
<img id="_1500_1532_Open_Image" onclick="this.style.display='none'; document.getElementById('_1500_1532_Open_Text').style.display='none'; document.getElementById('_1500_1532_Closed_Image').style.display='inline'; document.getElementById('_1500_1532_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_1500_1532_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1500_1532_Closed_Text').style.display='none'; document.getElementById('_1500_1532_Open_Image').style.display='inline'; document.getElementById('_1500_1532_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">(old_w</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">old_h)</span><span id="_1500_1532_Closed_Text" style="border-right: rgb(128,128,128) 1px solid; border-top: rgb(128,128,128) 1px solid; display: none; border-left: rgb(128,128,128) 1px solid; border-bottom: rgb(128,128,128) 1px solid; background-color: rgb(255,255,255)">...</span><span id="_1500_1532_Open_Text"><span style="color: rgb(0,0,0)">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;tempdouble</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">old_w</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">tag_w;<br />
<img id="_1537_1569_Open_Image" onclick="this.style.display='none'; document.getElementById('_1537_1569_Open_Text').style.display='none'; document.getElementById('_1537_1569_Closed_Image').style.display='inline'; document.getElementById('_1537_1569_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_1537_1569_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1537_1569_Closed_Text').style.display='none'; document.getElementById('_1537_1569_Open_Image').style.display='inline'; document.getElementById('_1537_1569_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;}</span></span><span style="color: rgb(0,0,255)">else</span><span id="_1537_1569_Closed_Text" style="border-right: rgb(128,128,128) 1px solid; border-top: rgb(128,128,128) 1px solid; display: none; border-left: rgb(128,128,128) 1px solid; border-bottom: rgb(128,128,128) 1px solid; background-color: rgb(255,255,255)">...</span><span id="_1537_1569_Open_Text"><span style="color: rgb(0,0,0)">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;tempdouble</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">old_h</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">tag_h;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;}</span></span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;new_w</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">Math.round(old_w</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">tempdouble);&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">计算缩略图高度</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;new_h</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">Math.round(old_h</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">tempdouble);&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">计算缩略图宽度</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;BufferedImage&nbsp;tag&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;tag.getGraphics().drawImage(image,</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">,new_w,new_h,</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">绘制缩小后的图</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0,0,0)">&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;ServletOutputStream&nbsp;outStream&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;response.getOutputStream();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;JPEGImageEncoder&nbsp;encoder&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">JPEGCodec.createJPEGEncoder(outStream);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;encoder.encode(tag);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;outStream.close();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;response.reset();<br />
<img id="_2046_2056_Open_Image" onclick="this.style.display='none'; document.getElementById('_2046_2056_Open_Text').style.display='none'; document.getElementById('_2046_2056_Closed_Image').style.display='inline'; document.getElementById('_2046_2056_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_2046_2056_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2046_2056_Closed_Text').style.display='none'; document.getElementById('_2046_2056_Open_Image').style.display='inline'; document.getElementById('_2046_2056_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />}</span></span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">catch</span><span style="color: rgb(0,0,0)">&nbsp;(Exception&nbsp;ex)&nbsp;</span><span id="_2046_2056_Closed_Text" style="border-right: rgb(128,128,128) 1px solid; border-top: rgb(128,128,128) 1px solid; display: none; border-left: rgb(128,128,128) 1px solid; border-bottom: rgb(128,128,128) 1px solid; background-color: rgb(255,255,255)">...</span><span id="_2046_2056_Open_Text"><span style="color: rgb(0,0,0)">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">异常处理</span><span style="color: rgb(0,128,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: rgb(0,0,0)">}</span></span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">%&gt;</span></div>
</div>
<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<div><img id="_2_90_Open_Image" onclick="this.style.display='none'; document.getElementById('_2_90_Open_Text').style.display='none'; document.getElementById('_2_90_Closed_Image').style.display='inline'; document.getElementById('_2_90_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_2_90_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2_90_Closed_Text').style.display='none'; document.getElementById('_2_90_Open_Image').style.display='inline'; document.getElementById('_2_90_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0,0,0); background-color: rgb(255,255,0)">&lt;%</span><span id="_2_90_Closed_Text" style="border-right: rgb(128,128,128) 1px solid; border-top: rgb(128,128,128) 1px solid; display: none; border-left: rgb(128,128,128) 1px solid; border-bottom: rgb(128,128,128) 1px solid; background-color: rgb(255,255,255)">...</span><span id="_2_90_Open_Text"><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">--</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;&nbsp;&nbsp;:&nbsp;main<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Created&nbsp;</span><span style="color: rgb(0,0,255); background-color: rgb(245,245,245)">on</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">&nbsp;:&nbsp;</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">2007</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">-</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">10</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">-</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">30</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">,&nbsp;</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">0</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">:</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">02</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">:</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">11</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;autumn<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">--</span></span><span style="color: rgb(0,0,0); background-color: rgb(255,255,0)">%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img id="_97_146_Open_Image" onclick="this.style.display='none'; document.getElementById('_97_146_Open_Text').style.display='none'; document.getElementById('_97_146_Closed_Image').style.display='inline'; document.getElementById('_97_146_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_97_146_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_97_146_Closed_Text').style.display='none'; document.getElementById('_97_146_Open_Image').style.display='inline'; document.getElementById('_97_146_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: rgb(0,0,0); background-color: rgb(255,255,0)">&lt;%</span><span id="_97_146_Closed_Text" style="border-right: rgb(128,128,128) 1px solid; border-top: rgb(128,128,128) 1px solid; display: none; border-left: rgb(128,128,128) 1px solid; border-bottom: rgb(128,128,128) 1px solid; background-color: rgb(255,255,255)">...</span><span id="_97_146_Open_Text"><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">@page&nbsp;contentType</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">=</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">"</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">text/html</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">"</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">&nbsp;pageEncoding</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">=</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">"</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">UTF-8</span><span style="color: rgb(0,0,0); background-color: rgb(245,245,245)">"</span></span><span style="color: rgb(0,0,0); background-color: rgb(255,255,0)">%&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,255)">&lt;!</span><span style="color: rgb(255,0,255)">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;"http://www.w3.org/TR/html4/loose.dtd"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">html</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">head</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">meta&nbsp;</span><span style="color: rgb(255,0,0)">http-equiv</span><span style="color: rgb(0,0,255)">="Content-Type"</span><span style="color: rgb(255,0,0)">&nbsp;content</span><span style="color: rgb(0,0,255)">="text/html;&nbsp;charset=UTF-8"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">title</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)">JSP&nbsp;Page</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">title</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">head</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">h3</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)">FTP&nbsp;img&nbsp;tset</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">h3</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">img&nbsp;</span><span style="color: rgb(255,0,0)">src</span><span style="color: rgb(0,0,255)">="img.jsp?path=/2.jpg"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">body</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">html</span><span style="color: rgb(0,0,255)">&gt;</span></div>
</div>
<br />
上例只实现从远程获得图片生成缩略图返回，没有实现远程下载图片，不过原理一样。<br />
这个方案有一个缺点，就是生成缩略图前，得从ftp服务器读取大图，速度比较慢。<br />
<br />
第二种解决方案是在远程ftp服务器架设一个web server，两个服务器共享文件目录，把生成缩略图的工作放在远程，而传回来的只是缩略图，所以速度会快不少。<br />
<img src ="http://www.blogjava.net/kyleYang/aggbug/305000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-12-07 14:24 <a href="http://www.blogjava.net/kyleYang/archive/2009/12/07/305000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>StringTokenizer和Splite的区别</title><link>http://www.blogjava.net/kyleYang/archive/2009/11/05/301347.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Thu, 05 Nov 2009 15:43:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/11/05/301347.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/301347.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/11/05/301347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/301347.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/301347.html</trackback:ping><description><![CDATA[1.StringTokenizer的例子<br />
import java.util.StringTokenizer;<br />
<br />
public class TestStringTokenizer {<br />
<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; StringTokenizer tokenizer = new StringTokenizer(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "I am a deve,loper; in shenzhen", " |,|;");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(tokenizer.countTokens());<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while (tokenizer.hasMoreTokens()) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // logger.debug(tokenizer.nextToken(" ")); //nextToken(String<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // delim); 下一个分隔符分割的值<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(tokenizer.nextToken());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
结果：<br />
7<br />
I<br />
am<br />
a<br />
deve<br />
loper<br />
in<br />
shenzhen<br />
<br />
2.Split的例子<br />
public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TestSplit ts = new TestSplit();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(ts.bubbleSort("1,32,23 14 5,7"));<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public static String bubbleSort(String str1) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String st[] = str1.split(",| ");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; st.length; i++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; st.length - 1 - i; j++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (Integer.parseInt(st[j]) &gt; Integer.parseInt(st[j + 1])) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String temp = st[j];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; st[j] = st[j + 1];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; st[j + 1] = temp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String str2 = "";<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; st.length; i++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (str2.equals("")) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; str2 = st[i];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; str2 = str2 + "," + st[i];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return str2;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
结果：1,5,7,14,23,32<br />
<br />
<br />
 <img src ="http://www.blogjava.net/kyleYang/aggbug/301347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-11-05 23:43 <a href="http://www.blogjava.net/kyleYang/archive/2009/11/05/301347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA反射机制</title><link>http://www.blogjava.net/kyleYang/archive/2009/11/04/301164.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 04 Nov 2009 14:02:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/11/04/301164.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/301164.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/11/04/301164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/301164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/301164.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java提供了一套机制来动态执行方法和构造方法，以及数组操作等，这套机制就叫——反射。反射机制是如今很多流行框架的实现基础，其中包括Spring、Hibernate等。原理性的问题不是本文的重点，接下来让我们在实例中学习这套精彩的机制。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. 得到某个对象的属性<br />
<div style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; background-color: rgb(238,238,238)"><font size="2">&nbsp;<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object getProperty(Object owner, String fieldName)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception {<br />
</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;owner.getClass();<br />
</span>&nbsp;<br />
<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Field field&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getField(fieldName);<br />
</span>&nbsp;<br />
&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Object property&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;field.get(owner);<br />
</span>&nbsp;<br />
&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;property;<br />
</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></font></div>
<br />
Class ownerClass = owner.getClass()：得到该对象的Class。<br />
<br />
Field field = ownerClass.getField(fieldName)：通过Class得到类声明的属性。<br />
<br />
Object property = field.get(owner)：通过对象得到该属性的实例，如果这个属性是非公有的，这里会报IllegalAccessException。<br />
<br />
<br />
<br />
2. 得到某个类的静态属性<br />
<br />
<div style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; background-color: rgb(238,238,238)"><font size="2"><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object getStaticProperty(String className, String fieldName)<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception {<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Class.forName(className);<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<br />
<span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Field field&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getField(fieldName);<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span><br />
<span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Object property&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;field.get(ownerClass);<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<br />
<span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;property;<br />
</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></font></div>
<br />
Class ownerClass = Class.forName(className) ：首先得到这个类的Class。<br />
<br />
Field field = ownerClass.getField(fieldName)：和上面一样，通过Class得到类声明的属性。<br />
<br />
Object property = field.get(ownerClass) ：这里和上面有些不同，因为该属性是静态的，所以直接从类的Class里取。<br />
<br />
<br />
3. 执行某对象的方法<br />
<br />
<div style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; background-color: rgb(238,238,238)"><font size="2"><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object invokeMethod(Object owner, String methodName, Object[] args)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception {<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<br />
<span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;owner.getClass();<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<br />
<span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class[] argsClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Class[args.length];<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<br />
<span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">, j&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args.length; i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;j; i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">) {<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argsClass[i]&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args[i].getClass();<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span>&nbsp;<br />
&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Method method&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getMethod(methodName, argsClass);<br />
</span>&nbsp;<br />
&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;method.invoke(owner, args);<br />
</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></font></div>
<br />
Class owner_class = owner.getClass() ：首先还是必须得到这个对象的Class。<br />
<br />
5～9行：配置参数的Class数组，作为寻找Method的条件。<br />
<br />
Method method = ownerClass.getMethod(methodName, argsClass)：通过Method名和参数的Class数组得到要执行的Method。<br />
<br />
method.invoke(owner, args)：执行该Method，invoke方法的参数是执行这个方法的对象，和参数数组。返回值是Object，也既是该方法的返回值。<br />
<br />
<br />
4. 执行某个类的静态方法<br />
<br />
<div style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; background-color: rgb(238,238,238)"><font size="2"><span style="color: rgb(0,128,128)">&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object invokeStaticMethod(String className, String methodName,<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[] args)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception {<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Class.forName(className);<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<br />
<span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class[] argsClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Class[args.length];<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<br />
<span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">, j&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args.length; i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;j; i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">) {<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argsClass[i]&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args[i].getClass();<br />
</span><span style="color: rgb(0,128,128)">&nbsp;</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span>&nbsp;<br />
&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Method method&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getMethod(methodName, argsClass);<br />
</span>&nbsp;<br />
&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;method.invoke(</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">, args);<br />
</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></font></div>
 <img src ="http://www.blogjava.net/kyleYang/aggbug/301164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-11-04 22:02 <a href="http://www.blogjava.net/kyleYang/archive/2009/11/04/301164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java实现文件拷贝的4种方法</title><link>http://www.blogjava.net/kyleYang/archive/2009/10/24/299535.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Fri, 23 Oct 2009 16:41:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/10/24/299535.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/299535.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/10/24/299535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/299535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/299535.html</trackback:ping><description><![CDATA[<p>第一种方法:古老的方式</p>
<p>&nbsp;public static long forJava(File f1,File f2) throws Exception{<br />
&nbsp; long time=new Date().getTime();<br />
&nbsp; int length=2097152;<br />
&nbsp; FileInputStream in=new FileInputStream(f1);<br />
&nbsp; FileOutputStream out=new FileOutputStream(f2);<br />
&nbsp; byte[] buffer=new byte[length];<br />
&nbsp; while(true){<br />
&nbsp;&nbsp; int ins=in.read(buffer);<br />
&nbsp;&nbsp; if(ins==-1){<br />
&nbsp;&nbsp;&nbsp; in.close();<br />
&nbsp;&nbsp;&nbsp; out.flush();<br />
&nbsp;&nbsp;&nbsp; out.close();<br />
&nbsp;&nbsp;&nbsp; return new Date().getTime()-time;<br />
&nbsp;&nbsp; }else<br />
&nbsp;&nbsp;&nbsp; out.write(buffer,0,ins);<br />
&nbsp; }<br />
&nbsp;}<br />
方法的2参数分别是原始文件,和拷贝的目的文件.这里不做过多介绍.</p>
<p>实现方法很简单,分别对2个文件构建输入输出流,并且使用一个字节数组作为我们内存的缓存器, 然后使用流从f1 中读出数据到缓存里,在将缓存数据写到f2里面去.这里的缓存是2MB的字节数组</p>
<p>第2种方法:使用NIO中的管道到管道传输</p>
<p>&nbsp;&nbsp;&nbsp; public static long forTransfer(File f1,File f2) throws Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long time=new Date().getTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int length=2097152;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileInputStream in=new FileInputStream(f1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream out=new FileOutputStream(f2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileChannel inC=in.getChannel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileChannel outC=out.getChannel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(inC.position()==inC.size()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inC.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outC.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Date().getTime()-time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((inC.size()-inC.position())&lt;20971520)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=(int)(inC.size()-inC.position());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=20971520;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inC.transferTo(inC.position(),length,outC);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inC.position(inC.position()+length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
实现方法:在第一种实现方法基础上对输入输出流获得其管道,然后分批次的从f1的管道中像f2的管道中输入数据每次输入的数据最大为2MB</p>
<p>方法3:内存文件景象写(读文件没有使用文件景象,有兴趣的可以回去试试,,我就不试了,估计会更快)</p>
<p>&nbsp;&nbsp;&nbsp; public static long forImage(File f1,File f2) throws Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long time=new Date().getTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int length=2097152;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileInputStream in=new FileInputStream(f1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RandomAccessFile out=new RandomAccessFile(f2,"rw");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileChannel inC=in.getChannel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MappedByteBuffer outC=null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MappedByteBuffer inbuffer=null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] b=new byte[length];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(inC.position()==inC.size()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inC.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outC.force();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Date().getTime()-time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((inC.size()-inC.position())&lt;length){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=(int)(inC.size()-inC.position());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=20971520;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b=new byte[length];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inbuffer=inC.map(MapMode.READ_ONLY,inC.position(),length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inbuffer.load();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inbuffer.get(b);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outC=out.getChannel().map(MapMode.READ_WRITE,inC.position(),length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inC.position(b.length+inC.position());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outC.put(b);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outC.force();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
实现方法:跟伤2个例子不一样,这里写文件流没有使用管道而是使用内存文件映射(假设文件f2在内存中).在循环中从f1的管道中读取数据到字节数组里,然后在像内存映射的f2文件中写数据.</p>
<p>第4种方法:管道对管道</p>
<p>&nbsp;&nbsp;&nbsp; public static long forChannel(File f1,File f2) throws Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long time=new Date().getTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int length=2097152;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileInputStream in=new FileInputStream(f1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream out=new FileOutputStream(f2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileChannel inC=in.getChannel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileChannel outC=out.getChannel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByteBuffer b=null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(inC.position()==inC.size()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inC.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outC.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Date().getTime()-time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((inC.size()-inC.position())&lt;length){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=(int)(inC.size()-inC.position());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=2097152;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b=ByteBuffer.allocateDirect(length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inC.read(b);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.flip();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outC.write(b);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outC.force(false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
这里实现方式与第3种实现方式很类似,不过没有使用内存影射。</p>
  <img src ="http://www.blogjava.net/kyleYang/aggbug/299535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-10-24 00:41 <a href="http://www.blogjava.net/kyleYang/archive/2009/10/24/299535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>