淺談JAVA中輸出輸入流實例詳解。本站提示廣大學習愛好者:(淺談JAVA中輸出輸入流實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談JAVA中輸出輸入流實例詳解正文
java說話的輸出輸入功效是非常壯大而靈巧的,十全十美的是看上去輸出輸入的代碼其實不是很簡練,由於你常常須要包裝很多分歧的對象。在Java類庫中,IO部門的內容是很宏大的,由於它觸及的范疇很普遍:尺度輸出輸入,文件的操作,收集上的數據流,字符串流,對象流,zip文件流....本文的目標是為年夜家引見JAVA中輸出輸入流實例詳解。
流的條理構造
界說:
java將讀取數據對象成為輸出流,能向其寫入的對象叫輸入流。構造圖以下:
1、輸出輸入:
輸出/輸入(Input/Output)是指對某個裝備或情況停止數據的輸出或輸入.任何說話都有輸出輸入的功效,在Java法式中,是經由過程流來完成輸出和輸入的,它經由過程Java輸出輸入體系銜接到物理裝備,固然輸出輸入流所銜接的現實物理裝備其實不一樣,但卻可以以統一種方法任務.例如對硬盤的輸出輸入,對收集主機停止輸出輸入,是以裝備或許情況的分歧會有林林總總的輸出輸入的成績與處理計劃.
2、流:
流是指在盤算機的輸出與輸入之間活動的數據序列.流序列中的數據既可所以未經加工的原始的二進制數據,也能夠是經必定編碼處置後相符某種格局劃定的特定命據.習氣上稱代碼相干的部門為外部,稱與代碼有關的部門為內部.
從數據的傳輸方法劃分,流可分為輸出流和輸入流;從流的內容上劃分,流可分為字撙節和字符流.
(1) 輸出輸入流
輸出流的感化是從法式外部向內部讀取數據.
輸入流的感化是從法式內部向外部寫入數據.
(2) 字撙節和字符流
字流(byte stream)對數據以字節為單元停止讀寫,既可以一個字節接一個字節的讀寫數據,也能夠一次讀寫隨意率性長度的字節塊(即字節數組).
字符流(character stream)在讀寫流內數據時是以字符為單元,一次一個字符,或許一次一個字符塊.
為了便利流的處置,Java說話的流都封裝在java.io包中,所以要應用流,必需導入java.io包.
Java的I/O流是樹立在四個籠統類的基本上,分離是InputStream, OutputStream, Reader和Writer.InputStream類及其子類可用於完成字撙節數據的輸出處置;OutputStream類及其子類可用於完成字撙節數據的輸入處置;Reader類及其子類可用於完成字符流數據的輸出處置;Writer類及其子類可用於完成字符流數據的輸入處置.
1、File類
Java中對文件的讀寫操作可以經由過程輸出輸入流來完成,但關於文件目次、屬性和治理等信息Java供給了一個專門的File類來完成.
(1) File類的結構辦法
創立一個File類對象的結構辦法有:
File (String pathname); //依據途徑名創立.
File (File parent, String child); //在給定File對象下創立.
File (String parent, String child); //依據指定途徑下創立.
File (URL url); //依據一個URL鏈接創立.
(2) File類的經常使用辦法
boolean canRead():斷定File對象對應的途徑能否可讀.
boolean canWrite():斷定File對象對應的途徑能否可寫.
boolean exists():斷定File對象對應的途徑能否存在.
String getAbsolutePath():獲得File對象對應途徑的相對途徑.
String getParent():獲得File對象對應途徑的目次.
String getPath():獲得File對象對應的途徑.
boolean isAbsolute():斷定File對象對應的途徑能否為相對途徑.
String getName():獲得File對象對應途徑的文件名.
boolean isDirectory():斷定File對象對應的途徑能否為目次.
boolean isFile():斷定File對象對應的途徑能否為文件.
boolean isHidden():斷定File對象對應的文件能否為隱蔽屬性.
long length():取得File對象對應文件的長度.
long lastModified():取得File對象對應文件的比來修正時光.
boolean renameTo(File dest):更改File對象對應文件的文件名.
boolean setReadOnly():設置File對象對應文件為只讀.
(3) 創立文件
經由過程創立一個文件輸入流來創立一個新文件.這類方法不克不及創立目次,而且假如要創立的文件已存在,會新建一個文件籠罩原文件.
FileOutrputStream file = new FileOutputStream(“filename”);
(4) 取得文件列表
經由過程File類的list()或listFiles()辦法取得某個文件夾的文件列表.有以下幾種情勢:
String[] list();
File[] listFiles();
File[] listFiles(FilenameFilter filter);
File[] listFiles(FileFilter filter);
個中,FileFilter和FilenameFilter都是接口,filter為響應的過濾器.聲明某個類,完成過濾器接口,即可以經由過程過濾前提來列出一切相符的文件.
2、InputStream類和OutputStream類
字撙節類是從籠統類InputStream和OutputStream派生出來的一系列類.這類流以字節為根本處置單元.InputStream 和 OutputStream類除可以用來處置二進制文件的數據以外,也能夠用來處置文本文件.
1、InputStream類的經常使用辦法
InputStream類是一切輸出流的父類,該類的一切辦法在毛病產生時都邑拋出IOException,重要的辦法有:
(1) public abstract int read() thows IOException
辦法前往一個0至255之間的整數或-1, -1代表碰到了流的停止,其它對應讀入的字節.
(2) public int read(byte[]b) thows IOException
辦法將字節讀入參數給定的字節數組,前往值是現實讀入的字節數或-1(碰到了流停止).
(3) public int read(byte[]b, int i, int b) thows IOException
辦法的後兩個參數分離給出讀入的肇端地位和讀入的最年夜字節數.
(4) public int available()
前往以後流對象中還沒有被讀取的字節數目.也就是取得流中數據的長度.
(5) public long skip(long n)
跳過以後流對象中的n個字節,而現實跳過的字節數目則以前往值的方法前往.
(6) public boolean markSupported()
斷定流能否支撐標志(mark),標志可以便利的回到本來讀過的地位.
(7) public void close()
封閉以後流對象,並釋放該流對象占用的資本.
(8) public void mark(int i)
為流中以後的地位設置標記,使得今後可以從該地位持續讀取.
(9) public void reset()
使流讀取的地位回到設定標志的地位.
2、OutputStream類的經常使用辦法
OutputStream類是一切輸入流的父類,該類一切辦法都前往void,而且在毛病情形下拋出IOException,重要的辦法有:
(1) public void write(int b) throws IOException
向流的末尾寫入一個字節的數據.
(2) public void write(byte[] b) throws IOException
將數組b中的數據順次寫入以後的流對象中.
(3) public void wirte(byte[]b, int i, int n)
將數組中從開端下標(包括),後續長度的數據順次寫入到流對象中.
(4) public void close()
封閉以後流對象,並釋放該流對象占用的資本.
(5) public void flush()
將以後流對象中的緩沖數據強迫輸入出去.應用該辦法可以完成立刻輸入.
下面兩個類的年夜多半辦法由InputStream和OutputStream的子類籠罩,mark()和reset()辦法除外.
3、FileInputStream類
FileInputStream類是InputStream的子類,可以用來處置以文件作為數據輸出源的數據流,完成文件的讀取操作.
它的結構辦法有:
(1) FileInputStream(File f)
以指命名字的文件對象f為數據源樹立文件輸出流.
假如f存在的話然則它應是一個文件途徑,假如是目次則會拋出IOException,然則假如是這個目次不存在的時刻則會拋出:FileNotFoundException.
(2) FileInputStream(String name)
以名為name的文件為數據源樹立文件輸出流.
(3) FileInputStream(FileDescriptor f)
依據文件描寫符對象f為輸出端樹立一個文件輸出流.
它的重要辦法是籠罩了父類(InputStream類)的辦法:read()、read(byte[]b)、read(byte[]b , int i, int length)、skip(long n)、available()、close().
4、FileOutputStream類
FileOutputStream類是OutputStream的子類,用來處置以文件作為數據輸入的數據流,完成對文件的寫入操作.它的結構辦法有:
FileOutputStream(File f);
FileOutputStream(File f, boolean b);
FileOutputStream(String f);
它的重要的辦法有籠罩父類的辦法:write(int b)、write(byte[]b)、write(byte[]b,int off,int len)、close()、flush().
5、DataInputStream和DataOutputStream類
DateInputStream和DataOutputStream類創立的對象分離被稱為數據輸出流和數據輸入流.它們分離完成了DataInput接口和DataOutput接口.DateInputStream類和DataOutputStream對象許可讀取Java各類類型的數據.
這兩個流屬於過濾流,常以其它流如InputStream或OutputStream作為它們的輸出或輸入.例如:
FileInputStream fis = new FileInputStream("d:\\a.txt");
DataInputStream dis = new DataInputStream(fis);
FileOutputStream fos = new FileOutputStream("d:\\a.txt");
DataOutputStream dos = new DataOutputStream(fos);
DateInputStream和DataOutputStream的輸出和輸入簡直是對應的,每種根本數據類型的讀寫辦法可以從厥後綴名字辨認.例如:
readInt(),writeInt() // 讀寫一個int值
readBoolean(),writeBoolean() // 讀寫一個布爾值
readChar(),writeChar() // 讀寫一個字符
readDouble(),writeDouble() // 讀寫一個雙精度浮點值
readFloat(),writeFloat() // 讀寫一個單精度浮點值
WriteChars() // 寫一個字符串,但沒有直接讀字符串的辦法
3、Reader類和Writer類
Java中的字符應用的是Unicode編碼,每一個字符占領兩個字節,即16bit.字符流是以16位的Unicode碼表現的字符為根本處置單元,停止文本數據的讀寫,可以完成Java法式中的外部格局和文本文件、顯示輸入、鍵盤輸出等內部格局之間的轉換.這類辦法特別合適漢字的操作.假如漢字以字節情勢操作,有能夠輸入亂碼.
Reader和Writer是java.io包中一切字符流的籠統父類,界說了完成其他流類的症結辦法.個中兩個最主要的是read()和write(),它們分離停止字符數據的讀和寫.Reader及Writer類和它們子類的辦法,與InputStream類和OutputStream類及它們子類的應用辦法異常相似.只不外個中的參數換成字符或字符數組.
1、Reader類和Writer類的經常使用辦法
Reader類是個籠統類,該類的一切辦法在毛病前提下都邑拋出IOException異常.經常使用辦法以下:
(1) abstract void close():封閉輸出源.
(2) void mark(int numChars):放置一個標志到輸出源確當前點.
(3) boolean markSupported():假如這個流支撐mark/reset辦法,將前往true.
(4) int read():讀取單個字符.
(5) int read(char[] buf):讀字符讀入到字符數組.
(6) abstract int read(char[] buf, int offset, int numChars): 將字符讀入數組的某一部門.
(7) boolean ready():假如下一個輸出要求不用期待,前往true,不然前往false.
(8) void reset():重置輸出指針到後面設置的標志.
(9) long skip(long numChars):跳過n個字符輸出,前往現實跳過的字符數.
Writer類也是個籠統類,經常使用辦法以下:
(1) abstract void close():封閉輸入流.
(2) abstract void flush():肯定輸入狀況以便清空任何緩存.
(3) void write(int ch):寫入單個字符.
(4) void write(char[] buf):寫入字符數組.
(5) abstract void write(char[] buf, int offset, int numChars):寫入字符數組的一部門.
(6) void write(String str):寫入字符串.
(7) void write(String str, int offset, int numChars):寫入字符串的一部門.
2、FileReader類
FileReader類是繼續自InputStreamReader類,而InputStreamReader類又繼續自Reader類,是以Reader類與InputStreamReader類所供給的辦法都可供FileReader類所創立對象應用.FileReader的結構辦法有:
FileReader(File file);
FileReader(FileDescriptor e );
FileReader(String filename);
3、FileWriter類
FileWriter類繼續自OutputStreamWriter類,而OutputStreamWriter類又繼續自Writer類,是以Writer類與OutputStreamWriter類所供給的辦法都可供FileWriter類所創立對象應用.FileWriter的結構辦法有:
FileWrite(File filePath);
FileWrite(File f, boolean append);
FileWrite(FileDescriptor e);
FileWrite(String filename);
FileWrite(String filename,boolean append);
4、BufferedReader類
BufferedReader類繼續自Reader類,BufferedReader類是用來讀取緩沖區裡的數據.BufferedReader類屬於過濾流,常以其它流如FileReader作為它們的輸出或輸入.它的結構辦法有:
BufferedReader(Reader in);
BufferedReader(Reader in, int bufSize);
例如:
FileReader fr=new FileReader("d:\1.txt");
BufferedReader buf = new BufferedReader(fr);
BufferedReader供給了readerLine()辦法用來讀取文本每行.
5、BufferedWriter類
BufferedWriter類繼續自Writer類,BufferedWriter類是用來將數據寫入到緩沖區裡.應用BufferedWriter類與應用BufferedReader類進程類似.分歧的是,緩沖區內的數據最初必需要用flush()辦法將緩沖區清空,也就是將緩沖區中的數據全體寫到文件內.它的結構辦法有:
BufferedWriter(Writer out);
BufferedWriter(Writer out, int bufSize);
4、RandomAccessFile類
Java中的隨機文件拜訪須要用到RandomAccessFile類(該類許可從隨意率性地位拜訪,不只能讀取,並且能寫入),它直接從Object類繼續,並完成接口DataInput和DataOutput.
因為RandomAccessFile類完成了DataInput和DataOutput接口中所界說的一切辦法,可以或許從文件中讀取根本類型的數據,也能向文件寫入根本類型的數據.除DataInput和DataOutput接口中界說的辦法之外,RandomAccessFile類還界說了其他的一些辦法來支撐隨機拜訪.
RandomAccessFile類創立的流與後面的輸出、輸入流分歧,RandomAccessFile類既不是輸出流類InputStream類的子類,也不是輸入流類OutputStram類的子類流.然則RandomAccessFile類創立的流的指向既可以作為源也能夠作為目標地,換句話說,當對一個文件停止讀寫操作時,可以創立一個指向該文件的RandomAccessFile流便可,如許既可以從這個流中讀取這個文件的數據,也經由過程這個流寫入數據給這個文件.
RandomAccessFile類的兩個結構辦法:
(1) RandomAccessFile(String name, String mode)
參數name 用來肯定一個文件名,給出創立的流的源(也是流目標地),參數mode取r(只讀)或rw(可讀寫),決議創立的流對文件的拜訪權力.
(2) RandomAccessFile(File file, String mode)
參數file 是一個File對象,給出創立的流的源(也是流目標地),參數mode取r(只讀)或rw(可讀寫),決議創立的流對文件的拜訪權力.創立對象時應捕捉FileNotFoundException異常;當流停止讀寫操作時,應捕捉IOException異常.
對象RandomAccessFile讀寫信息的辦法同數據輸出輸入對象的辦法雷同,它可以拜訪類DataInputStream和DataOutputStream中的一切read()、write()辦法.
挪動文件讀寫指針的辦法:
(1) long getFilePointer():前往文件指針確當前地位.
(2) void seek(long pos):將文件指針置於指定的相對地位.地位值以從文件開端處的字節偏移量pos來盤算,pos為0代表文件的開端.
(3) long length():前往文件的長度.地位值為length(),代表文件的開頭.