Java無難事09

1、File類:

一個(gè)File類的對(duì)象,表示了磁盤上的文件或目錄;

File類提供了與平臺(tái)無關(guān)的方法來對(duì)磁盤上的文件或目錄進(jìn)行操作;

createNewFile()創(chuàng)建新文件;

mkdir()創(chuàng)建新目錄;

separator分隔符;

delete()刪除一個(gè)文件;

deleteOnExit()當(dāng)程序終止時(shí)刪除一個(gè)文件;

createTempFile()創(chuàng)建臨時(shí)文件,返回File類型(創(chuàng)建一個(gè)空文件在缺省的臨時(shí)目錄下);

list()返回目錄中所有的文件名和子目錄名,返回String類型;

List(FilenameFilter filter)傳遞一個(gè)文件名的過濾器;

FilenameFilter()是一個(gè)接口;

isDirectory()判斷是否是目錄;

indexof()方法是在String中查找子串;如果這個(gè)子串存在返回它的索引值,如果不存在返回-1;

2、流式I/O

流(Stream)是字節(jié)的源或目的;

兩種基本的流是:輸入流(Input Stream)和輸出流(Output Stream)??蓮闹凶x出一系列字節(jié)的對(duì)象稱為輸入流。而能向其中寫入一系列字節(jié)的對(duì)象稱為輸出流。

3、流的分類

節(jié)點(diǎn)流:從特定的地方讀寫的流類,例如:磁盤或一塊內(nèi)存區(qū)域。

過濾流:使用節(jié)點(diǎn)流作為輸入或輸出。過濾流是使用一個(gè)已經(jīng)存在的輸入流或輸出流連接創(chuàng)建的。

4、InputStream:

三個(gè)基本的讀方法

abstract int read():讀取一個(gè)字節(jié)數(shù)據(jù),并返回讀到的數(shù)據(jù),如果返回-1,表示讀到了輸入流的末尾。

int read(byte[] b):將數(shù)據(jù)讀入一個(gè)字節(jié)數(shù)組,同時(shí)返回實(shí)際讀取的字節(jié)數(shù)。如果返回-1,表示讀到了輸入流的末尾。

int read(byte[] b, int off, int len):將數(shù)據(jù)讀入一個(gè)字節(jié)數(shù)組,同時(shí)返回實(shí)際讀取的字節(jié)數(shù)。如果返回-1,表示讀到了輸入流的末尾。off指定在數(shù)組b中存放數(shù)據(jù)的起始偏移位置;len指定讀取的最大字節(jié)數(shù)。

其他方法

long skip(long n):在輸入流中跳過n個(gè)字節(jié),并返回實(shí)際跳過的字節(jié)數(shù)。

int available ():返回在不發(fā)生阻塞的情況下,可讀取的字節(jié)數(shù)。

void close():關(guān)閉輸入流,釋放和這個(gè)流相關(guān)的系統(tǒng)資源。

void mark(int readlimit):在輸入流的當(dāng)前位置放置一個(gè)標(biāo)記,如果讀取的字節(jié)數(shù)多于readlimit設(shè)置的值,則流忽略這個(gè)標(biāo)記。

void reset():返回到上一個(gè)標(biāo)記;

boolean markSupported():測(cè)試當(dāng)前流是否支持mark和reset方法。如果支持,返回true,否則返回false。

5、OutputStream

三個(gè)基本的寫方法:

abstract void write(int b):往輸出流中寫入一個(gè)字節(jié);

void write(byte[] b):往輸出流中寫入數(shù)組b中的所有字節(jié)。

void write(byte[] b,int off,int len):往輸出流中寫入數(shù)組b中從偏移量off開始的len個(gè)字節(jié)的數(shù)據(jù)。

其他方法:

void flush():刷新輸出流,強(qiáng)制緩沖區(qū)中的輸出字節(jié)被寫出;

void close():關(guān)閉輸出流,釋放和這個(gè)流相關(guān)的系統(tǒng)資源。

6、基本的流類

FileInputStream和FileOutPutStream

節(jié)點(diǎn)流,用于從文件中讀取或往文件中寫入字節(jié)流。如果在構(gòu)造FileOutPutStream時(shí),文件已經(jīng)存在,則覆蓋這個(gè)文件??梢酝ㄟ^File類對(duì)象構(gòu)造,也可以通過文件名構(gòu)造。

BuffereInputStream和BufferedOutputStream

過濾流,需要使用已經(jīng)存在的節(jié)點(diǎn)流來構(gòu)造,提供帶緩沖的讀寫,提高了讀寫的效率

DataInputStream和DataOutputStream

過濾流,需要使用已經(jīng)存在的節(jié)點(diǎn)流來構(gòu)造,提供了讀寫java中的基本數(shù)據(jù)類型的功能。

PipedInputStream和PipedOutputStream

管道流,用于線程間的通信。一個(gè)線程的PipedInputStream對(duì)象從另一個(gè)線程的PipedOutputStream對(duì)象讀取輸入。要使管道流有用,必須同時(shí)構(gòu)造管道輸入流和管道輸出流。

7、Java的I/O庫的設(shè)計(jì)原則:

java的I/O庫提供了一個(gè)稱作鏈接的機(jī)制,可以將一個(gè)流與另一個(gè)流首尾相連,形成一個(gè)管道流的鏈接。這種機(jī)制實(shí)際上是一種被稱為Dectorator(裝飾)設(shè)計(jì)模式的應(yīng)用;

通過流的鏈接,可以動(dòng)態(tài)的增加流的功能,而這種功能的增加是通過組合一些流的基本功能而動(dòng)態(tài)獲取的;

我們要要獲取一個(gè)I/O對(duì)象,往往需要產(chǎn)生多個(gè)I/O對(duì)象,這也是java I/O庫不太容易掌握的原因,但在I/O庫中Decorator模式的運(yùn)用,給我們提供了實(shí)現(xiàn)上的靈活性。

8、I/O流的鏈接

9、Reader和Writer

與InputStream和OutputStream對(duì)應(yīng),InputStream和OutputStream是用來對(duì)字節(jié)流進(jìn)行操作的,Reader和Writer主要是對(duì)字符流進(jìn)行操作。

java程序語言使用Unicode來表示字符串和字符;

Reader和Writer這兩個(gè)抽象類主要用來讀寫字符流。

10、InputStreamWriter和OutputStreamWriter:

InputStreamWriter:字節(jié)流到字符流轉(zhuǎn)換的橋梁;

OutputStreamWriter:字符流到字節(jié)流轉(zhuǎn)換的橋梁;

11、字符集的編碼

12、編碼和解碼:

解碼:(InputStreamReader)使用指定的字符集將讀到的字節(jié)解碼為字符,去獲取Unicode碼(字符和字符串都是采用Unicode表示)就是一個(gè)解碼過程

編碼:(OutputStreamWriter) 使用指定的字符集將字符編碼為字節(jié)(OutputStreamWriter),將字符或字符串轉(zhuǎn)化為字節(jié)就是一個(gè)編碼過程。

13、RandomAccessFile:

RandomAccessFile類同時(shí)實(shí)現(xiàn)了DataInput和DataOutput接口,提供了對(duì)文件隨機(jī)存儲(chǔ)的功能,利用這個(gè)類可以在文件的任何位置讀取或?qū)懭霐?shù)據(jù)。

RandomAccessFile類提供了一個(gè)文件指針,用來標(biāo)志要進(jìn)行讀寫操作的下一位數(shù)據(jù)的位置。

getFilePointer()指向下一個(gè)將要讀取的數(shù)據(jù)的位置,返回類型為long;

seek()設(shè)置文件指針偏移量;seek(0)將文件指針移到起始位置;

14、對(duì)象序列化:

將對(duì)象轉(zhuǎn)換為字節(jié)流保存起來,并在日后還原這個(gè)對(duì)象,這種機(jī)制叫做對(duì)象序列化;

將一個(gè)對(duì)象保存在永久性設(shè)備上稱為持續(xù)性;

一個(gè)對(duì)象要想能實(shí)現(xiàn)序列化,必須實(shí)現(xiàn)Serializable接口(空接口)或Externalizable接口;

當(dāng)一個(gè)對(duì)象被序列化時(shí),只保存對(duì)象的非靜態(tài)成員變量,不能保存任何的成員方法和靜態(tài)的成員變量;

如果一個(gè)對(duì)象的成員變量是一個(gè)對(duì)象,那么這個(gè)對(duì)象的數(shù)據(jù)成員也會(huì)被保存;

如果一個(gè)可序列化的對(duì)象包含對(duì)某個(gè)不可序列化的對(duì)象的引用,那么整個(gè)序列化操作將會(huì)失敗,并且會(huì)拋出NotSerializableException。我們可以將這個(gè)引用標(biāo)記為transient,那么對(duì)象仍然可以序列化。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容