Java中的IO流(一)

Java中的IO流(一):
https://blog.csdn.net/Veer_c/article/details/103833045
Java中的IO流(二):
https://blog.csdn.net/Veer_c/article/details/103833423
Java中的IO流(三):
https://blog.csdn.net/Veer_c/article/details/103833811

IO流分類:

IO:Java對數據的操作是通過流的方式,IO流用來處理設備之間的數據傳輸,上傳文件和下載文件,Java用於操作流的對象都在IO包中。
根據流向可分爲:輸入流、輸出流
根據數據類型可分爲:
字節流:字節輸入流、字節輸出流
字符流:字符輸入流、字符輸出流
注意:一般我們在討論IO的分類時,默認是按照數據類型分的。
字節流:
字節輸入流 InputStream(抽象類)
字節輸出流 OutputStream(抽象類)
字符流:
字符輸入流 Reader
字符輸出流 Writer
在這裏插入圖片描述
需求:請用字節流往一個文本文件中寫一句話:”helloworld”。
分析:
首先要知道是字節流,寫數據我們就應該知道是字節輸出流,所以最終選擇了OutputStream,而OutputStream是抽象類,所以我們應該找其子類,文件這個單詞是File,所以就大膽的猜測下:FileOutputStream存在否。

如何往一個文件寫數據,或者說就是字節輸出流的操作步驟是什麼呢?
A:創建字節輸出流對象
B:調用寫數據的方法
C:釋放資源
flush()和close()的區別:
flush: 刷新緩衝區,流對象可以繼續
close: 先刷新緩衝區,再關閉流對象。流對象不可以繼續使用了。

public class OutputStreamDemo {
    public static void main(String[] args) throws IOException {
        /* 怎麼使用文件輸出流往文件中途寫數據?
         * 1.創建文件輸出流對象
         * 2.調用輸出流對象的方法給文件中寫數據
         * 3.釋放資源*/
        //public FileOutputStream(String name)
        //public FileOutputStream(File file)
        //創建文件輸出流對象
        FileOutputStream fos = new FileOutputStream("a.txt");
        //public FileOutputStream(File file)
        //File file = new File("a.txt");
        //FileOutputStream fos = new FileOutputStream(file);
        /* FileOutputStream fos = new FileOutputStream("a.txt");
         * 做了那些事情?
         * 1.創建fos對象指向文件a.txt
         * 2.創建一個文件a.txt */
        //調用輸出流的寫數據的方法給文件中寫數據
        //public void write(byte[] b)
        byte[] byf = "helloworld".getBytes();
        fos.write(byf);
        //釋放資源,關流操作
        fos.close();
        //關流之後,我們還能繼續往文件中寫數據嗎?
        //不行的。。。
        //fos.write("java".getBytes());//java.io.IOException: Stream Closed
    }
}

兩個構造的區別:
FileOutputStream(File file)
創建一個File對象,指向文件輸出流;
FileOutputStream(String name)
創建一個具有文件名的輸出流對象

FileOutputStream fos = new FileOutputStream(“fos.txt”);
請問上面這個操作做了哪幾件事情?
1.創建了一個文件輸出流fos,指向文件a.txt
2.創建了a.txt這個文件
fos.write(“helloworld”.getBytes());
fos.close();關流
fos.write(“java”.getBytes());

FileOutputStream 寫數據的方法
write(byte[] b) :一次寫入byte[]長度的字節
write(int b) :一次寫一個字節
write(byte[] b, int off, int len) :一次寫一個字節數組的一部分

字節輸入流具體操作步驟:
字節輸入流操作步驟:
A:創建字節輸入流對象:
FileInputStream fis = new FileInputStream(“a.txt”);
B:調用方法讀取數據
一次讀取一個字節:read() – 讀取不到內容的時候的返回值爲 -1(並且用循環改進)
C:釋放資源:fis.close

練習:
1.把a.txt的內容複製到b.txt中
2.從d:\中複製視頻文件

數據源:
IODemo.java – 讀取數據 – InputStream – FileInputStream – 一次讀取一個字節
目的地:Copy.java – 寫出數據 – OutputStream – FileOutputStream – 一次寫一個字節。
1.把a.txt的內容複製到b.txt中

     如果要複製文件的話:前提要保證文件在該項目的根目錄下;要麼就直接寫該文件的絕對路徑。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFile {
    public static void main(String[] args) throws IOException {
        //A:把a.txt的內容複製到b.txt中
        //封裝數據源和目的地
        FileInputStream fis = new FileInputStream("OutputStreamDemo.java");
        FileOutputStream fos = new FileOutputStream("c.java");
        //2.讀取數據源中的數據,將讀取到的數據寫入目的地中
        int by;
        while ((by=fis.read())!=-1) {
            //System.out.println(by);
            //將讀取到的字節寫入fos中
            fos.write(by);
        }
        //釋放資源
        fos.close();
        fis.close();
    }
}

2.複製視頻文件

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyMp4 {
    public static void main(String[] args) throws IOException {
        //1.瘋轉數據源和目的地
        FileInputStream fis = new FileInputStream("D://b.mp4");
        FileOutputStream fos = new FileOutputStream("d.mp4");
        //2.讀取數據源,寫如目的地
        int by;
        while ((by=fis.read())!=-1) {
            fos.write(by);
        }
        //3.釋放資源
        fos.close();
        fis.close();
    }
}

字節輸入流:具體操作步驟:
A:創建字節輸入流對象
FileInputStream fis = new FileInputStream(“a.txt”);
B:調用方法讀取數據(一次讀取一個字節數組,提升效率),一次讀取一個字節數組: public int read(byte[] b):返回實際讀取長度,數據被讀取到數組中。測試方法返回長度?根據String類的構造方法構造字符串
C:釋放資源
fis.close(利用一次讀寫一個字節數組完成)
練習:
1.把a.txt的內容複製到b.txt中
2.把d:\複製視頻文件

package cokm.edu_04;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyMp4 {
    public static void main(String[] args) throws IOException {
        //一次讀寫一個字節數組
        //1.封裝數據源和目的地
        FileInputStream fis = new FileInputStream("D://b.mp4");
        FileOutputStream fos = new FileOutputStream("e.mp4");
        //一次讀寫一個字節數組
        byte[] bys =  new byte[1024];
        int len;
        while ((len=fis.read(bys))!=-1) {
            //讀取多少就給fos中寫多少數據
            fos.write(bys, 0, len);
        }
        //釋放資源
        fos.close();
        fis.close();
    }
}

字節緩衝區流(也叫高效流):
BufferedInputStream(read() 一次讀取一個字節,
public int read(byte[] b):返回實際讀取長度,數據被讀取到數組中。)
BufferedOutputStream(write(byte[] b))
低級流::基本的流,可以直接操作文件。
高級流:是操作基本流的流。

Java中的IO流(一):
https://blog.csdn.net/Veer_c/article/details/103833045
Java中的IO流(二):
https://blog.csdn.net/Veer_c/article/details/103833423
Java中的IO流(三):
https://blog.csdn.net/Veer_c/article/details/103833811

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章