1:數據操做流(操做基本類型數據的流)(理解)面試
(1)數據操做流:數組
能夠讀寫基本類型的數據。
(2)流對象名稱
網絡
數據輸入流:DataInputStream
DataInputStream(InputStream in)
數據輸出流:DataOutputStream
DataOutputStream(OutputStream out)dom
2:內存操做流(理解)
(1)內存操做流:優化
用於處理臨時存儲信息的,程序結束,數據就從內存中消失。ui
(2)如下:url
字節數組:
ByteArrayInputStream
ByteArrayOutputStream
字符數組:
CharArrayReader
CharArrayWriter
字符串:
StringReader
StringWriterspa
注意:釋放資源
經過查看源碼咱們知道這裏什麼都沒作,因此根本不須要close()。指針
3:打印流(掌握)
(1)打印流:code
字節打印流---PrintStream
字符打印流---PrintWriter
(2)特色:
1:只有寫數據的,沒有讀取數據。只操做目的地,不操做數據源。
2:能夠操做任意類型的數據。
3:若是啓用了自動刷新(構造方法中第二參數爲true,即開啓自動刷新)。
在調用println()方法的時候,可以換行並刷新
println() --->
其實等價于于:
{ bw.write();
bw.newLine();
bw.flush(); }
4:能夠直接操做文件
問題:哪些流能夠直接操做文件呢?
看API,若是其構造方法可以同時接收File和String類型的參數,通常都是能夠直接操做文件的。
流:
基本流:就是可以直接讀寫文件的。
高級流:在基本流基礎上提供了一些其餘的功能。
(3)複製文本文件
BufferedReader br = new BufferedReader(new FileReader("a.txt")); PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true); String line = null; while((line=br.readLine())!=null) { pw.println(line); } pw.close(); br.close();
4:標準輸入輸出流(理解)
(1)輸入輸出流:
System類下面有這樣的兩個字段
in 標準輸入流
out 標準輸出流
System類中的兩個成員變量:
public static final InputStream in 「標準」輸入流。
public static final PrintStream out 「標準」輸出流。
InputStream is = System.in;
PrintStream ps = System.out;
(2)三種鍵盤錄入方式
1:main方法的args接收參數
2:System.in經過字符緩衝流包裝標準輸入流實現
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
3:Scanner
Scanner sc = new Scanner(System.in);
(3)輸出語句的原理和如何使用字符流輸出數據
A:原理
System.out.println("helloworld"); PrintStream ps = System.out; ps.println("helloworld");
B:把System.out用字符緩衝流包裝一下使用
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
5:隨機訪問流(理解)
(1)隨機訪問流:
能夠按照文件指針的位置寫數據和讀數據。
RandomAccessFile類不屬於流,是Object類的子類。
但它融合了InputStream和OutputStream的功能。
支持對文件的隨機訪問讀取和寫入。
(2)特色:
public RandomAccessFile(String name,String mode):第一個參數是文件路徑,第二個參數是操做文件的模式。
模式有四種,咱們最經常使用的一種叫"rw",這種方式表示我既能夠寫數據,也能夠讀取數據。
6:合併流(理解)
(1)合併流:
把多個輸入流的數據寫到一個輸出流中。
(2)構造方法:
A:SequenceInputStream(InputStream s1, InputStream s2)
B:SequenceInputStream(Enumeration<? extends InputStream> e)
7:序列化流(理解)
(1)序列化流:
能夠把對象寫入文本文件或者在網絡中傳輸。
序列化流:把對象按照流同樣的方式存入文本文件或者在網絡中傳輸。 對象 -- 流數據(ObjectOutputStream)
反序列化流:把文本文件中的流對象數據或者網絡中的流對象數據還原成對象。 流數據 -- 對象(ObjectInputStream)
(2)如何實現序列化呢?
讓被序列化的對象所屬類實現序列化接口。
該接口是一個標記接口。沒有功能須要實現。
(3)注意問題:
把數據寫到文件後,在去修改類會產生一個問題。
如何解決該問題呢?
在類文件中,給出一個固定的序列化id值。
並且,這樣也能夠解決黃色警告線問題。
(4)面試題:
8:Properties(理解)
(1)Properties
1.Properties:屬性集合類。是一個可以和IO流相結合使用的集合類。
2.Properties 可保存在流中或從流中加載。屬性列表中每一個鍵及其對應值都是一個字符串。
3.是Hashtable的子類,說明是一個Map集合。
(2)特有功能
A:public Object setProperty(String key,String value)添加元素 B:public String getProperty(String key)獲取元素 C:public Set<String> stringPropertyNames()獲取全部的鍵的集合
(3)和IO流結合的方法
//把鍵值對形式的文本文件內容加載到集合中 public void load(Reader reader) public void load(InputStream inStream) //把集合中的數據存儲到文本文件中 public void store(Writer writer,String comments) public void store(OutputStream out,String comments)
(4)案例:
A:根據給定的文件判斷是否有鍵爲"lisi"的,若是有就修改其值爲100
B:寫一個程序實現控制猜數字小遊戲程序不能玩超過5次
9:NIO(瞭解)
(1)New IO:
JDK4出現的NIO,對之前的IO操做進行了優化,提供了效率。可是大部分咱們看到的仍是之前的IO
(2)JDK7的NIO的使用
Path:路徑
Paths:經過靜態方法返回一個路徑
Files:提供了常見的功能
複製文本文件
把集合中的數據寫到文本文件