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