|
一、數(shù)據(jù)流的基本概念
流一般分為輸入流(Input Stream)和輸出流(Output Stream)兩類,但這種劃分并不是絕對(duì)的。比如一個(gè)文件,當(dāng)向其中寫數(shù)據(jù)時(shí),它就是一個(gè)輸出流;當(dāng)從其中讀取數(shù)據(jù)時(shí),它就是一個(gè)輸入流。當(dāng)然,鍵盤只是一個(gè)數(shù)人流,而屏幕則只是一個(gè)輸出流。 java的標(biāo)準(zhǔn)數(shù)據(jù)流:標(biāo)準(zhǔn)輸入輸出指在字符方式下(如DOS),程序與系統(tǒng)進(jìn)行交互的方式,分為三種: 標(biāo)準(zhǔn)輸入studin,對(duì)象是鍵盤。 標(biāo)準(zhǔn)輸出stdout,對(duì)象是屏幕。 標(biāo)準(zhǔn)錯(cuò)誤輸出stderr,對(duì)象也是屏幕。 二、java.io包中的數(shù)據(jù)流和文件類 字節(jié)流:從InputStream和OutputStream派生出來(lái)的一系列類。這類流以字節(jié)(byte)為基本處理單位。 InputStream、OutputStream FileInputStream、FileOutputStream PipedInputStream、PipedOutputStream ByteArrayInputStream、ByteArrayOutputStream FilterInputStream、FilterOutputStream DataInputStream、DataOutputStream BufferedInputStream、BufferedOutputStream 字符流:從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼表示的字符為基本處理單位。 Reader、Writer InputStreamReader、OutputStreamWriter FileReader、FileWriter CharArrayReader、CharArrayWriter PipedReader、PipedWriter FilterReader、FilterWriter BufferedReader、BufferedWriter StringReader、StringWriter 三、字節(jié)流方法 InputStream 和OutputStream read():從流中讀入數(shù)據(jù) skip():跳過(guò)流中若干字節(jié)數(shù) available():返回流中可用字節(jié)數(shù) mark():在流中標(biāo)記一個(gè)位置 reset():返回標(biāo)記過(guò)得位置 markSupport():是否支持標(biāo)記和復(fù)位操作 close():關(guān)閉流 int read() :從輸入流中讀一個(gè)字節(jié),形成一個(gè)0~255之間的整數(shù)返回(是一個(gè)抽象方法)。 int read(byte b[]) :讀多個(gè)字節(jié)到數(shù)組中。 int read(byte b[], int off, int len):從輸入流中讀取長(zhǎng)度為len的數(shù)據(jù),寫入數(shù)組b中從索引off開(kāi)始的位置,并返回讀取得字節(jié)數(shù)。 write(int b) :將一個(gè)整數(shù)輸出到流中(只輸出低位字節(jié),抽象) write(byte b[]) :將字節(jié)數(shù)組中的數(shù)據(jù)輸出到流中 write(byte b[], int off, int len) :將數(shù)組b中從off指定的位置開(kāi)始,長(zhǎng)度為len的數(shù)據(jù)輸出到流中 flush():刷空輸出流,并將緩沖區(qū)中的數(shù)據(jù)強(qiáng)制送出 close():關(guān)閉流 注:進(jìn)行I/O操作時(shí)可能會(huì)產(chǎn)生I/O例外,屬于非運(yùn)行時(shí)例外,應(yīng)該在程序中處理。如:型FileNotFoundException, EOFException, IOException 四、文件操作類的方法 File類 File類聲明如下: public class File ectends Object implements Serializable,Comparable 構(gòu)造方法: public File(String pathname) public File(File patent,String child) public File(String patent,String child) 文件名的處理 String getName( ); //得到一個(gè)文件的名稱(不包括路徑) String getPath( ); //得到一個(gè)文件的路徑名 String getAbsolutePath( );//得到一個(gè)文件的絕對(duì)路徑名 String getParent( ); //得到一個(gè)文件的上一級(jí)目錄名 String renameTo(File newName); //將當(dāng)前文件名更名為給定文件的完整路徑 文件屬性測(cè)試 boolean exists( ); //測(cè)試當(dāng)前File對(duì)象所指示的文件是否存在 boolean canWrite( );//測(cè)試當(dāng)前文件是否可寫 boolean canRead( );//測(cè)試當(dāng)前文件是否可讀 boolean isFile( ); //測(cè)試當(dāng)前文件是否是文件(不是目錄) boolean isDirectory( ); //測(cè)試當(dāng)前文件是否是目錄 普通文件信息和工具 long lastModified( );//得到文件最近一次修改的時(shí)間 long length( ); //得到文件的長(zhǎng)度,以字節(jié)為單位 boolean delete( ); //刪除當(dāng)前文件 目錄操作 boolean mkdir( ); //根據(jù)當(dāng)前對(duì)象生成一個(gè)由該對(duì)象指定的路徑 String list( ); //列出當(dāng)前目錄下的文件 文件過(guò)濾器 類FilterInputStream和FilterOutputStream分別對(duì)其他輸入/輸出流進(jìn)行特殊處理,它們?cè)谧x/寫數(shù)據(jù)的同時(shí)可以對(duì)數(shù)據(jù)進(jìn)行特殊處理。另外還提供了同步機(jī)制,使得某一時(shí)刻只有一個(gè)線程可以訪問(wèn)一個(gè)輸入/輸出流。 類FilterInputStream和FilterOutputStream分別重寫了父類InputStream和OutputStream的所有方法,同時(shí),它們的子類也應(yīng)該重寫它們的方法以滿足特定的需要 • 要使用過(guò)濾流,首先必須把它連接到某個(gè)輸入/輸出流上,通常在構(gòu)造方法的參數(shù)中指定所要連接的流: – FilterInputStream(InputStream in); – FilterOutputStream(OutputStream out); 注:這兩個(gè)類是抽象類,構(gòu)造方法也是保護(hù)方法 類BufferedInputStream和BufferedOutputStream實(shí)現(xiàn)了帶緩沖的過(guò)濾流,它提供了緩沖機(jī)制,把任意的I/O流“捆綁”到緩沖流上,可以提高讀寫效率 • 在初始化時(shí),除了要指定所連接的I/O流之外,還可以指定緩沖區(qū)的大小。缺省大小的緩沖區(qū)適合于通常的情形;最優(yōu)的緩沖區(qū)大小常依賴于主機(jī)操作系統(tǒng)、可使用的內(nèi)存空間以及機(jī)器的配置等;一般緩沖區(qū)的大小為內(nèi)存頁(yè)或磁盤塊等地整數(shù)倍,如8912字節(jié)或更小。 – BufferedInputStream(InputStream in[, int size]) – BufferedOutputStream(OutputStream out[, int size]) 文件對(duì)話框 隨機(jī)文件操作 于InputStream 和OutputStream 來(lái)說(shuō),它們的實(shí)例都是順序訪問(wèn)流,也就是說(shuō),只能對(duì)文件進(jìn)行順序地讀/寫。隨機(jī)訪問(wèn)文件則允許對(duì)文件內(nèi)容進(jìn)行隨機(jī)讀/寫。在java中,類 RandomAccessFile 提供了隨機(jī)訪問(wèn)文件的方法。類RandomAccessFile的聲明為: public class RandomAccessFile extends Object implements DataInput, DataOutput File:以文件路徑名的形式代表一個(gè)文件 FileDescriptor:代表一個(gè)打開(kāi)文件的文件描述 FileFilter & FilenameFilter:用于列出滿足條件的文件 File.list(FilenameFilter fnf) File.listFiles(FileFilter ff) FileDialog.setFilenameFilter(FilenameFilter fnf) • FileInputStream & FileReader:順序讀文件 • FileOutputStream & FileWriter:順序?qū)懳募?br>• RandomAccessFile:提供對(duì)文件的隨機(jī)訪問(wèn)支持 類RandomAccessFile則允許對(duì)文件內(nèi)容同時(shí)完成讀和寫操作,它直接繼承Object,并且同時(shí)實(shí)現(xiàn)了接口DataInput和DataOutput,提供了支持隨機(jī)文件操作的方法 DataInput和DataOutput中的方法 • readInt(), writeDouble()… int skipBytes(int n):將指針鄉(xiāng)下移動(dòng)若干字節(jié) length():返回文件長(zhǎng)度 long getFilePointer():返回指針當(dāng)前位置 void seek(long pos):將指針調(diào)到所需位置 void setLength(long newLength):設(shè)定文件長(zhǎng)度 構(gòu)造方法: RandomAccessFile(File file, String mode) RandomAccessFile(String name, String mode) mode 的取值 – “r” 只讀. 任何寫操作都將拋出IOException。 – “rw” 讀寫. 文件不存在時(shí)會(huì)創(chuàng)建該文件,文件存在時(shí),原文件內(nèi)容不變,通過(guò)寫操作改變文件內(nèi)容。 – “rws” 同步讀寫. 等同于讀寫,但是任何協(xié)操作的內(nèi)容都被直接寫入物理文件,包括文件內(nèi)容和文件屬性。 – “rwd” 數(shù)據(jù)同步讀寫. 等同于讀寫,但任何內(nèi)容寫操作都直接寫到物理文件,對(duì)文件屬性內(nèi)容的修改不是這樣。 五、字符流的方法 Reader類和Writer類 在JDK1.1之前,java.io包中的流只有普通的字節(jié)流(以byte為基本處理單位的流),這種流對(duì)于以16位的Unicode碼表示的字符流處理很不方便。從JDK1.1開(kāi)始, java.io包中加入了專門用于字符流處理的類,它們是以Reader和Writer為基礎(chǔ)派生的一系列類 同類InputStream和OutputStream一樣,Reader和Writer也是抽象類,只提供了一系列用于字符流處理的接口。它們的方法與類InputStream和OutputStream類似,只不過(guò)其中的參數(shù)換成字符或字符數(shù)組 Reader類 • void close() • void mark(int readAheadLimit) • boolean markSupported() : • int read() • int read(char[] cbuf) • int read(char[] cbuf, int off, int len) • boolean ready() • void reset() • long skip(long n) Writer類 • void close() • void flush() • void write(char[] cbuf) • void write(char[] cbuf, int off, int len) • void write(int c) • void write(String str) • void write(String str, int off, int len) 本文出自 51CTO.COM技術(shù)博客 |
|
|
來(lái)自: sam225 > 《java基礎(chǔ)》