﻿<?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-Tomorrow Belong To Nobody...-文章分类-J2EE</title><link>http://www.blogjava.net/leweslove/category/31948.html</link><description>             永远也走不出这操蛋的围城...</description><language>zh-cn</language><lastBuildDate>Sun, 30 Nov 2008 12:22:33 GMT</lastBuildDate><pubDate>Sun, 30 Nov 2008 12:22:33 GMT</pubDate><ttl>60</ttl><item><title>Java And IO</title><link>http://www.blogjava.net/leweslove/articles/Evan.html</link><dc:creator>leweslove</dc:creator><author>leweslove</author><pubDate>Fri, 28 Nov 2008 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/leweslove/articles/Evan.html</guid><wfw:comment>http://www.blogjava.net/leweslove/comments/243292.html</wfw:comment><comments>http://www.blogjava.net/leweslove/articles/Evan.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leweslove/comments/commentRss/243292.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leweslove/services/trackbacks/243292.html</trackback:ping><description><![CDATA[一． Input和Output <br />
1. stream代表的是任何有能力产出数据的数据源，或是任何有能力接收数据的接收源。在Java的IO中，所有的stream（包括Input和Out stream）都包括两种类型： <br />
1.1 以字节为导向的stream <br />
以字节为导向的stream，表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型： <br />
1) input　stream： <br />
1) ByteArrayInputStream：把内存中的一个缓冲区作为InputStream使用 <br />
2) StringBufferInputStream：把一个String对象作为InputStream <br />
3) FileInputStream：把一个文件作为InputStream，实现对文件的读取操作 <br />
4) PipedInputStream：实现了pipe的概念，主要在线程中使用 <br />
5) SequenceInputStream：把多个InputStream合并为一个InputStream <br />
2) Out　stream <br />
1) ByteArrayOutputStream：把信息存入内存中的一个缓冲区中 <br />
2) FileOutputStream：把信息存入文件中 <br />
3) PipedOutputStream：实现了pipe的概念，主要在线程中使用 <br />
4) SequenceOutputStream：把多个OutStream合并为一个OutStream <br />
1.2 以Unicode字符为导向的stream <br />
以Unicode字符为导向的stream，表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型： <br />
1) Input　Stream <br />
1) CharArrayReader：与ByteArrayInputStream对应 <br />
2) StringReader：与StringBufferInputStream对应 <br />
3) FileReader：与FileInputStream对应 <br />
4) PipedReader：与PipedInputStream对应 <br />
2) Out　Stream <br />
1) CharArrayWrite：与ByteArrayOutputStream对应 <br />
2) StringWrite：无与之对应的以字节为导向的stream <br />
3) FileWrite：与FileOutputStream对应 <br />
4) PipedWrite：与PipedOutputStream对应 <br />
<br />
以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同，字是在操作时的导向不同。如
CharArrayReader：和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用，所不同的
是前者每次从内存中读取一个字节的信息，而后者每次从内存中读取一个字符。 <br />
1.3 两种不现导向的stream之间的转换 <br />
InputStreamReader和OutputStreamReader：把一个以字节为导向的stream转换成一个以字符为导向的stream。 <br />
2. stream添加属性 <br />
2.1 &#8220;为stream添加属性&#8221;的作用 <br />
运用上面介绍的Java中操作IO的API，我们就可完成我们想完成的任何操作了。但通过FilterInputStream和FilterOutStream的子类，我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。 <br />
如果我们要往一个文件中写入数据，我们可以这样操作： <br />
FileOutStream fs = new FileOutStream(&#8220;test.txt&#8221;); <br />
然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是，如果我们想实现&#8220;先把要写入文件的数据先缓存到内存
中，再把缓存中的数据写入文件中&#8221;的功能时，上面的API就没有一个能满足我们的需求了。但是通过FilterInputStream和
FilterOutStream的子类，为FileOutStream添加我们所需要的功能。 <br />
2.2 FilterInputStream的各种类型 <br />
2.2.1 用于封装以字节为导向的InputStream <br />
1) DataInputStream：从stream中读取基本类型（int、char等）数据。 <br />
2) BufferedInputStream：使用缓冲区 <br />
3) LineNumberInputStream：会记录input stream内的行数，然后可以调用getLineNumber()和setLineNumber(int) <br />
4) PushbackInputStream：很少用到，一般用于编译器开发 <br />
2.2.2 用于封装以字符为导向的InputStream <br />
1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader，否则使用DataInputStream <br />
2) BufferedReader：与BufferedInputStream对应 <br />
3) LineNumberReader：与LineNumberInputStream对应 <br />
4) PushBackReader：与PushbackInputStream对应 <br />
2.3 FilterOutStream的各种类型 <br />
2.2.3 用于封装以字节为导向的OutputStream <br />
1) DataIOutStream：往stream中输出基本类型（int、char等）数据。 <br />
2) BufferedOutStream：使用缓冲区 <br />
3) PrintStream：产生格式化输出 <br />
2.2.4 用于封装以字符为导向的OutputStream <br />
1) BufferedWrite：与对应 <br />
2) PrintWrite：与对应 <br />
3. RandomAccessFile <br />
1) 可通过RandomAccessFile对象完成对文件的读写操作 <br />
2) 在产生一个对象时，可指明要打开的文件的性质：r，只读；w，只写；rw可读写 <br />
3) 可以直接跳到文件中指定的位置 <br />
4. I/O应用的一个例子<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;"><span style="font-size: 24pt;"><span style="font-size: 14pt;"><span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 14pt;"><span style="font-size: 18pt;"><span style="font-family: Comic Sans MS;"><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.</span><span style="color: #000000;">*</span><span style="color: #000000;">;<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;TestIO{<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)<br />
</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException{<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">1.以行为单位从一个文件读取数据</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">BufferedReader&nbsp;in&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedReader(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileReader(</span><span style="color: #000000;">"</span><span style="color: #000000;">F:\\nepalon\\TestIO.java</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
String&nbsp;s,&nbsp;s2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String();<br />
</span><span style="color: #0000ff;">while</span><span style="color: #000000;">((s&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;in.readLine())&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />
s2&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;s&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
in.close();<br />
<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">1b.&nbsp;接收键盘的输入</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">BufferedReader&nbsp;stdin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedReader(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;InputStreamReader(System.in));<br />
System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Enter&nbsp;a&nbsp;line:</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
System.out.println(stdin.readLine());<br />
<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">2.&nbsp;从一个String对象中读取数据</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">StringReader&nbsp;in2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StringReader(s2);<br />
</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;c;<br />
</span><span style="color: #0000ff;">while</span><span style="color: #000000;">((c&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;in2.read())&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />
System.out.println((</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)c);<br />
in2.close();<br />
<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">3.&nbsp;从内存取出格式化输入</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
DataInputStream&nbsp;in3&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DataInputStream(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ByteArrayInputStream(s2.getBytes()));<br />
</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">)<br />
System.out.println((</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)in3.readByte());&nbsp;<br />
}<br />
</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(EOFException&nbsp;e){<br />
System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">End&nbsp;of&nbsp;stream</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
}<br />
<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">4.&nbsp;输出到文件</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
BufferedReader&nbsp;in4&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedReader(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StringReader(s2));<br />
PrintWriter&nbsp;out1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PrintWriter(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedWriter(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileWriter(</span><span style="color: #000000;">"</span><span style="color: #000000;">F:\\nepalon\\&nbsp;TestIO.out</span><span style="color: #000000;">"</span><span style="color: #000000;">)));<br />
</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;lineCount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #0000ff;">while</span><span style="color: #000000;">((s&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;in4.readLine())&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />
out1.println(lineCount</span><span style="color: #000000;">++</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">：</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;s);<br />
out1.close();<br />
in4.close();<br />
}<br />
</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(EOFException&nbsp;ex){<br />
System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">End&nbsp;of&nbsp;stream</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
}<br />
<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">5.&nbsp;数据的存储和恢复</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
DataOutputStream&nbsp;out2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DataOutputStream(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedOutputStream(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileOutputStream(</span><span style="color: #000000;">"</span><span style="color: #000000;">F:\\nepalon\\&nbsp;Data.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">)));<br />
out2.writeDouble(</span><span style="color: #000000;">3.1415926</span><span style="color: #000000;">);<br />
out2.writeChars(</span><span style="color: #000000;">"</span><span style="color: #000000;">\nThas&nbsp;was&nbsp;pi:writeChars\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
out2.writeBytes(</span><span style="color: #000000;">"</span><span style="color: #000000;">Thas&nbsp;was&nbsp;pi:writeByte\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
out2.close();<br />
DataInputStream&nbsp;in5&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DataInputStream(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedInputStream(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileInputStream(</span><span style="color: #000000;">"</span><span style="color: #000000;">F:\\nepalon\\&nbsp;Data.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">)));<br />
BufferedReader&nbsp;in5br&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedReader(<br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;InputStreamReader(in5));<br />
System.out.println(in5.readDouble());<br />
System.out.println(in5br.readLine());<br />
System.out.println(in5br.readLine());<br />
}<br />
<br />
</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(EOFException&nbsp;e){<br />
System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">End&nbsp;of&nbsp;stream</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
}<br />
<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">6.&nbsp;通过RandomAccessFile操作文件</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">RandomAccessFile&nbsp;rf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RandomAccessFile(</span><span style="color: #000000;">"</span><span style="color: #000000;">F:\\nepalon\\&nbsp;rtest.dat</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">rw</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
rf.writeDouble(i</span><span style="color: #000000;">*</span><span style="color: #000000;">1.414</span><span style="color: #000000;">);<br />
rf.close();<br />
<br />
rf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RandomAccessFile(</span><span style="color: #000000;">"</span><span style="color: #000000;">F:\\nepalon\\&nbsp;rtest.dat</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Value&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">：</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;rf.readDouble());<br />
rf.close();<br />
<br />
rf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RandomAccessFile(</span><span style="color: #000000;">"</span><span style="color: #000000;">F:\\nepalon\\&nbsp;rtest.dat</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">rw</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
rf.seek(</span><span style="color: #000000;">5</span><span style="color: #000000;">*</span><span style="color: #000000;">8</span><span style="color: #000000;">);<br />
rf.writeDouble(</span><span style="color: #000000;">47.0001</span><span style="color: #000000;">);<br />
rf.close();<br />
<br />
rf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RandomAccessFile(</span><span style="color: #000000;">"</span><span style="color: #000000;">F:\\nepalon\\&nbsp;rtest.dat</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Value&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">：</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;rf.readDouble());<br />
rf.close();<br />
}<br />
}</span></span></span></span></span></span></span></span></span><span style="color: #000000;"><br />
</span></div>
<br />
<br />
关于代码的解释（以区为单位）： <br />
1区中，当读取文件时，先把文件内容读到缓存中，当调用in.readLine()时，再从缓存中以字符的方式读取数据（以下简称&#8220;缓存字节读取方式&#8221;）。 <br />
1b区中，由于想以缓存字节读取方式从标准IO（键盘）中读取数据，所以要先把标准IO（System.in）转换成字符导向的stream，再进行BufferedReader封装。 <br />
2区中，要以字符的形式从一个String对象中读取数据，所以要产生一个StringReader类型的stream。 <br />
4区中，对String对象s2读取数据时，先把对象中的数据存入缓存中，再从缓冲中进行读取；对TestIO.out文件进行操作时，先把格式化后的信息输出到缓存中，再把缓存中的信息输出到文件中。 <br />
5区中，对Data.txt文件进行输出时，是先把基本类型的数据输出屋缓存中，再把缓存中的数据输出到文件中；对文件进行读取操作时，先把文件中的数据
读取到缓存中，再从缓存中以基本类型的形式进行读取。注意in5.readDouble()这一行。因为写入第一个writeDouble()，所以为了
正确显示。也要以基本类型的形式进行读取。 <br />
6区是通过RandomAccessFile类对文件进行操作。 <br />
<img src ="http://www.blogjava.net/leweslove/aggbug/243292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leweslove/" target="_blank">leweslove</a> 2008-11-28 17:04 <a href="http://www.blogjava.net/leweslove/articles/Evan.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个过程？？</title><link>http://www.blogjava.net/leweslove/articles/243279.html</link><dc:creator>leweslove</dc:creator><author>leweslove</author><pubDate>Fri, 28 Nov 2008 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/leweslove/articles/243279.html</guid><wfw:comment>http://www.blogjava.net/leweslove/comments/243279.html</wfw:comment><comments>http://www.blogjava.net/leweslove/articles/243279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leweslove/comments/commentRss/243279.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leweslove/services/trackbacks/243279.html</trackback:ping><description><![CDATA[<table id="BodyTable" style="table-layout: fixed; font-size: 75%; vertical-align: top; font-family: Simsun; text-align: left;" cellspacing="0">
    <tbody style="vertical-align: top;">
        <tr style="background-color: #e0edff;">
            <td><span style="font-weight: bold; color: #800080; font-family: Trebuchet MS;">1.学习Java
            SE部分的内容，这部分是基础内容。掌握的越扎实，后面的内容学习起来就越容易。<br />
            <br />
            &nbsp;2.学习SQL和数据库的内容
            ，这个也是非常基础的内容，举个例子：程序员的面试题中一定会有SQL部分的考试。 <br />
            <br />
            &nbsp;3.学习HTML、css、JavaScript的内容。
            <br />
            <br />
            &nbsp;4.学习，JSP、Servlet、JavaBean、标记库、JSTL、MVC、JSP EL等Web编程的部分 <br />
            &nbsp;<br />
            &nbsp;5.学习Struts 或者Spring
            MVC。二者取其一即可，推荐选Struts <br />
            &nbsp;<br />
            &nbsp;6.学习Java与XML ，重点掌握使用Java技术对XML文件的解析 <br />
            &nbsp;<br />
            &nbsp;7.学习Java EE的核心技术
            ，例如：JNDI、EJB3等，同时还需要学习使用与配置应用服务器，例如：webLogic Server，Websphere，JBoss<br />
            <br />
            &nbsp;8.学习Hibernate 等持久层的技术<br />
            <br />
            &nbsp;9.学习Spring<br />
            <br />
            &nbsp;10.学习AJAX<br />
            <br />
            &nbsp;</span><span style="font-weight: bold; color: #800080; font-family: Trebuchet MS;">11.学习ANT、Subversion等开发工具，熟悉常见的软件开发模型，例如：rup、XP<br />
            <br />
            &nbsp;12.学习OOA与OOD，uml，设计模式<br />
            <br />
            &nbsp;13.学习Web Services、SOA的原理与应用开发<br />
            <br />
            &nbsp;</span><span style="font-weight: bold; color: #800080; font-family: Trebuchet MS;">最后，现在很多公司都使用Linux系统做为服务器系统，并且使用Linux系统进行程序的开发（都是出于使用正版的考虑），所以Linux系统的安装、使用和简单管与配置，也是需要学习，这部分内容，跟其他内容没有关联，可以在任何时候学。推荐学习完SQL与数据库之后进行学习。
            你要想找到一份不错的Java程序员工作，最基本的也要把1－12都学习了，当然有的内容需要深入掌握，有的内容可以慢慢的深入掌握的。</span></td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/leweslove/aggbug/243279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leweslove/" target="_blank">leweslove</a> 2008-11-28 16:35 <a href="http://www.blogjava.net/leweslove/articles/243279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet笔记（一）</title><link>http://www.blogjava.net/leweslove/articles/205928.html</link><dc:creator>leweslove</dc:creator><author>leweslove</author><pubDate>Wed, 04 Jun 2008 14:15:00 GMT</pubDate><guid>http://www.blogjava.net/leweslove/articles/205928.html</guid><wfw:comment>http://www.blogjava.net/leweslove/comments/205928.html</wfw:comment><comments>http://www.blogjava.net/leweslove/articles/205928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leweslove/comments/commentRss/205928.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leweslove/services/trackbacks/205928.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 还记得年前在看尚学堂教程时候马先生曾经说过&#8220;JavaScript在客户端无所不能，而Servlet在服务器端无所不能&#8221;。这句话让我感觉Servlet深不可测。<br />
&nbsp;&nbsp;&nbsp; 而在后来知道JSP，JSF，还有一系列WEB开发框架也是基于Servlet的时候更是对它怀有憧憬之神往。所以从今天起，开始继续重新整理下Servlet。<br />
&nbsp;&nbsp;&nbsp; 自己看的东西，面上话就不说了，概念的东西网上一搜都有。<br />
&nbsp;&nbsp;&nbsp; J2EE就是一系列标准，Servlet属于它所以也不例外。一些WEB容器符合这标准规范，就可以在其中使用Servlet。只用过TOMCAT所以别的就不说了。<br />
&nbsp;&nbsp;&nbsp; 在TOMCAT中，WEB程序都在&#8220;webapps&#8221;这个文件夹中。要符合Servlet标准，就有类似与这样的一个结构：<span style="color: #ff0000;"><span style="color: #ff0000;"><span style="color: #ff0000;"><span style="color: #ff0000;"><span style="color: Black;">1、在项目目录下必须存在&#8220;WEB-INF&#8221;这个目录。2、&#8220;WEB-INF&#8221;下必须有一个&#8220;web.xml&#8221;文件，这个文件符合J2EE规范。3、如果要跑Servlet在&#8220;WEB-INF&#8221;下存在一个&#8220;classes&#8221;文件夹里面存放编译好的Servlet文件（*.class)。4、&#8220;WEB-INF&#8221;下包含一个&#8220;lib&#8221;文件夹来存放所用到的&#8220;jar包&#8221;。</span></span></span></span></span><span style="color: #ff0000;"></span><span style="color: Black;"><br />
&nbsp;&nbsp;&nbsp; <img src="http://www.blogjava.net/images/blogjava_net/leweslove/mulu.jpg" alt="" border="0" /><br />
<span style="color: #040000;"><span style="color: #1a1e5e;"><span style="color: #010102;"><span style="color: #1a1e5e;">Servlet是一个接口，Servlet是在服务器端运行的程序，也可以在除HTTP服务器外的其他服务器端运行，一般情况来说我们要实现Servlet这个接口就实现它的子类，GenericServle直接实现Serlvet但是个抽象类，所以直接实现</span><span style="color: Black;">GenericServle</span><span style="color: Black;">的子类HttpSerlvet。<br />
&nbsp;&nbsp;&nbsp; 当客户端请求服务器的时候所制定的Servlet会被调用。doGet和doPost方法，直接在url访问是调用doGet只有在通过Form提交时候并且Form的action属性为post时候才调用doPost方法。<br />
&nbsp;&nbsp;&nbsp; 这两个方法里都有两个参数&#8220;request&#8221;和&#8220;response&#8221;request是取得从客户端拿来的数据，而response是对客户端发送数据。<br />
&nbsp;&nbsp;&nbsp; 新建一个Servlet，名字为&#8220;<span style="color: #ff0000;">HelloWorld.java</span>&#8221;我把代码贴下面。（建的时候如果IDE是不支持Servlet的话就先吧Servlet-api.jar这个包导入工程中，比如在用Eclipse做开发的时候。）<br />
</span></span></span></span></span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.IOException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.PrintWriter;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.servlet.ServletException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.servlet.http.HttpServlet;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.servlet.http.HttpServletRequest;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.servlet.http.HttpServletResponse;<br />
<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;HelloWorld&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;HttpServlet&nbsp;{<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; response.setContentType(</span><span style="color: #000000;">"</span><span style="color: #000000;">text/html</span><span style="color: #000000;">"</span><span style="color: #000000;">);//文件类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PrintWriter&nbsp;out&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;response.getWriter();//拿到&#8220;out&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 简单，不说了，一系列的客户端输出<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;\</span><span style="color: #000000;">"</span><span style="color: #000000;">-</span><span style="color: #008000;">//</span><span style="color: #008000;">W3C</span><span style="color: #008000;">//</span><span style="color: #008000;">DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional</span><span style="color: #008000;">//</span><span style="color: #008000;">EN\"&gt;");</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;HTML&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;&lt;HEAD&gt;&lt;TITLE&gt;A&nbsp;Servlet&lt;/TITLE&gt;&lt;/HEAD&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;&lt;BODY&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(</span><span style="color: #000000;">"</span><span style="color: #000000;">HelloWorld!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;&lt;/BODY&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;/HTML&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
&nbsp;&nbsp;&nbsp; 建好这个文件之后编译它，然后把它放在刚才说的&#8220;<span style="color: #ff0000;">WEB-INF/classes/</span>&#8221;下面<br />
<img src="http://www.blogjava.net/images/blogjava_net/leweslove/class.jpg" alt="" border="0" /><br />
这样我就差配<span style="color: #ff0000;">web.xml</span>了，这个&#8220;web.xml&#8221;是web项目的配置核心。<br />
下面在WEB-INF下建立个文件，改名成"web.xml"<br />
把下面代码写到里面：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;">&nbsp;<br />
<br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">web-app&nbsp;</span><span style="color: #ff0000;">version</span><span style="color: #0000ff;">="2.4"</span><span style="color: #ff0000;">&nbsp;<br />
xmlns</span><span style="color: #0000ff;">="http://java.sun.com/xml/ns/j2ee"</span><span style="color: #ff0000;">&nbsp;<br />
xmlns:xsi</span><span style="color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000;">&nbsp;<br />
xsi:schemaLocation</span><span style="color: #0000ff;">="http://java.sun.com/xml/ns/j2ee&nbsp;<br />
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"> //Servlet配置<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Hello</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里是设置刚才写的servlet的名字可以随便起<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet-class</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">HelloWorld</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-class</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; //这里是class文件的名字，建立从classes目录下HelloWorld.class文件把文件名字拷贝过来，不要后缀。。。。<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
<br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet-mapping</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"> //Servlet映射<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Hello</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"> //这里是指要访问这个URL的时候对应需要调用哪个 Servlet。注意跟上面的&#8220;servlet名字&#8221;一直，而不是类名。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">url-pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/Hello</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">url-pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"> //设置需要访问的url是跟在你webapps下面项目名字后的记得以&#8220;/&#8221;开头<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-mapping</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">web-app</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"> <br />
</span></div>
都配完了。<br />
现在开启tomcat服务器。这么简单的程序，应该不出错的，如果出错，最多的应该是web.xml文件的错误，配置问题，请自己检查。而且注意，servlet-class里&#8220;<span style="color: #ff0000;">HelloWorld</span>&#8221;要与你的<span style="color: #ff0000;">HelloWorld.class</span>名字大小写一致。<br />
打开浏览器。如果你跟我的目录一模一样的话，就应该输入 <span style="color: #ff0000;">http://localhost:8080/TestServlet/Hello</span><br />
<img src="http://www.blogjava.net/images/blogjava_net/leweslove/final.jpg" alt="" border="0" /><br />
<span style="color: Black;"><span style="color: #040000;"><span style="color: #1a1e5e;"><span style="color: #010102;"><span style="color: Black;">&nbsp;&nbsp;&nbsp; 今天心情不好，就写到这里吧。<br />
<br />
</span></span></span></span></span><span style="color: #1a1e5e;"><br />
</span>
<img src ="http://www.blogjava.net/leweslove/aggbug/205928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leweslove/" target="_blank">leweslove</a> 2008-06-04 22:15 <a href="http://www.blogjava.net/leweslove/articles/205928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>