IO流的學習

一.流的概念:java

流是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象。它的特性是進行數據傳輸;數組

通俗理解:例如從水源地長江把水導入自來水廠,而後又從自來水廠把水送到各家各戶。從長江到自來水廠之間的管道咱們能夠稱之爲輸入流,從自來水廠把水送到各家各戶的管道咱們稱之爲輸出流,咱們大概能夠這麼理解。工具

二.流的分類測試

根據數據類型分爲:字符流和字節流,根據流的方向分爲輸入流和輸出流。spa

三.字節流和字符流線程

字節流:InputStreamOutputStream是java中能夠按照最小字節單位讀取的流,即每次讀寫一個字節,字節流是直接鏈接到輸入源的流。code

字符流:是以字符爲單位進行數據處理的IO流。本質其實就是基於字節流讀取時,去查找指定的碼錶。對象

字節流以字節爲單位,字符流以字符爲單位,一次可讀2個字節,字節流可用於處理全部類型數據,而字符流只能處理字符類型的數據。
只要是處理純文本就優先考慮使用字符流,除此以外都使用字節流blog

四.輸入流和輸出流ip

輸入流是指程序從數據源中讀取數據。只進行讀操做;
輸出流是指將數據從程序中寫到指定的文件中;

五.IO流結構圖
image.png

字節輸入流InputStream:

InputStream 是全部的輸入字節流的父類,它是一個抽象類。
ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三種基本的介質流,它們分別從Byte 數組、StringBuffer、和本地文件中讀取數據。
PipedInputStream 是從與其它線程共用的管道。
ObjectInputStream 和全部FilterInputStream 的子類都是裝飾流。

字節輸出流OutputStream:

OutputStream 是全部的輸出字節流的父類,它是一個抽象類。
ByteArrayOutputStream、FileOutputStream 是兩種基本的介質流,它們分別向Byte 數組、和本地文件中寫入數據。
PipedOutputStream 是向與其它線程共用的管道中寫入數據。
ObjectOutputStream 和全部FilterOutputStream 的子類都是裝飾流。

字符輸入流Reader:

Reader 是全部的輸入字符流的父類,它是一個抽象類。
CharReader、StringReader 是兩種基本的介質流,它們分別將Char 數組、String中讀取數據。
PipedReader 是從與其它線程共用的管道中讀取數據。
BufferedReader 很明顯就是一個裝飾器,它和其子類負責裝飾其它Reader 對象。
FilterReader 是全部自定義具體裝飾流的父類,其子類PushbackReader 對Reader 對象進行裝飾,會增長一個行號。
InputStreamReader 是一個鏈接字節流和字符流的橋樑,它將字節流轉變爲字符流。FileReader 能夠說是一個達到此功能、經常使用的工具類,在其源代碼中明顯使用了將FileInputStream 轉變爲Reader 的方法。咱們能夠從這個類中獲得必定的技巧。Reader 中各個類的用途和使用方法基本和InputStream 中的類使用一致。

字符輸出流Writer:

Writer 是全部的輸出字符流的父類,它是一個抽象類。
CharArrayWriter、StringWriter 是兩種基本的介質流,它們分別向Char 數組、String 中寫入數據。
PipedWriter 是向與其它線程共用的管道中寫入數據。
BufferedWriter 是一個裝飾器爲Writer 提供緩衝功能。PrintWriter 和PrintStream 極其相似,功能和使用也很是類似。
OutputStreamWriter 是OutputStream 到Writer 轉換的橋樑,它的子類FileWriter 其實就是一個實現此功能的具體類。

九.經常使用例子

使用FileInputStream類讀取文件內容

1.  import java.io.FileInputStream;   
2.  import java.io.FileNotFoundException; 
3.  import java.io.IOException;  
4.  /**  
5.   * 數據輸入流測試  
7.   *  
8.   */
    
9.  public class firstIO {
10.  //程序的主方法 
11.      public static void main(String [] args) throws IOException{
12.          int i=0;    
13.          FileInputStream in=null;    
14.          try {    
15.              in=new FileInputStream("C:Users15080Desktopaaaa.txt");//從文件外讀數據   
16.          } catch (FileNotFoundException e) {    
17.              // TODO: handle exception   
18.              System.out.println("找不到文件位置");   
19.              System.exit(-1);   
20.          } 
21.          try {    
22.              int num=0;//用於字節個數的計數    
23.              while((i=in.read())!=-1){   
24.                  System.out.println((char)i);//將獲得的ASCII碼值轉換成字符型    
25.                  num++;    
26.              }    
27.              in.close();    
28.              System.out.println("傳輸字節個數:"+num);   
29.          } catch (Exception e) {   
30.              // TODO: handle exception   
31.              System.out.println("讀取文件錯誤");    
32.          }    

34.      }   

36.  }

使用FileOutputStream寫入文件

import java.io.FileInputStream;
import java.io.FileOutputStream;
 
/**
 * 輸入輸出流測試
 * 
 *
 */
public class outIO {
//程序主方法
    public static void main(String []args){
        int i=0;
        FileInputStream in=null;
        FileOutputStream out=null;
        try {
            //實例化FileInputStream,FileOutputStream對象
            in=new FileInputStream("C:\\Users\\15080\\Desktop\\aaaa.txt");
            out=new FileOutputStream("C:\\Users\\15080\\Desktop\\bbbb.txt");
            while((i=in.read())!=-1){
                out.write(i);
                System.out.println((char)i);
            }
            in.close();
            out.close();
            System.out.println("文件已複製");
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("文件複製錯誤");
            System.exit(-1);
        } 
        
        
    }
}

使用FileRead、FileWriter複製文件

import java.io.FileReader;
import java.io.FileWriter;
 
public class TestFieldWriter1 {
public static void main(String []args){
    FileReader fr=null;
    FileWriter fw=null;
    try {
        fr=new FileReader("C:\\Users\\15080\\Desktop\\eeee.txt");//要讀取的文件
        fw=new FileWriter("C:\\Users\\15080\\Desktop\\ffff.txt");//要複製的目的文件
        int i=0;
        while((i=fr.read())!=-1){
            fw.write(i);
            System.out.println((char)i);//將獲得的ASCII碼值轉換成字符型
        }
        fr.close();
        fw.close();
    } catch (Exception e) {
        // TODO: handle exception
    }
}
}
相關文章
相關標籤/搜索