java中的IO流

1.java中IO流的概念

1)IO流是用來處理設備之間的數據傳輸;
2)java中對數據的操作是通過流的方式;
3)java中對流操作的類都在java.io包中;
4)IO流按流向可以分爲兩種:輸入流和輸出流;
5)IO流按操作類型也可以分爲兩種:字符流和字節流;
6)字節流:字節流可以操作任何數據,因爲在計算機中任何數據都是以字節的形式存儲的;
7)字符流:字符流只能操作純字符數據,比較方便;

2.java中IO使用到的一些流介紹

1)字節流

(1)輸入流

InputStream:字節輸入流,字節流的抽象父類,抽象類不能直接創建對象,必須使用子類

FileInputStream:文件字節輸入流,就是以字節的形式讀取文件內容
read():每次讀取一個字節(byte),但是返回值類型,爲int類型,防止出現文件提前結束
read(byte[] b):每次讀取多個字節,將內容放入字節數組b中
BufferedInputStream(字節輸入緩衝流,其實就是一個包裝類,創建對象時要接收一個InputStream,內部封裝了一個1024*8的字節數組)

(2)輸出流

OutputStream:字節輸出流,字節流的抽象父類
FileOutputStream:文件字節輸出流,就是以字節的形式將內容寫入到文件中
write(int b):一次寫出一個字節
write(byte[] b):將字節數組b裏的內容寫入到文件中
write(byte[] b, int off, int len):將字節數組b裏的內容,從索引爲off的位置開始,總共寫len個
BufferedOutputStream:字節輸出緩衝流,其實就是一個包裝類,創建對象時要接收一個OutputStream,內部封裝了一個1024*8的字節數組)

2)字符流

(1)輸入流

Reader:字符輸入流,字符流的抽象父類,抽象類不能直接創建對象,必須使用子類
FileReader:文件字符輸入流,就是以字符的形式讀取文件中的內容
read():每次讀取一個字符,即可以按照字符大小讀取,返回值類型提升爲int類型
read(char[] b):每次讀取多個字符,將內容放入字符數組b中
BufferedReader:字符輸入緩衝流,其實就是一個包裝類,創建對象時要接收一個Reader,內部封裝了一個1024*8的字符數組)
readLine():可以讀取一行字符(不包含換行符號)
LineNumberReader:是BufferedReader的子類, 具有相同的功能, 並且可以統計行號
getLineNumber():方法可以獲取當前行號
setLineNumber():方法可以設置當前行號

(2)輸出流

Writer:字符輸出流,字符流的抽象父類
FileWriter:文件字符輸出流,就是以字符的形式將內容寫入到文件中
write('a')/write("aaaa"):可以寫入單個字符或者寫入字符串
write(char[] b, int off, int len):將字符數組b裏的內容,從所以爲off的位置開始,總共寫len個
BufferedWriter:字符輸出緩衝流,其實就是一個包裝類,創建對象時要接收一個Writer,內部封裝了一個1024*8的字符數組
newLine():可以輸出一個跨平臺的換行符號"\r\n"

3)轉換流:使用指定的碼錶讀寫字符)

InputStreamReader字節輸入流到字符輸入流的橋樑
OutputStreamWriter字符輸出流到字節輸出流的橋樑

4)其它流

SequenceInputStream:序列流,序列流可以把多個字節輸入流整合成一個, 從序列流中讀取數據時, 將從被整合的第一個流開始讀, 讀完一個之後繼續讀第二個, 以此類推.
SequenceInputStream(InputStream in1,InputStream in2)
SequenceInputStream(Enumeration en)

ByteArrayOutputStream:字節數組內存輸出流,是將文件或鍵盤錄入的數據寫入到內存中的字節數組
ByteArrayInputStream:字節數組內存輸入流,是以字節的方式讀取內存中的字節數組數據,創建此對象要傳遞一個字節數組

RandomAccessFile:隨機讀寫訪問流,該流同時具有讀和寫的功能
seek(long pos):設置讀取和寫入的位置

對象操作流:
ObjectOutputStream:將對象寫入到文件,要求對象所屬的類實現Serializable接口,該接口裏面沒有內容,只是一個標記
writeObject():將對象寫入文件
ObjectInputStream將上面存入到文件中的對象讀取出來,因爲存的時候所有對象是按照Object存入,所以取出來要進行強制類型轉換
readObject():從文件讀取一個對象出來

數據輸入輸出流:
DataInputStream:數據輸入流,就是從文件讀取特定類型的數據
readInt():從文件中讀取一個int類型的數據
readLong():從文件讀取一個long類型的數據
DataOutputStream:數據輸出流,向文件寫出特定類型的數據
writeInt():向文件寫入一個int類型的數據
writeLong():向文件寫入一個long類型的數據

打印流:PrintStream
標準輸入輸出流:
System.in是InputStream, 標準輸入流, 默認可以從鍵盤輸入讀取字節數據
System.setIn(InputStream)修改輸入流
System.out是PrintStream, 標準輸出流, 默認可以向Console中輸出字符和字節數據
System.setOut(PrintStream)修改輸出流

鍵盤錄入的兩種方式:
Scanner sc = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Properties是Hashtable的子類,是一個Map,存放的是鍵值對,一般用於項目的配置文件,配置文件中鍵和值的類型都爲String類型
setProperty(String key,String value):向Properties中存入鍵值對
getProperty(String key):根據鍵獲取值
public Enumeration<String> stringPropertyNames():以String的形式獲取所有的鍵,並封裝成Enumeration對象,之後進行遍歷
load(InputStream inStream): 將字節輸入流inStream所關聯的文件中的值加載到Properties對象中
store(OutputStream out, String comments) :將Properties對象中的內容寫入到out流所關聯的文件中,comments爲說明信息

注意:
flush用來刷新緩衝區的,刷新後可以再次寫出,即flush後流仍然可以使用
close用來關閉流釋放資源的的,如果是帶緩衝區的流對象的close()方法,不但會關閉流,還會再關閉流之前刷新緩衝區,關閉後不能再寫出,即不能再使用該流







發佈了41 篇原創文章 · 獲贊 12 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章