java io流顶层_Java中的IO流(一)
一,IO流的分類
A,按照操作的對象不同可分為字節流與字符流
B,按照流的方向不同可分為輸入(指從外部存儲設備拿文件到內存)流也叫讀與輸出(指從內存把文件寫入到外部存儲設備)流也叫寫
注:字節流可以操作任何類型的文件,字符流是后來才出現的,主要用來操作字符類的文件;字符流的出現源于編碼表的問題,一開始計算機內使用ANSII編碼,后來每種語言都有了自己的編碼方式即編碼表,為了統一這些編碼信息國際標準化組織便產生了Unicode編碼信息表來把世界各國的語言都包括在內,此編碼表采用兩個字節即16位來存儲每一個字符,java內置的編碼表便是Unicode編碼;字符流是當讀取文件的時候,以字節的形式讀取后,查詢編碼表看具體使用哪種編碼方式,查到以后再進行文件的輸出,所以字符流是字節流+查編碼表的封裝形式。
二,流的頂層基類
所有流的操作無非兩種形式:讀與寫;所以Java便所這兩種操作形式抽取出了字節流與字符流的兩種頂層的基類
字節流的頂層基類:InputStream與OutputStream
字符流的頂層基類:Read與Write
三,字符流FileWriter
1 public static void function_demo1() throws IOException {
2 // 創建字符寫入流對象,接收一個要寫入的文件路徑對象,此文件若不存在則新創建一個文件,若已存在則覆蓋的文件
3 FileWriter fw = new FileWriter("demo1.txt");
4 fw.write("abcdefg");// 把內容寫入緩沖區
5 fw.flush();// 從緩沖區把內容刷入文件中
6 fw.close();// 關閉流
7 }
注:以上代碼中fw.flush()是把內容從緩沖區刷入到文件中去,但是fw.close()方法是先把內容從緩沖區刷入到文件中去即先調用flush方法,所以fw.flush()可以不用
FileWrite在寫時的換行與續寫
1 // 獲取系統換行的符號
2 private static final String LINE_SEPARATOR = System.getProperty("line.separator");
3 public static void function_demo2() throws IOException {
4 FileWriter writer = new FileWriter("demo.txt", true);// 創建寫入流對象
5 // 把內容寫入到緩沖區
6 writer.write("abcdef綿" + LINE_SEPARATOR + "中國人啊吼叫職了");
7 // 把緩沖區里的內容刷入到文件系統中
8 // writer.flush();
9 // 關閉流,在關閉之前會先把緩沖區里的內容刷入到文件系統然后才關閉流;若用此關閉流可不用手動調用flush
10 writer.close();
11 }
注:FileWriter在支持續寫的時候提供了一個帶兩個參數的構造函數,當傳遞為true時即可支持續寫;換行可調用系統提供的換行符號
四,字符流FileReader
1 public static void function_demo3() throws IOException {
2 // 創建讀取流對象,指定需要讀取的文件地址
3 FileReader reader = new FileReader("demo.txt");
4 // 聲明一個變量接收讀取到的字符
5 int ch;
6 // 調用read方法讀取文件中的字符,當讀取到文件的末尾的時候read方法返回-1
7 while ((ch = reader.read()) != -1) {
8 System.out.println((char) ch);
9 }
10 // 關閉流
11 reader.close();
12 }
注:此讀取方式為一個字符的讀取,每讀取一個字符便寫到控制臺,以下代碼演示高效的讀取,即聲明一個緩沖區的數組,把每次所讀到的內容先放入緩沖數組中去,然后再一次性寫到文件中
1 public static void function_demo4() throws IOException {
2 //讀取流對象
3 FileReader reader = new FileReader("demo.txt");
4 //每次讀取到的字符放入的緩沖數組區
5 char[] buf = new char[1024];
6 //每次讀取到的字符數
7 int i;
8 //循環讀取,每次read一次把讀取到的內容放入buf字符數組,讀到最后會返回-1
9 while ((i = reader.read(buf)) != -1) {
10 //把讀取到的字符轉為字符串,每次轉換的數量為讀取到的字符數
11 System.out.println(new String(buf, 0, i));
12 }
13 reader.close();
14 }
下面用兩種方式實現文件的復制功能
private static void function_demo5() throws IOException {
FileReader fr = new FileReader("demo.txt");//創建讀取流對象
FileWriter fw = new FileWriter("demo2.txt");//創建寫入流對象,若文件不存在則創建;若存在則覆蓋
int ch;//存儲讀取到的字符
//循環讀取文件中的數據
while ((ch = fr.read()) != -1) {
fw.write(ch);//把每次讀到的內容寫入到新文件中
}
fw.close();//關閉
fr.close();//關閉
}
高效的復制方式
1 private static void function_demo6() throws IOException {
2 FileReader fr = new FileReader("demo.txt");// 創建讀取流對象
3 FileWriter fw = new FileWriter("demo3.txt");// 創建寫入流對象,若文件不存在則創建,若存在則覆蓋
4 char[] buf = new char[4096];//緩存數組
5 int ch;// 存儲讀取到的字符
6 // 循環讀取文件中的數據
7 while ((ch = fr.read(buf)) != -1) {//把每次讀取到的內容放入緩存數組中
8 fw.write(buf, 0, ch);//從緩存數組中把內容讀出來
9 }
10 fw.close();//關閉流
11 fr.close();//關閉流
12 }
五,高效的讀取流BufferedReader
從字符輸入流中讀取文本,緩沖各個字符,從而實現字符、數組和行的高效讀取。注意,此類可以直接讀取行,由此也說明此類是專門為高效的讀取文件數據的方式
1 private static void function_demo7() throws IOException {
2 FileReader fr = new FileReader("demo.txt");//讀取流對象
3 BufferedReader bReader = new BufferedReader(fr);//緩沖讀取流對象,需要傳入讀取Reader的實現類
4 int ch;
5 while ((ch = bReader.read()) != -1) {//此read為增強了的read方法,用的裝飾器模式
6 System.out.println((char) ch);
7 }
8 bReader.close();//關閉該流并釋放與之關聯的所有資源;即也把讀取流的對象fr給關閉了,不需要再手動調用fr.close()
9 }
帶緩沖數組的讀取方式
1 private static void function_demo7() throws IOException {
2 FileReader fr = new FileReader("demo.txt");// 讀取流對象
3 BufferedReader bReader = new BufferedReader(fr);// 緩沖讀取流對象,需要傳入讀取Reader的實現類
4 int ch = 0;
5 char[] buff = new char[1024];
6 while ((ch = bReader.read(buff)) != -1) {// 此read為增強了的read方法,用的裝飾器模式
7 System.out.println(new String(buff, 0, ch));
8 }
9 bReader.close();// 關閉該流并釋放與之關聯的所有資源;即也把讀取流的對象fr給關閉了,不需要再手動調用fr.close()
10 }
讀取行
1 private static void function_demo8() throws IOException {
2 FileReader fr = new FileReader("demo.txt");
3 BufferedReader bReader = new BufferedReader(fr);
4 String line = null;//獲取每次讀到的行內容
5 while ((line = bReader.readLine()) != null) {//如果讀取到了最后,則返回null
6 System.out.println(line);
7 }
8 bReader.close();
9 }
六,高效的寫入流BufferedWriter
將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符、數組和字符串的高效寫入。此流寫入的時候提供了一個newLine方法,可換行。
1 private static void function_demo9() throws IOException {
2 FileWriter fw = new FileWriter("demo4.txt");
3 BufferedWriter bw = new BufferedWriter(fw);
4 bw.write("LioneTree");
5 bw.newLine();
6 bw.write("go kb go kb nnw huo kb ");
7 bw.close();
8 }
七,使用BufferedReader與BufferedWriter實現文件復制的功能
1 private static void function_demo10() throws IOException {
2 FileReader fReader = new FileReader("demo.txt");//讀取流對象
3 BufferedReader bReader = new BufferedReader(fReader);//緩沖讀取流對象,傳入fReader讀取流對象
4 FileWriter fWriter = new FileWriter("demo5.txt");//寫入流對象
5 BufferedWriter bWriter = new BufferedWriter(fWriter);//緩沖寫入流對象,傳入bWriter寫入流對象
6 String line=null;//存儲每次讀取到的行內容
7 while((line=bReader.readLine())!=null) {//如果文件內容讀完了則返回null
8 bWriter.write(line);//寫入讀取到的每行內容
9 bWriter.newLine();//每讀完一行則換行
10 }
11 bReader.close();//關閉讀取流對象
12 bWriter.close();//關閉寫入流對象
13 }
八,跟蹤行號的緩沖字符輸入流LineNumberReader
此類定義了方法
1 private static void function_demo11() throws IOException {
2 FileReader fr = new FileReader("demo.txt");// 讀取流對象
3 LineNumberReader lnr = new LineNumberReader(fr);// 行號讀取流對象,需要傳入讀取流fr對象
4 String line = null;// 存儲讀取到的內容
5 lnr.setLineNumber(100);// 設置起始行號,若不設置默認從0開始,在讀取到的每一行的末尾處自增1
6 while ((line = lnr.readLine()) != null) {// 按行讀取
7 System.out.println(lnr.getLineNumber() + " " + line);
8 }
9 lnr.close();
10 }
總結
以上是生活随笔為你收集整理的java io流顶层_Java中的IO流(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java分哪几部分_JVM 是由哪几部分
- 下一篇: java美元兑换,(Java实现) 美元