121、Stream根據功能可分為數據偵聽(tīng)器流(data Sink Stream,偵聽(tīng)器:內存、管道、文件)和進(jìn)程流
(Processing Stream)
122、在談Java的流類(lèi)之前,先談如何生成一個(gè)File對象,它時(shí)一個(gè)和流無(wú)關(guān)的類(lèi)。File對象可用來(lái)生成
和文件(及其所在的路徑)或目錄結構相關(guān)的對象,由于不同的系統可能會(huì )有不同的目錄結果表示法,使
用File可完成和系統無(wú)關(guān)的目的(使用抽象的路徑表示法)。
123、File對象生成方法:
File(String path):將一個(gè)代表路徑的字符串轉換為抽象的路徑表示法
File(String parent,String child):parent代表目錄,child代表文件,child不可為空
File(File parent,String child):parent代表一個(gè)File對象的目錄,child代表文件,child不
可為空
124、File提供一些方法來(lái)測試或檢查一個(gè)File對象:
boolean exists():若該文件或目錄存在,則返回true
boolean isDirectory():若為目錄則返回true
File[] listFiles():得到該對象所代表的目錄下的File對象數組,若不為該目錄,則返回null
String[] list():同上,但返回一個(gè)String數組
long length():得到和該對象相關(guān)的文件的大小,若不存在,則返回值為0L
String toString():得到抽象路徑表示法
String getParent():得到抽象路徑表示法的目錄部分(不包含最后一個(gè)部分)
String getName():得到抽象路徑表示法的最后一個(gè)部分
125、改變一個(gè)File對象的方法:
boolean renameTo(File newName):將目前File對象所代表的路徑名改為newName所代表的路徑名
。若更改成功,則返回值為true
boolean mkdir():生成一個(gè)新的目錄。入成功,則返回值為true
boolean mkdirs():生成一個(gè)新的目錄,包含不存在的子目錄。若成功,返回值為true
boolean delete():刪除目前File對象所代表的文件或目錄,若是目錄,則需為空的。若成功,
返回true
126、沒(méi)有參數的listFiles()會(huì )列出所有的文件名。使用File[] listFiles(FilenameFilter filter)過(guò)
濾某些特殊的擴展名或包含某些字符的文件名。FilenameFilter是一個(gè)接口,必須生成一個(gè)實(shí)現它的類(lèi)來(lái)
負責過(guò)濾文件名,該類(lèi)需取代FilenameFilter惟一的方法accept()。boolean accept(File dir,String
name),若返回為true則會(huì )將目前檢查的文件包含在listFiles()的返回數組內。
127、字節流的構造函數:
FileInputStream(String name):打開(kāi)文件name用以讀取數據
FileInputStream(File file):打開(kāi)和File對象file相關(guān)聯(lián)的文件,用以讀取數據
FileOutputStream(String name):打開(kāi)文件name用以寫(xiě)入數據
FileOutputStream(File file):打開(kāi)和File對象file相關(guān)聯(lián)的文件,用以寫(xiě)入數據
FileOutputStream(String name,boolean append):打開(kāi)文件name用以寫(xiě)入數據,若append為
true,則寫(xiě)入的數據會(huì )加到原有的文件后。
128、字節數組(byte array)的構造函數:
ByteArrayInputStream(byte[] buffer):生成一個(gè)字節數組的輸入流,并指定一個(gè)字節數組
buffer為此輸入流的流緩沖區。
ByteArrayOutputStream():生成一個(gè)字節數組的輸出流,其緩沖區的默認初始大小為32字節,若
有需要,緩沖區的大小會(huì )隨之增加
ByteArrayOutputStream(int size):同上,但分配size字節的初始大小給緩沖區。
129、一些ByteArrayOutStream常用的方法:
int size():返回此流緩沖區的大小
byte[] toByteArray():生成一個(gè)新的字節數組,并將流的內容復制到此自己數組。
String toString():將流的內容轉換為String對象。
130、文件的合并:SequenceInputStream
SequenceInputStream(InputStream head,InputStream tail):生成一個(gè)新的輸入流,先讀入
head,后是tail
SequenceInputStream(Enumeration enum):將enum內的流根據序合并韋一個(gè)新的輸入流,enum內
必須是InputStream對象。
131、Vector的功能就像一個(gè)數組,但它能根據需要來(lái)改變大小。
132、管道(pipe)提供一種線(xiàn)程間通信的方法,可由于IPC(Inter-Process Communication,進(jìn)程間通
信)或是ITC(Inter-Thread Communication,線(xiàn)程間通信),但它無(wú)法執行不同主機之間的通信。
133、一個(gè)輸入管道是用來(lái)接收一個(gè)輸出管道所寫(xiě)出的數據,因此,一個(gè)線(xiàn)程會(huì )負責送出
(PipedOutputStream對象)數據,而另一個(gè)線(xiàn)程需負責接收(PipedInputStream對象)這些數據。
134、管道的數據流(data flow)是單向的,需要生成另一組輸入和輸出管道來(lái)負責另一個(gè)方向的數據傳
送。
135、如果要將管道輸出流的數據送到管道輸入流,可使用
PipedOutputStream(PipedInputStream pipeIn)或
connect(PipedInputStream pipeIn)
140、字符流的類(lèi):1),BufferedReader是一種過(guò)濾器(filter)(extends FilterReader)。過(guò)濾器用
來(lái)將流的數據加以處理再輸出。構造函數為:
BufferedReader(Reader in):生成一個(gè)緩沖的字符輸入流,in為一個(gè)讀取器
BufferedReader(Reader in,int size):生成一個(gè)緩沖的字符輸入流,并指定緩沖區的大小為
size
常用的方法為:
String readLine():讀入一行的文字(以\n或\r結尾),返回的String對象并不包含\n或\r,若
已達流的末端則返回null
當使用緩沖流的read()或readLine()讀取數據時(shí),先會(huì )嘗試從緩沖區讀取,若緩沖區中并沒(méi)有數
據,則會(huì )盡可能的將數據讀入緩沖區中,以留待后續的讀取。
141、2),LineNumberReader也是一種過(guò)濾器,而它也是一種緩沖流(extends BufferedReader),可用
來(lái)記錄讀入的行數,這里所謂的一行時(shí)以\n或\r結尾。常用方法:
int getLineNumber():得到目前的行數。
142、3),PrinterWriter也是一種過(guò)濾器(extendes FilterWriter),可用來(lái)將輸出導入某種設備。
143、I/O流的一個(gè)特點(diǎn)是它們能經(jīng)過(guò)流鏈接的方式結合在一起,每個(gè)流類(lèi)會(huì )執行特殊的工作再將結果傳到
下一個(gè)鏈接,可使用過(guò)濾器將流鏈接在一起。
BufferedReader inBuffer=new BufferedReader(new FileReader(inFile));
使用流鏈接時(shí),只需要關(guān)閉最外層的鏈接流,其他鏈接的流會(huì )自動(dòng)關(guān)閉??梢允褂玫逆溄邮亲詈笠粋€(gè)流(
inBuffer),此時(shí),我們并無(wú)法直接使用FileReader流。如果寫(xiě)成:
FileReader fileIn=new FileReader(inFile);
BufferedReader inBuffer=new BufferedReader(fileIn);
此時(shí),fileIn仍存在,這可能會(huì )因寫(xiě)程序的疏忽而造成同時(shí)有兩個(gè)流鏈接導同一個(gè)來(lái)源(inFile),這往
往會(huì )有潛在的危險。
144、隨機存?。篟andomAccessFile,構造函數
RandomAccessFile(File file,String mode):其中mode是用來(lái)指定存取的模式,可為r,w或rw
RandomAccessFile(String name,String mode):name為和系統相關(guān)的文件名字
常用方法:
讀?。篵oolean readBoolean();byte readByte();char readChar();double readDouble
();float readFloat();int readInt();long readLong();short readShort();String readLine()
寫(xiě)入:void writeByte(Byte v);void writeByte(String s);void writeChar(char v);void
writeChars(String s);void writeDouble(double v);void writeFloat(float v);void writeInt(int
v);void writeLong(long v);void writeShort(short v)
與目前文件位置有關(guān)的方法:
void seek(long pos):將文件指針移到pos(不可為負)的位置這是相對于文件初始位置的值(
初始值為0)
long getFilePointer():得到目前文件指針的位置。
long length():得到文件的長(cháng)度
145、文件壓縮及解壓縮方法:ZipInputStream(extends InflaterInputStream)和ZipOutputStream
(extends DeflaterOutputStream)
146、將文件寫(xiě)入ZIP文件的步驟:
1)生成和所要生成的ZIP文件相關(guān)聯(lián)的ZipOutputStream對象
2)一個(gè)ZIP文件往往不只含有一個(gè)壓縮文件,我們將每個(gè)要加入的文件稱(chēng)為一個(gè)ZIP入口,我們
使用ZipEntry(String fileName)來(lái)生成這些ZipEntry對象。
3)使用putNextEntry(ZipEntry entry)將此ZIP入口加入ZIP文件
4)將文件內容寫(xiě)入此ZIP文件
5)使用closeEntry()結束目前的ZIP入口,繼續下一個(gè)ZIP入口
147、將壓縮文件從ZIP文件讀出的步驟:
1)生成和所要讀入的ZIP文件相關(guān)聯(lián)的ZipInputStream對象
2)利用getNextEntry()得到下一個(gè)ZIP入口
148、我們將對象存取自一個(gè)流稱(chēng)為序列化(serialization),為了完成對象的序列化(將一個(gè)對象寫(xiě)導
流稱(chēng)為序列化(serializing),而從一個(gè)流將對象讀出稱(chēng)為反序列化(deserializing))。
149、存取的對象需滿(mǎn)足下列條件:
類(lèi)需為public
類(lèi)需實(shí)現Serializable接口
若有數據不是可序列化的或不需要寫(xiě)出,則需將其聲明為transient
150、java.io提供ObjectInputStream和ObjectOutputStream來(lái)存取對象,由于它們和DataInputStream及
DataOutputStream有共同的接口,因此它們也可使用相同的方法來(lái)讀取或寫(xiě)入數據。還有其他的方法:
void writeObject(Object obj):用于ObjectOutputStream,將對象寫(xiě)入流
Object readObject():用于ObjectInputStream,將對象由流讀出。
聯(lián)系客服