﻿<?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/ywsky/category/17177.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:02:30 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:02:30 GMT</pubDate><ttl>60</ttl><item><title>javascript进阶之变量篇 </title><link>http://www.blogjava.net/ywsky/archive/2006/12/10/86668.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Sun, 10 Dec 2006 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/12/10/86668.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/86668.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/12/10/86668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/86668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/86668.html</trackback:ping><description><![CDATA[
		<p>1、关于变量的声名 <br />大家都知道javascript是可以隐式声名变量的。但要注意，隐式声名变量总是被创建为全局变量。看以下代码，情愿javascript语言强制声明变量。建议大家一定要var声明变量。 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />function test(){   <br />    var a=222;   <br /> document.writeln(a);   <br />}   <br />test();   <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;  </p>
		<p> </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />function test(){   <br />    a=222;   <br /> document.writeln(a);   <br />}   <br />test();   <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;   </p>
		<p>2、关于变量的作用域 <br />猜猜以下代码输出什么。 </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var x='000';   <br />document.writeln(x);   <br />a();   <br />function a(){   <br />    var x='aaa';   <br /> function b(){   <br />     document.writeln(x);   <br />        var x='bbb';   <br />  document.writeln(x);   <br /> }   <br /> b();   <br />    document.writeln(x);   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />如果你的答案是 000 undefined bbb aaa。恭喜，ok.当代码用到x变量时，先从函数块（权威指南中用调用对象来解释）中找，如果找不到，从上一级函数块找，直到找到，如果知道顶层代码（指var x='000';的位置）还没找到定义，代码会报未定义错误。</p>
		<p>改一下代码，得到 000 undefined 111 111 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var x='000';   <br />document.writeln(x);   <br />a();   <br />function a(){   <br /> function b(){   <br />     document.writeln(x);   <br />  document.writeln(x);   <br /> }   <br /> document.writeln(x);   <br /> var x='111';   <br /> b();    <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />3、新的问题 <br />变量个作用域清楚了，注意上面的代码。为什么我的function a()定义以前就可以调用a函数了，而我的var x='111';前“不可以用”x啊？？？ <br />让我把我的理解一一道来 <br />首先：以下代码让我相信javascript有个预编译过程，不是完全按照顺序解释执行的。 </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />a();   <br />function a(){   <br />    alert();   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />个人理解这个预编译过程不会象java/c#那样把代码编译成虚拟机认识的语言，更不会象vb，vc那样编译成更底层的语言。猜想只是把这个函数预装载到这段函数执行的全局环境中，在这个执行环境中，该函数被标识定义过，可以直接使用了。（看到网上很多人写的AOP的javascript实现,其实这个预编译过程才是翻译元数据最佳时候，可惜就javascript语言来讲，是有些落伍了）</p>
		<p>这个文章主要讲变量的一些问题。变量说了，为什么函数可以，我变量就不可以呢。 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />document.writeln(a);   <br />var a=0;   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />为什么我要输出undefined呢？为什么我a就不可以预编译一把呢？ <br />大家看看以下两段代码会输出什么呢啊？？？ </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />document.writeln(a);   <br />a=0;   <br />&lt;/SCRIPT&gt;  </p>
		<p> </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;   </p>
		<p>
				<br />可能你运行试了，可能你本来就知道，a未定义。哈哈哈，好了。 <br />现在我确信var a=0;被javascript解释器“预编译过”，至少是记录下来了。甚至把它的值设置为 undefined。“undefined”这个词名字取的很是让人误解，怎么能叫未定义呢，分明是javascript中所有变量的初始化值。关于null与undefined的比较我实在不愿提了。 <br />注意上面两段代码还反映一个现象。隐式声明的变量是在解释的时候才把自己定义为全局变量的。</p>
		<p>关于函数与变量javascript预编译的不同处理，大家可以与java class的加载过程比较下。java也是对基本类型设出值，对象为null的。（不往远扯了） <br />4、区别未定义变量和未附值变量 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var a;   <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;  </p>
		<p> </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />未定义变量和未附值变量 权威指南中文版 定义的。通过第三条分析，我觉得变量就应该以 定义和未定义变量区别。未附值变量和undefined有点冲突，javascript不是强类型语言，没发附默认值，才来了个undefined。 <br />5、基本类型和引用类型 <br />熟悉java的朋友可能这部分很清楚。没啥 <br />说头。 <br />6、javascript的垃圾回收 <br />关于这部分内容一直没见着个权威说法。在javascript权威指南中有两小节提到这个问题。 <br />对于字符串、对象、数据这些没有固定大小，必须为它们动态的分配内存，但什么时候回收这些内存呢？javascript使用和java一样的garbage collection的方法。 </p>
		<p>代码<br />var s="hello";   <br />var u=s.toUpperCase();   <br />s=u;  </p>
		<p>
				<br />运行这段代码后，"hello"没有变量会再用到他，这是"hello"的存储空间的被垃圾回收了。对于javascript的垃圾回收，你唯一要关心的是，它一定会进行，不要对内存担心。 <br />注意，javascript不提供任何的强制垃圾回收或释放内存的运算附或语句。 <br />javascript的delete运算附和C++中的不同。 </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var o=new Object();   <br />o.name="zkj";   <br />o.age=25;   <br />o.bir=new Date();   <br />for(var key in o){   <br />document.writeln(key+':'+o[key]+'&lt;/br&gt;');   <br />}   <br />document.writeln('delete o.bir&lt;/br&gt;');   <br />delete o.bir;   <br />for(var key in o){   <br />document.writeln(key+':'+o[key]+'&lt;/br&gt;');   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />7、作为属性的变量 <br />猜猜以下代码会输出什么。 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var x=100;   <br />document.writeln(x);   <br />add(x);   <br />document.writeln('&lt;/br&gt;------------------------&lt;/br&gt;');   <br />var x=200;   <br />document.writeln(x);   <br />add(x);   <br />function add(x){   <br />    document.writeln(x);    <br />    var x=300;   <br />    document.writeln(x);    <br />    var x=400;   <br />    document.writeln(x);   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />估计很多人能得出正确答案 <br />100 100 300 400 <br />------------------------ <br />200 200 300 400 <br />但这里我想引入 全局对象和调用对象的 概念（javascript权威指南是这么翻译滴） </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var x=100;   //我们在全局对象中加了个属性x. 对比   <br /> //var o=new Object();o.x=100;   <br />document.writeln(this.x);//用this访问全局对象   <br />add(this.x);//把全局对象的属性值传递对函数中   <br />document.writeln('&lt;/br&gt;------------------------&lt;/br&gt;');   <br />this.x=200;//把全局变量中的x属性修改掉   <br />document.writeln(window.x);   <br />add(window.x);   <br />function add(x){   <br />    //假设有个局部对象，调用对象，函数调用过程中的对象   <br />//  temp   temp.x=${传入的值}   <br />    document.writeln(x); //哦这打印的可是参数中的值，也就是temp.x=this.x   <br />//的值,   <br />    var x=300;//把调用对象变量的签名给覆盖了.   <br />    document.writeln(x); //打印修改过的值。 temp.x   <br /> var x=400;//temp.x=400  <br />    document.writeln(x);   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />在函数的调用过程中，假设有个调用对象存在，把函数的参数，和函数内的临时变量当成这个调用对象的属性。当然这个调用对象的生命周期很短。 <br />注意，当我们访问全局变量的属性入x的时候，不必要用this.x 或window.x访问，当在有&lt;frame&gt;&lt;iframe&gt;的页面时会出现混淆。 <br />关于函数的详细讨论我后续会详细讨论。</p>
		<p> </p>
		<p>　　　　　　　　　　文章来自：<a href="http://www.javaeye.com/article/19506">http://www.javaeye.com/article/19506</a><br /></p>
<img src ="http://www.blogjava.net/ywsky/aggbug/86668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-12-10 13:16 <a href="http://www.blogjava.net/ywsky/archive/2006/12/10/86668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat web开发中的中文问题(一)</title><link>http://www.blogjava.net/ywsky/archive/2006/11/19/82017.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Sun, 19 Nov 2006 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/19/82017.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/82017.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/19/82017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/82017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/82017.html</trackback:ping><description><![CDATA[中文乱码一直是困扰我们的一个很大的问题，也是很多开发人员希望解决的问题。 本系列文章中采用的环境为Tomcat5.0 + JDK1.5 +mysql5.0。统一编码为UTF-8<br /><br />本篇主要是解决jsp页面之间的post和get方法中出现的乱码问题，不涉及struts等框架。<br /><br />（一）<font face="Verdana"><font size="2">tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理<br />我们现在新建2个页面，在eclipse IDE中，eclipse对jsp文件的默认编码</font></font><font face="Verdana"><font size="2">iso-8859-1，可以通过设置调整为UTF-8。<br />打开window-&gt; preferences,如下图所示：<br /><img _fcksavedurl="http://p.blog.csdn.net/images/p_blog_csdn_net/yw2007/1.GIF" src="http://p.blog.csdn.net/images/p_blog_csdn_net/yw2007/1.GIF" /><br />将用红线框出来的select选择utf8的。<br /><br />新建的2个页面分别为login.jsp和result.jsp；login.jsp提交一个name给result.jsp，result.jsp负责显示就行。<br />login.jsp的页面如下图所示（采用post提交）：<br /><img _fcksavedurl="http://p.blog.csdn.net/images/p_blog_csdn_net/yw2007/2.GIF" src="http://p.blog.csdn.net/images/p_blog_csdn_net/yw2007/2.GIF" /><br />result.jsp的处理代码如下：<br /><img _fcksavedurl="http://p.blog.csdn.net/images/p_blog_csdn_net/yw2007/3.GIF" src="http://p.blog.csdn.net/images/p_blog_csdn_net/yw2007/3.GIF" /><br />将标记1行和标记2行都去掉的话在页面上就会出现中文乱码，标记1和标记2保留一个就可以解决这个问题。<br /><br />（二）get方式的解决办法<br />对于form表单采用get方法提交，我们可以采用以下的转换来正常显示中文<br />name = new String(name.getBytes("iso8859_1"),"UTF-8");<br /><br />但是如果对于http://localhost:8000/test/result.jsp?name=中文这种提交，上面的方法就没有效果了。<br />对于后者，我们的解决方案是：将Tomcat 5.0\conf目录下的server.xml文件中的<br />&lt;!-- Define a non-SSL Coyote HTTP/1.1 Connector on the port specified<br />         during installation --&gt;<br />    &lt;Connector <br />port="8000"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               debug="0" connectionTimeout="20000" <br />               disableUploadTimeout="true"<br />    URIEncoding="UTF-8" /&gt;<br /><br />后面添加了URIEncoding="UTF-8" <br /><br />这样我们就解决了get方式的乱码问题。</font></font><img src="file:///C:/DOCUME%7E1/yw2007/LOCALS%7E1/Temp/moz-screenshot.jpg" _fcksavedurl="file:///C:/DOCUME~1/yw2007/LOCALS~1/Temp/moz-screenshot.jpg" alt="" /><img src ="http://www.blogjava.net/ywsky/aggbug/82017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-19 12:00 <a href="http://www.blogjava.net/ywsky/archive/2006/11/19/82017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String中三种加法的区别 </title><link>http://www.blogjava.net/ywsky/archive/2006/11/13/80871.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Mon, 13 Nov 2006 04:49:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/13/80871.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/80871.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/13/80871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/80871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/80871.html</trackback:ping><description><![CDATA[
		<span style="FONT-SIZE: 12px">JAVA的确是一种令程序员陷入两难境地的言语, 确切的说是思想. 它提供了如此丰富的library,让程序员能够很容易的写出功能强大的程序. 同时它也封装了如此多的细节, 让程序员能够轻易的写出很拙略的程序. 它所代表的object指向思想设计之初是为了把程序员从纷繁复杂的编程细节中解放出来,来达到对已有程序的利用. 但是在编程 实际上又要求程序员了解其实现的细节而避免写出因调用已有library不正引起的performance慢的,耗费系统资源多的程序.通常成为一个优秀的JAVA程序员需要较长时间的经验积累,包括从程序的tuning中,或从其他有经验的程序员口中,才知道一定功能需要怎样实现,在程序中需要避免那些问题.但这往往是比较片面的,知其然而不知其所以然.我想大多数程序员都有类似的经历,举一个简单的例子,下面有三种对String的累加操作. <br />① String tmp = "a" + "b" + "c"; <br />② String tmp = null; <br />tmp+= "a"; <br />tmp+= "b"; <br />tmp+= "c"; <br />③ String tmp = null; <br />StringBuffer buf = new StringBuffer(); <br />buf.append("a"); <br />buf.append("b"); <br />buf.append("c"); <br />tmp = buf.toString(); <br />有些JAVA程序员在任意的用这三种方法的任一种,无视它们的区别.有 些程序员知道第三种方法好一直在用而不知其为什么好,以至于作为 经验教条的传授给JAVA新手.真正的答案是什么呢?<br /><br />  让我们揭开JAVA String Class和StringBuffer Class的封装面纱看看它的内部实现.在JAVA中的String Class是一个不可变类,所有对一个Sting Object的改变都回导致一个新的String Object的生成.那么对tmp+=a中+符号的实现呢?如果你注意一下StringBuffer的Javadoc会发现.JDK对它的实现是tmp=(new StringBuffer().append(tmp).append("a")).toSting(); 这样我们发现②这种方法在隐性生成了一个StringBuffer Object和一个String Object 再乘3就是六个object 的资源耗费.(还不包括String Class 和StringBuffer Class内部使用的Char[])而方法③只用了两个.也许有些程序员会对这些耗费不以为然,的确也是,不过在一些场景下它会成为perfamence的瓶颈.再回头看看①这种方法,它会被JAVA编译器编译为tmp=(new StringBuffer().append("a").append("b").append("c")).to String();我们发现做的和③方法是同样的事.</span> <img src ="http://www.blogjava.net/ywsky/aggbug/80871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-13 12:49 <a href="http://www.blogjava.net/ywsky/archive/2006/11/13/80871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java读取远程文件代码 </title><link>http://www.blogjava.net/ywsky/archive/2006/11/13/80872.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Mon, 13 Nov 2006 04:49:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/13/80872.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/80872.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/13/80872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/80872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/80872.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<p>java读取远程文件代码：</p>
				<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
						<div>
								<img id="_0_39_Open_Image" onclick="this.style.display='none'; document.getElementById('_0_39_Open_Text').style.display='none'; document.getElementById('_0_39_Closed_Image').style.display='inline'; document.getElementById('_0_39_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="_0_39_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_0_39_Closed_Text').style.display='none'; document.getElementById('_0_39_Open_Image').style.display='inline'; document.getElementById('_0_39_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />
								<span id="_0_39_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
								<span id="_0_39_Open_Text">
										<span style="COLOR: #008000">/*</span>
										<span style="COLOR: #008000">filename为远程文件地址,localfinename为本地保存地址</span>
										<span style="COLOR: #008000">*/</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img id="_115_932_Open_Image" onclick="this.style.display='none'; document.getElementById('_115_932_Open_Text').style.display='none'; document.getElementById('_115_932_Closed_Image').style.display='inline'; document.getElementById('_115_932_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
										<img id="_115_932_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_115_932_Closed_Text').style.display='none'; document.getElementById('_115_932_Open_Image').style.display='inline'; document.getElementById('_115_932_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />    </span>
								<span style="COLOR: #0000ff">public</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">void</span>
								<span style="COLOR: #000000"> readRomateFile(String romatefilename , String localfilename) </span>
								<span id="_115_932_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span>
								<span id="_115_932_Open_Text">
										<span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />        URL urlfile;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />        BufferedReader in;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />        PrintWriter out;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />        String content </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">""</span>
										<span style="COLOR: #000000">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />        String inputLine;<br /><img id="_221_507_Open_Image" onclick="this.style.display='none'; document.getElementById('_221_507_Open_Text').style.display='none'; document.getElementById('_221_507_Closed_Image').style.display='inline'; document.getElementById('_221_507_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_221_507_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_221_507_Closed_Text').style.display='none'; document.getElementById('_221_507_Open_Image').style.display='inline'; document.getElementById('_221_507_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
										<span style="COLOR: #0000ff">try</span>
										<span style="COLOR: #000000"> </span>
										<span id="_221_507_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span>
										<span id="_221_507_Open_Text">
												<span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            urlfile </span>
												<span style="COLOR: #000000">=</span>
												<span style="COLOR: #000000"> </span>
												<span style="COLOR: #0000ff">new</span>
												<span style="COLOR: #000000"> URL(romatefilename);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            in </span>
												<span style="COLOR: #000000">=</span>
												<span style="COLOR: #000000"> </span>
												<span style="COLOR: #0000ff">new</span>
												<span style="COLOR: #000000"> BufferedReader(</span>
												<span style="COLOR: #0000ff">new</span>
												<span style="COLOR: #000000"> InputStreamReader(urlfile.openStream()));<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            inputLine </span>
												<span style="COLOR: #000000">=</span>
												<span style="COLOR: #000000"> in.readLine();<br /><img id="_393_456_Open_Image" onclick="this.style.display='none'; document.getElementById('_393_456_Open_Text').style.display='none'; document.getElementById('_393_456_Closed_Image').style.display='inline'; document.getElementById('_393_456_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_393_456_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_393_456_Closed_Text').style.display='none'; document.getElementById('_393_456_Open_Image').style.display='inline'; document.getElementById('_393_456_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
												<span style="COLOR: #0000ff">while</span>
												<span style="COLOR: #000000"> (inputLine </span>
												<span style="COLOR: #000000">!=</span>
												<span style="COLOR: #000000"> </span>
												<span style="COLOR: #0000ff">null</span>
												<span style="COLOR: #000000">) </span>
												<span id="_393_456_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span>
												<span id="_393_456_Open_Text">
														<span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />                content </span>
														<span style="COLOR: #000000">+=</span>
														<span style="COLOR: #000000"> inputLine ;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />                inputLine </span>
														<span style="COLOR: #000000">=</span>
														<span style="COLOR: #000000"> in.readLine();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
												</span>
												<span style="COLOR: #000000">
														<br />
														<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(content);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            in.close();<br /><img id="_541_607_Open_Image" onclick="this.style.display='none'; document.getElementById('_541_607_Open_Text').style.display='none'; document.getElementById('_541_607_Closed_Image').style.display='inline'; document.getElementById('_541_607_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_541_607_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_541_607_Closed_Text').style.display='none'; document.getElementById('_541_607_Open_Image').style.display='inline'; document.getElementById('_541_607_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span>
										</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">catch</span>
										<span style="COLOR: #000000"> (MalformedURLException e) </span>
										<span id="_541_607_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span>
										<span id="_541_607_Open_Text">
												<span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            </span>
												<span style="COLOR: #008000">//</span>
												<span style="COLOR: #008000"> TODO Auto-generated catch block</span>
												<span style="COLOR: #008000">
														<br />
														<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />
												</span>
												<span style="COLOR: #000000">            e.printStackTrace();<br /><img id="_631_697_Open_Image" onclick="this.style.display='none'; document.getElementById('_631_697_Open_Text').style.display='none'; document.getElementById('_631_697_Closed_Image').style.display='inline'; document.getElementById('_631_697_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_631_697_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_631_697_Closed_Text').style.display='none'; document.getElementById('_631_697_Open_Image').style.display='inline'; document.getElementById('_631_697_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span>
										</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">catch</span>
										<span style="COLOR: #000000"> (IOException e) </span>
										<span id="_631_697_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span>
										<span id="_631_697_Open_Text">
												<span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            </span>
												<span style="COLOR: #008000">//</span>
												<span style="COLOR: #008000"> TODO Auto-generated catch block</span>
												<span style="COLOR: #008000">
														<br />
														<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />
												</span>
												<span style="COLOR: #000000">            e.printStackTrace();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />
												<br />
												<img id="_702_711_Open_Image" onclick="this.style.display='none'; document.getElementById('_702_711_Open_Text').style.display='none'; document.getElementById('_702_711_Closed_Image').style.display='inline'; document.getElementById('_702_711_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="_702_711_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_702_711_Closed_Text').style.display='none'; document.getElementById('_702_711_Open_Image').style.display='inline'; document.getElementById('_702_711_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
										<span id="_702_711_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
										<span id="_702_711_Open_Text">
												<span style="COLOR: #008000">/*</span>
												<span style="COLOR: #008000"> 输出到文件</span>
												<span style="COLOR: #008000">*/</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img id="_719_839_Open_Image" onclick="this.style.display='none'; document.getElementById('_719_839_Open_Text').style.display='none'; document.getElementById('_719_839_Closed_Image').style.display='inline'; document.getElementById('_719_839_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="_719_839_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_719_839_Closed_Text').style.display='none'; document.getElementById('_719_839_Open_Image').style.display='inline'; document.getElementById('_719_839_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
										<span style="COLOR: #0000ff">try</span>
										<span style="COLOR: #000000"> </span>
										<span id="_719_839_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span>
										<span id="_719_839_Open_Text">
												<span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            out </span>
												<span style="COLOR: #000000">=</span>
												<span style="COLOR: #000000"> </span>
												<span style="COLOR: #0000ff">new</span>
												<span style="COLOR: #000000"> PrintWriter(</span>
												<span style="COLOR: #0000ff">new</span>
												<span style="COLOR: #000000"> BufferedWriter(</span>
												<span style="COLOR: #0000ff">new</span>
												<span style="COLOR: #000000"> FileWriter(localfilename)));<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            out.print(content);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            out.close();<br /><img id="_863_929_Open_Image" onclick="this.style.display='none'; document.getElementById('_863_929_Open_Text').style.display='none'; document.getElementById('_863_929_Closed_Image').style.display='inline'; document.getElementById('_863_929_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_863_929_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('_863_929_Closed_Text').style.display='none'; document.getElementById('_863_929_Open_Image').style.display='inline'; document.getElementById('_863_929_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span>
										</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">catch</span>
										<span style="COLOR: #000000"> (IOException e) </span>
										<span id="_863_929_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span>
										<span id="_863_929_Open_Text">
												<span style="COLOR: #000000">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            </span>
												<span style="COLOR: #008000">//</span>
												<span style="COLOR: #008000"> TODO Auto-generated catch block</span>
												<span style="COLOR: #008000">
														<br />
														<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />
												</span>
												<span style="COLOR: #000000">            e.printStackTrace();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span>
								</span>
						</div>
				</div>
				<p> </p>
		</div>
<img src ="http://www.blogjava.net/ywsky/aggbug/80872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-13 12:49 <a href="http://www.blogjava.net/ywsky/archive/2006/11/13/80872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 dom4j 解析 XML </title><link>http://www.blogjava.net/ywsky/archive/2006/11/13/80870.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Mon, 13 Nov 2006 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/13/80870.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/80870.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/13/80870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/80870.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/80870.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.生成一个XML文件：																																												public										 										void										 generateDocument() 										...																						{        												/**...&nbsp;&nbsp;<a href='http://www.blogjava.net/ywsky/archive/2006/11/13/80870.html'>阅读全文</a><img src ="http://www.blogjava.net/ywsky/aggbug/80870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-13 12:48 <a href="http://www.blogjava.net/ywsky/archive/2006/11/13/80870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中四种操作xml方式的比较 </title><link>http://www.blogjava.net/ywsky/archive/2006/11/13/80869.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Mon, 13 Nov 2006 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/13/80869.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/80869.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/13/80869.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/80869.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/80869.html</trackback:ping><description><![CDATA[
		<div class="postText">1. 介绍 
<p>1）DOM(JAXP Crimson解析器) <br />        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构，然后才能做任何工作。由于它是基于信息层次的，因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先，由于树在内存中是持久的，因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航，而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。<br /> <br /> </p><p>2）SAX</p><p>        SAX处理的优点非常类似于流媒体的优点。分析能够立即开始，而不是等待所有的数据被处理。而且，由于应用程序只是在读取数据时检查数据，因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上，应用程序甚至不必解析整个文档；它可以在某个条件得到满足时停止解析。一般来说，SAX还比它的替代者DOM快许多。 <br /> 　　选择DOM还是选择SAX？ 对于需要自己编写代码来处理XML文档的开发人员来说，  选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档，而SAX采用的事件模型。 </p><p>　　DOM解析器把XML文档转化为一个包含其内容的树，并可以对树进行遍历。用DOM解析模型的优点是编程容易，开发人员只需要调用建树的指令，然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档，所以对性能和内存的要求比较高，尤其是遇到很大的XML文件的时候。由于它的遍历能力，DOM解析器常用于XML文档需要频繁的改变的服务中。 </p><p>　　SAX解析器采用了基于事件的模型，它在解析XML文档的时候可以触发一系列的事件，当发现给定的tag的时候，它可以激活一个回调方法，告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低，因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时，SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难，而且很难同时访问同一个文档中的多处不同数据。 </p><p>3）JDOM           <a href="http://www.jdom.org/"><font color="#000080">http://www.jdom.org</font></a></p><p>          JDOM的目的是成为Java特定文档模型，它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型，JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 </p><p>　　JDOM与DOM主要有两方面不同。首先，JDOM仅使用具体类而不使用接口。这在某些方面简化了API，但是也限制了灵活性。第二，API大量使用了Collections类，简化了那些已经熟悉这些类的Java开发者的使用。 </p><p>　　JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的，并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而，它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。 </p><p>　　JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。</p><p>4）DOM4J <a href="http://dom4j.sourceforge.net/"><font color="#000080">http://dom4j.sourceforge.net</font></a><br />             <br />        虽然DOM4J代表了完全独立的开发结果，但最初，它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能，包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项，它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始，它就一直处于开发之中。 </p><p>　　为支持所有这些功能，DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类，但是在许多情况下，它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是，虽然DOM4J付出了更复杂的API的代价，但是它提供了比JDOM大得多的灵活性。 </p><p>　　在添加灵活性、XPath集成和对大文档处理的目标时，DOM4J的目标与JDOM是一样的：针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案，实现在本质上处理所有Java/XML问题的目标。在完成该目标时，它比JDOM更少强调防止不正确的应用程序行为。 </p><p>　　DOM4J是一个非常非常优秀的Java XML API，具有性能优异、功能强大和极端易用使用的特点，同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML，特别值得一提的是连Sun的JAXM也在用DOM4J。 </p><p><br />2.. 比较</p><p>1）DOM4J性能最好，连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J，例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性，那就采用DOM4J.</p><p>2）JDOM和DOM在性能测试时表现不佳，在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM。虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题，但是从性能观点来看，它确实没有值得推荐之处。另外，DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础，因为它正式获得W3C推荐(与基于非标准的Java模型相对)，所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。</p><p>3）SAX表现较好，这要依赖于它特定的解析方式－事件驱动。一个SAX检测即将到来的XML流，但并没有载入到内存(当然当XML流被读入时，会有部分文档暂时隐藏在内存中)。</p><p>3. 四种xml操作方式的基本使用方法</p><p>xml文件：</p><p>＜?xml version="1.0" encoding="GB2312"?＞<br />＜RESULT＞<br />    ＜VALUE＞ <br />　　      ＜NO＞A1234＜/NO＞ <br />　　     ＜ADDR＞四川省XX县XX镇XX路X段XX号＜/ADDR＞<br />    ＜/VALUE＞<br />    ＜VALUE＞ <br />　　      ＜NO＞B1234＜/NO＞ <br />　     　＜ADDR＞四川省XX市XX乡XX村XX组＜/ADDR＞<br />    ＜/VALUE＞<br />＜/RESULT＞ </p><p>1）DOM</p><p>import java.io.*;<br />import java.util.*;<br />import org.w3c.dom.*;<br />import javax.xml.parsers.*; </p><p>public class MyXMLReader{ <br />　public static void main(String arge[]){ </p><p>　　long lasting =System.currentTimeMillis(); <br />　　try{  <br />　　　File f=new File("data_10k.xml"); <br />　　　DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); <br />　　　DocumentBuilder builder=factory.newDocumentBuilder(); <br />　　　Document doc = builder.parse(f); <br />　　　NodeList nl = doc.getElementsByTagName("VALUE"); <br />　　　for (int i=0;i＜nl.getLength();i++){ <br />　　　　System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); <br />　　　　System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); <br />　 　} <br />　　}catch(Exception e){ <br />　　　e.printStackTrace(); <br />} </p><p>2）SAX</p><p>import org.xml.sax.*;<br />import org.xml.sax.helpers.*;<br />import javax.xml.parsers.*; </p><p>public class MyXMLReader extends DefaultHandler { </p><p>　java.util.Stack tags = new java.util.Stack(); <br />　public MyXMLReader() { <br />　　super();<br />   } </p><p>　public static void main(String args[]) { <br />　　long lasting = System.currentTimeMillis(); <br />　　try { <br />　　　SAXParserFactory sf = SAXParserFactory.newInstance(); <br />　　　SAXParser sp = sf.newSAXParser(); <br />　　　MyXMLReader reader = new MyXMLReader(); <br />　　　sp.parse(new InputSource("data_10k.xml"), reader); <br />　　} catch (Exception e) { <br />　　　e.printStackTrace(); <br />　　} </p><p>　　System.out.println("运行时间：" + (System.currentTimeMillis() - lasting) + "毫秒");} <br />　　public void characters(char ch[], int start, int length) throws SAXException { <br />　　String tag = (String) tags.peek(); <br />　　if (tag.equals("NO")) {  <br />　　　System.out.print("车牌号码：" + new String(ch, start, length));<br />    }<br />    if (tag.equals("ADDR")) { <br />　　System.out.println("地址:" + new String(ch, start, length));<br />    }<br />   } </p><p>　　public void startElement(String uri,String localName,String qName,Attributes attrs) { <br />　　tags.push(qName);}<br />}  </p><p>3） JDOM</p><p>import java.io.*;<br />import java.util.*;<br />import org.jdom.*;<br />import org.jdom.input.*; </p><p>public class MyXMLReader { </p><p>　public static void main(String arge[]) { <br />　　long lasting = System.currentTimeMillis(); <br />　　try { <br />　　　SAXBuilder builder = new SAXBuilder();  <br />　　　Document doc = builder.build(new File("data_10k.xml"));  <br />　　　Element foo = doc.getRootElement();  <br />　　　List allChildren = foo.getChildren();  <br />　　　for(int i=0;i＜allChildren.size();i++) {  <br />　　　　System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText()); <br />　　　　System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText()); <br />　　　} <br />　　} catch (Exception e) { <br />　　　e.printStackTrace(); <br />} </p><p>}</p><p>4）DOM4J</p><p>import java.io.*;<br />import java.util.*;<br />import org.dom4j.*;<br />import org.dom4j.io.*; </p><p>public class MyXMLReader { </p><p>　public static void main(String arge[]) { <br />　　long lasting = System.currentTimeMillis(); <br />　　try { <br />　　　File f = new File("data_10k.xml"); <br />　　　SAXReader reader = new SAXReader(); <br />　　　Document doc = reader.read(f); <br />　　　Element root = doc.getRootElement(); <br />　　　Element foo; <br />　　　for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) { <br />　　　　foo = (Element) i.next(); <br />　　　　System.out.print("车牌号码:" + foo.elementText("NO")); <br />　　　　System.out.println("车主地址:" + foo.elementText("ADDR")); <br />　　　} <br />　　} catch (Exception e) { <br />　　　e.printStackTrace(); <br />    } <br />}<br /></p></div>
<img src ="http://www.blogjava.net/ywsky/aggbug/80869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-13 12:47 <a href="http://www.blogjava.net/ywsky/archive/2006/11/13/80869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA规则开发篇 </title><link>http://www.blogjava.net/ywsky/archive/2006/11/13/80868.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Mon, 13 Nov 2006 04:46:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/13/80868.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/80868.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/13/80868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/80868.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/80868.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<span style="FONT-SIZE: 12px">本文介绍的JAVA规则的说明分为3个主要级别，本篇抛弃了平时开发中很少遇到的情况，那些用得比较少的以后再<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319693','北京千禧艺海高级苹果平面&lt;br&gt;','千禧艺海是北京著名的专业电脑美术&lt;br&gt;设计师培训的机构，全苹果设备实战化...&lt;br&gt;www.qxyh.cn','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319693" target="http://www.adparter.com/dispatcher.do?trades=319693">高级</a>篇里面出现。并有六个有用的<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319678','国际包裹邮寄 北京－万里&lt;br&gt;','国际包裹邮寄 北京－提供私人物品运...&lt;br&gt;对出国、归国提供国际搬家国际快&lt;br&gt;www.bjeflying.com','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319678" target="http://www.adparter.com/dispatcher.do?trades=319678">国际</a>软件开发重要注意的有关String的问题，遵守了这些规则可以提高<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319665','公司注册程序－创业友欢迎您&lt;br&gt;','北京创业友公司专业代理注册&lt;br&gt;内资、外资、代表处、海外公司解决资...&lt;br&gt;www.yeeyo.com','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319665" target="http://www.adparter.com/dispatcher.do?trades=319665">程序</a>的<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319680','红星生产效率高成品质量好&lt;br&gt;','中国矿山机械生产和出口基地，&lt;br&gt;ISO9001：2000质量体系认...&lt;br&gt;www.hnhxjq.cn','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319680" target="http://www.adparter.com/dispatcher.do?trades=319680">效率</a>、使代码又更好的可读性等。<br />（1） 如果有JDBC连接没有关掉的话，需要在"finally"方法中关掉<br />如果<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319659','微码营销数据库营销专家&lt;br&gt;','数据库营销－微码营销通过综合&lt;br&gt;利用多种直接沟通手段帮助客户实现销...&lt;br&gt;www.micromarketing.com.cn','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319659" target="http://www.adparter.com/dispatcher.do?trades=319659">数据库</a>连接失败或者是没有释放连接，看上去无关紧要。但是其他的用户就需要用更长的时间等待连接，这样数据库利用效率就会下降。确保你的代码在任何情况下，包括出错或者程序异常终止的情况下都释放数据库连接。在"finally"方法中关掉连接，就可以确保这一点。<br />错误示例：<br />try {<br />Statement stmt = con.createStatement();<br />} catch(SQLException e) {<br />e.printStackTrace();<br />}<br />正确示例：<br />try {<br />Statement stmt = con.createStatement();<br />} finally { <br />if (con != null &amp;&amp; !con.isClosed()) {<br />con.close();<br />}<br />}<br /><font color="#ffa500">ps:这个问题也是一直困扰一些提供jsp+<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319661','MySQL教程_学院部落&lt;br&gt;','学院部落提供大量MySQL教程教程&lt;br&gt;是您学习MySQL教程的最佳选择&lt;br&gt;iTbulo.com ','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319661" target="http://www.adparter.com/dispatcher.do?trades=319661">mysql</a>空间的<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319668','您的网页也能赚钱&lt;br&gt;','AdParter文链广告&lt;br&gt;让您的网页也赚钱&lt;br&gt;www.adparter.com','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319668" target="http://www.adparter.com/dispatcher.do?trades=319668">网站</a>，很多个人网站没有关闭数据库连接，结果造成整个<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319660','圣亚瑟服装服饰－套装&lt;br&gt;','亚瑟王服装集团除了一线品牌亚瑟王服...&lt;br&gt;还设有不同规模档次的套装&lt;br&gt;www.king1551.com ','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319660" target="http://www.adparter.com/dispatcher.do?trades=319660">服务</a>器<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319679','首企互联提供速度快、稳定&lt;br&gt;','首企互联是专业从事政府网站建设&lt;br&gt;主要业务有域名注册、虚拟主机、网站&lt;br&gt;www.bjcaihua.cn','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319679" target="http://www.adparter.com/dispatcher.do?trades=319679">速度</a>下降。</font><br /><br /><br />（2） 尽量避免使用'Thread.resume ()', 'Thread.stop ()', 'Thread.suspend ()'和 'Runtime.runFinalizersOnExit ()' 方法。<br />这些方法在平时的开发或者是教科书里面也有用到过，但是这些方法会导致四锁的倾向。一下有充足的<a onmouseover="showTooltip('dHTMLToolTip',event,'http://www.adparter.com/dispatcher.do?trades=319677','淘宝网读者杂志书籍便宜卖&lt;br&gt;','读者杂志出售中。电子杂志、原版书&lt;br&gt;二手资料－用支付宝先验货后付款&lt;br&gt;www.taobao.com ','                  本消息由AdParter.com提供','#ffffff', '#ffffff', '#ff0000', '2000')" style="BORDER-RIGHT: #ff6600 0px dotted; BORDER-TOP: #ff6600 0px dotted; BORDER-LEFT: #ff6600 0px dotted; COLOR: #ff0000; BORDER-BOTTOM: #ff6600 3px dotted" href="http://www.adparter.com/dispatcher.do?trades=319677" target="http://www.adparter.com/dispatcher.do?trades=319677">资料</a>来说明为什么不建议用上述方法。<br />参考：1."java.lang.Thread" in the JDK API documentation<br />2. <a href="http://java.sun.com/j2se/1.3/docs/g...eprecation.html" target="_blank"><font color="#000080">http://java.sun.com/j2se/1.3/docs/g...eprecation.html</font></a><br />3.Paul Hyde: "Java Thread Programming"<br />Sams, ISBN: 0-672-31585-8 pp. 270<br /><br />（3） 在表示长整常量的时候，用L来代替l.<br />因为l很容易和1混一起。<br />错误示例：<br />long temp = 23434l;<br />正确示例：<br />long temp = 23434L;<br />参考：Ken Arnold, James Gosling: "The Java Programming Language Second Edition"Addison Wesley, 1997, pp.108<br /><br />（4） 最好在jsp开头写一条注释<br />在 jsp文件头上面写一条注释，这样可以帮助别人来理解你的代码。这条规则不仅适用于jsp，更是用于任何开发的文档。<br />正确示例：&lt;%-- JSP comment --%&gt;<br /><br />(5)明确的初始化一个构造类里面的所有的字段<br />因为没有初始化的字段会是一个潜在的bug，所以最好初始化类里面的所有的字段。特别是静态的字段，最好在一开始就分配一个初始值<br />错误示例：<br />public class CSI {<br />public CSI () {<br />this (12);<br />k = 0;<br />}<br /><br />public CSI (int val) { <br />j = val;<br />}<br /><br />private int i = 5;<br />private int j;<br />private int k;<br />}<br /><br />正确示例：<br />public class CSIFixed {<br />public CSIFixed () {<br />this (12);<br />}<br /><br />public CSIFixed (int val) {<br />j = val;<br />k = 0; <br />}<br /><br />private int i = 5;<br />private int j;<br />private int k;<br />}<br />参考：<a href="http://www.ambysoft.com/javaCodingStandards.pdf" target="_blank"><font color="#000080">http://www.ambysoft.com/javaCodingStandards.pdf</font></a><br /><br />（6） 国际化开发建议：逻辑操作符不要再一个单个的字符的前面或者后面<br />一个单个字符的前后不要用逻辑操作符，如果代码要在一个国家环境中运行的话。我们可以使用字符比较方法，这些方法使用统一字符比较标准来定义字符的属性的。<br />错误示例：public class CLO {<br />public boolean isLetter (char ch) {<br />boolean _isLetter = ( ch &gt;= 'a' &amp;&amp; ch &lt;= 'z') //错误<br />|| (ch &gt;= 'A' &amp;&amp; ch &lt;= 'Z');<br />return _isLetter;<br />}<br />}<br /><br />正确示例：<br />public class CLOFixed {<br />public boolean isLetter (char ch) {<br />boolean _isLetter = Character.isLetter(ch); <br />return _isLetter;<br />}<br />}<br />参考： <a href="http://java.sun.com/docs/books/tuto.../checklist.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto.../checklist.html</font></a><br />更多的字符比较方法请参考：<a href="http://java.sun.com/docs/books/tuto.../charintro.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto.../charintro.html</font></a><br /><br />（7） 国际化开发建议：不要对日期对象使用'Date.toString ()'<br />不要使用'Date.toString ()'方法，日期格式对于地区和语言不同的国家来说是不一样的，务必不要使用。<br />错误示例：'DateFormat'类提供了一个预定义的格式类型来指定本地的格式。<br />public void printToday () {<br />Date today = new Date ();<br />String todayStr = today.toString (); <br />System.out.println (todayStr);<br />}<br />正确示例：<br />public void printToday () {<br />Locale currentLocale = Locale.getDefault ();<br />DateFormat dateFormatter = DateFormat.getDateInstance (<br />DateFormat.DEFAULT, currentLocale);<br />Date today = new Date ();<br />String todayStr = dateFormatter.format (today); <br />System.out.println (todayStr);<br />}<br />参考：<a href="http://java.sun.com/docs/books/tuto.../checklist.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto.../checklist.html</font></a><br /><a href="http://java.sun.com/docs/books/tuto...dateFormat.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto...dateFormat.html</font></a><br /><br />（8） 国际化开发建议：不要对数字变量使用'toString ()'方法<br />在全球化的开发中，不要对数字变量使用'toString ()'方法，对于java.lang.Number的任何子类都适用。包括：BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, and Short.对于这样的情况，java里也与定义了"NumberFormat"方法来格式化。<br />错误示例：<br />public class NTS {<br />public void method (Double amount) {<br />String amountStr = amount.toString (); <br />System.out.println (amountStr);<br />}<br />}<br />正确示例：<br />public class NTSFixed {<br />public void method (Double amount) {<br />Locale currentLocale = Locale.getDefault ();<br />NumberFormat numberFormatter = <br />NumberFormat.getNumberInstance (currentLocale);<br />String amountStr = numberFormatter.format (amount); // <br />System.out.println (amountStr + ' ' + currentLocale.toString ());<br />}<br />}<br />参考：<a href="http://java.sun.com/docs/books/tuto.../checklist.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto.../checklist.html</font></a><br /><a href="http://java.sun.com/docs/books/tuto...mberFormat.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto...mberFormat.html</font></a><br /><br />（9） 国际化开发建议:不要使用'String.equals ()'方法<br />建议不要使用'String.equals ()'方法，因为在统一字符比较标准中不一定按照相关的顺序来比较。'Collator'提供的预定义整理规则来排序string，Collator类调用'getInstance ()'方法，一般来说，可以为默认的本地创建一个Collator。例如：Collator myCollator = Collator.getInstance ();创建Collator的时候你也可以指定一个特殊的locale。例如：Collator myFrenchCollator = Collator.getInstance (Locale.FRENCH);然后就可以调用'Collator.compare ()'来执行一个本地的字符比较myCollator.compare (s1,s2);从这里可以了解更多的有关Collator类的信息：<a href="http://java.sun.com/docs/books/tuto...ationintro.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto...ationintro.html</font></a><br /><br />错误示例：<br />public class SE {<br />public boolean compstr (String s1, String s2) {<br />boolean b = (s1.equals (s2)); <br />return b;<br />}<br />}<br />正确示例：<br />public class SEFixed {<br />public boolean compstr (String s1, String s2) {<br />Collator myCollator = Collator.getInstance ();<br />boolean b = (myCollator.compare(s1,s2) == 0); <br />return b;<br />}<br />}<br /><br />参考：<a href="http://java.sun.com/docs/books/tuto.../checklist.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto.../checklist.html</font></a><br /><a href="http://java.sun.com/docs/books/tuto...ext/locale.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto...ext/locale.html</font></a><br /><br />（10） 国际化开发建议：不要使用'StringTokenizer()'方法<br />错误示例：StringTokenizer st = new StringTokenizer(str); <br />可以从这里得到更多的信息：‘<br />参考：<a href="http://java.sun.com/docs/books/tuto.../checklist.html" target="_blank"><font color="#000080">http://java.sun.com/docs/books/tuto.../checklist.html</font></a><br /><br />（11） 国际化开发建议：不要使用'Time.toString ()'方法<br />因为时间的格式各个国家也不一样。如果你使用日期格式类，你的应用就能够在世界上各个地方正确的显示时间和日期了。首先，用'getTimeInstance ()'方法创建一个formatter。然后，调用'format ()'方法。<br />错误示例：<br />public class TTS {<br />public void printTime (Time t1) {<br />String timeStr = t1.toString (); <br />System.out.println (timeStr);<br />}<br />}<br />正确示例：<br />import java.sql.Time;<br />import java.text.DateFormat;<br />import java.util.Locale;<br /><br />public class TTSFixed {<br />public void printTime (Time t1) {<br />DateFormat timeFormatter = DateFormat.getTimeInstance(<br />DateFormat.DEFAULT, Locale.getDefault ());<br />String timeStr = timeFormatter.format(t1);<br />System.out.println (timeStr);<br />}<br />}</span>  </div>
<img src ="http://www.blogjava.net/ywsky/aggbug/80868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-13 12:46 <a href="http://www.blogjava.net/ywsky/archive/2006/11/13/80868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>