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ì)象仍然可以序列化。

