什麼是流
根據數據的流向分爲:輸入流 和 輸出流
根據數據的型別分爲:位元組流和字元流
對應的超類
輸入流 | 輸出流 | |
---|---|---|
位元組流 | InputStream | OutputStream |
字元流 | Reader | Writer |
是所有位元組輸出流的所有類的超類,將指定的位元組資訊寫出到目的地
public void close() :關閉此輸出流並釋放與此流相關聯的任何系統資源。
public void flush() :重新整理此輸出流並強制任何緩衝的輸出位元組被寫出。
public void write(byte[] b):將 b.length個位元組從指定的位元組陣列寫入此輸出流。
public void write(byte[] b, int off, int len) :從指定的位元組陣列寫入 len位元組,從偏移量 off開始輸出到此輸出流。 也就是說從off個位元組數開始讀取一直到len個位元組結束
public abstract void write(int b) :將指定的位元組輸出流。
檔案輸出流,用於數據寫出到檔案
其中 public FileOutputStream(String name)最常用
類似這樣建立位元組輸出流物件都做了三件事情:
通過write方法實現位元組數據的寫入
換行實現
windows \r\n
Linux \n
Mac \r
eclipse/IDEA 中的記事本軟體以及editplus這樣的第三種軟體都做了平臺的相容
追加寫入
public FileOutputStream(File file, boolean append)
public FileOutputStream(String name, boolean append)
這兩個構造方法,第二個參數中都需要傳入一個boolean型別的值,true 表示追加數據,false 表示不追加也就是清空原有數據。這樣建立的輸出流物件,就可以指定是否追加續寫了
程式碼演示
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("a.txt");
//當輸出流所關聯的檔案不存在,就會自動建立一個檔案,不會報錯
FileOutputStream out = new FileOutputStream(file);
//建立一個向具有指定名稱的檔案中寫入數據的輸出位元組流
FileOutputStream out1 = new FileOutputStream("b.txt");
//一次寫入一個位元組
out1.write(97);
out1.write(98);
out1.write(99);
out1.flush();
//一次寫入一個位元組陣列
//.getBytes()
byte[] bytes = "我想和你一起闖入森林潛入海底".getBytes();
out.write(bytes);
out.flush();
//0表示從位元組陣列的哪個索引開始 12 表示寫了多少個位元組
//一個漢字在UTF-8中佔3個位元組
out.write(butes,0,12);
out.flush();
//true表示追加寫入,不會造成覆蓋
FileOutputStream out2 = new FileOutputStream("c.txt",true);
byte[] bytes1 = "人類的本質".getBytes();
out2.write(bytes1);
out2.flush();
// 換行符的使用
out2.write("\r\n".getBytes());
out2.flush();
//最後記得關閉
out.close();
out1.close();
out2.close();
}
}
生成結果
a.txt
我想和你一起闖入森林潛入海底
b.txt
abc
c.txt
程式執行幾次,就會寫幾次,不會造成覆蓋
人類的本質
人類的本質
人類的本質
人類的本質
抽象類,是表示位元組輸入流的所有類的超類
public void close() :關閉此輸入流並釋放與此流相關聯的任何系統資源。
public abstract int read(): 從輸入流讀取數據的下一個位元組。
public int read(byte[] b): 該方法返回的int值代表的是讀取了多少個位元組,讀到幾個返回幾個,讀取不到返回-1
檔案輸入流,從檔案中讀取位元組
其中 public FileInputStream(String name)最常用
讀取位元組
**read()**方法
(d.txt)內容爲 abcd
public class Test2 {
public static void main(String[] args) throws IOException {
File file = new File("d.txt");
file.createNewFile();
FileInputStream in = new FileInputStream(file);
int r1 = in.read();
System.out.println(r1);
int r2 = in.read();
System.out.println(r2);
int r3 = in.read();
System.out.println(r3);
int r4 = in.read();
System.out.println(r4);
int r5 = in.read();
System.out.println(r5);
}
}
輸出結果
97
98
99
100
-1
read(byte[] b),每次讀取b的長度個位元組到陣列中,返回讀取到的有效位元組個數,讀取到末尾時,返回-1
public class Test2 {
public static void main(String[] args) throws IOException {
File file = new File("d.txt");
file.createNewFile();
FileInputStream in = new FileInputStream(file);
byte[] bytes = new byte[1024];
int len=0;
int read = in.read(bytes);
for (byte aByte : bytes) {
System.out.println(aByte);
}
System.out.println(read);
in.close();
}
}
輸出結果
97
98
99
100
(1020個0)
4
抽象類,字元輸入流的所有類的超類,可以讀取字元資訊到記憶體中
public void close() :關閉此流並釋放與此流相關聯的任何系統資源。
public int read(): 從輸入流讀取一個字元。
public int read(char[] cbuf): 從輸入流中讀取一些字元,並將它們儲存到字元陣列 cbuf中
InputStreamReader是位元組流通向字元流的橋樑
FileReader是讀取字元檔案的便利類
抽象類,字元輸出流的所有類的超類,將指定的字元資訊寫出到目的地
void write(int c) 寫入單個字元
void write(char[] cbuf)寫入字元陣列
abstract void write(char[] cbuf, int off, int len)寫入字元陣列的某一部分,off陣列的開始索引,len寫的字元個數
void write(String str)寫入字串
void write(String str, int off, int len) 寫入字串的某一部分,off字串的開始索引,len寫的字元個數
void flush()重新整理該流的緩衝
void close() 關閉此流,但要先重新整理它
OutputStreamWriter是字元流通向位元組流的橋樑
FileWriter是寫出字元到檔案的便利類
構造方法