1. 程式人生 > 其它 >io流-檔案流

io流-檔案流

FileOutputStream類(jdk1.0)

描述

  • java.io.FileOutputStream 類是檔案位元組輸出流,用於將資料寫入到檔案中。

構造方法

//構造方法
FileOutputStream​(File file) 建立檔案輸出流以寫入由指定的 File物件表示的檔案。  
FileOutputStream​(String name) 建立檔案輸出流以指定的名稱寫入檔案。 
           *引數
           * file file:目的地是一個檔案
           * string name:目的地是一個檔案路徑
//當你建立一個流物件時,必須先傳遞一個檔案路徑,該路徑下,如果沒有這個檔案,會建立該檔案
//,如果有這個檔案,會清空這個檔案中的資料。然後把你想要的資料寫入中。

FileOutputStream(File file,boolean append);建立檔案出入流以寫入由指定的File物件表示的檔案中。
FileOutputStream(String name,boolean append);建立檔案輸出流以指定的名稱寫入檔案中
//這兩個構造方法,引數中都需要傳入一個Boolean型別的值,
//true表示的追加資料,false表示覆蓋原檔案

程式碼例項

public static void main(String[] args) throws IOException {
	//FileOutputStream​(String name) 建立檔案輸出流以指定的名稱寫入檔案。
	FileOutputStream fops = new FileOutputStream("day28_IO\\a.txt");
	//呼叫寫入方法
	fops.write(97);
	//關閉流
	fops.close();
}

圖集分析

資料的追加續寫

  • 如何在保留檔案中的資料,還能繼續新增新的資料到目標檔案中?
  • 使用帶兩個引數地構造方法

程式碼例項

	//建立物件
	File file = new File("day28_IO\\c.txt");
	FileOutputStream fops = new FileOutputStream(file,true);
	//呼叫write方法寫入
	fops.write("張三".getBytes());
	//關閉流
	fops.close();

寫入換行

  • windows系統裡,換行符是: \r \n。把以指定是否需要追加續寫換行。
    linux系統中,換行符號是: /r /n.
    mac系統中,換行符號是 :/r
    unix系統裡,每行結尾只有換行,即: \n

  • 回車符\r和換行符\n
    回車符:回到一行的開頭。
    換行符:下一行(new Line)。

  • 系統中的換行:
    windows系統中,每行結尾是:回車加換行。即,\r\n。
    Linux系統中,每行的結尾只有換行,即,/n。
    mac系統中,每行的結尾是回車,即,/r。

FileInputStream類

描述

  • java.io.FileInputStream 類是檔案輸入流,從檔案中讀取位元組。

常用方法

//構造方法
FileInputStream​(File file)  通過開啟與實際檔案的連線來建立一FileInputStream ,該檔案由檔案系統中的 File物件 file命名。  
FileInputStream​(String name) 通過開啟與實際檔案的連線來建立一個 FileInputStream ,該檔案由檔案系統中的路徑名 name命名。
//當你建立一個流物件時,必須傳入一個檔案路徑。該路徑下,如果沒有該檔案,會丟擲FileFoundException。
//普通方法
int available​() 返回從此輸入流中可以讀取(或跳過)的剩餘位元組數的估計值,而不會被下一次呼叫此輸入流的方法阻塞。  

讀取資料的原理

  • java --> JVM --> OS --> OS呼叫系統中讀取資料的方法 -->讀取檔案中的資料

程式碼例項

public static void main(String[] args) throws IOException {
	FileInputStream fis = new FileInputStream("C:\\c.txt");
	int len = 0;
	byte[] bytes = new byte[1024];
	while ((len = fis.read(bytes)) != -1) {
		//System.out.println(new String(bytes));
		System.out.println(new String(bytes, 0, len));
	}
	fis.colos();
}
//可以使用位元組陣列來讀取資料:read(byte[] b):從輸入流中讀取多個位元組,並且將其儲存到緩衝區陣列b當中
  • 備註;使用陣列讀取,每次可以讀取多個位元組,減少系統間的io操作次數,從而提高了讀取的效率,建議使用。

  • 練習從系統中讀取一個圖片複製到桌面上

    //1.建立一個位元組輸入流物件,構造方法中繫結需要讀取的路徑
    //2.建立一個位元組輸出流物件,構造方法中繫結需要寫入的檔案
    //3.使用位元組輸入流物件中的read方法讀取檔案
    //4.使用位元組輸出流物件中的write方法,把讀取到位元組寫入到指定的檔案中
    //5.釋放資源(先開的後關,後開的先關/相當於棧)
    //複製檔案
    public static void main(String[] args) throws IOException {
        //來源
        File source = new File("D:\\aa.jpeg");
        //目的地
        File destination = new File("E:\\bb.jpeg");
        try (FileInputStream fis = new FileInputStream(source);
             FileOutputStream fos = new FileOutputStream(destination)
        ) {
            System.out.println(fis.available() + "available");
            //public int available​() throws IOException 獲取檔案位元組
            byte[] arr = new byte[fis.available()];
            int a = 0;
            while ((a = fis.read(arr)) != -1) {
                fos.write(arr);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }