使用Java來複制文件

複製文件

思路:

  1. 創建FileInputStream的對象fis,關聯源文件。
  2. 創建FileOutputStream的對象fos,關聯目標文件
  3. 創建字節流bytes(byte[]類型),使用循環,通過fisread方法把源文件字節讀入字節流,函數參數是字節流,返回值是讀取的有效字節數。同時,通過fos把字節流寫入目標文件,當read方法返回-1,說明讀取到了源文件的結束標誌
  4. 關閉輸入輸出流
    在這裏插入圖片描述

代碼實現

private static void copyFileByBytes(File srcFile, File destFile) throws IOException {
        long startTime = System.currentTimeMillis();
        // 1.創建InputStream,關聯源文件
        FileInputStream fis = new FileInputStream(srcFile);
        // 2.創建OutputStream,關聯目標文件

        FileOutputStream fos = new FileOutputStream(destFile);
        // 3.逐字節讀取視頻源文件,逐字節寫入目標文件,速度非常的慢
        /*
        int b=-1;
        while((b = fis.read()) != -1){
            fos.write(b);
        }
        */
        //  優化:使用字符數組從源文件逐字節段讀入字節數組(字節流),再逐字節段寫入目標文件
        //   注意事項: 逐字節讀取read返回值是讀取的字節,遇到文件結束符讀取的值爲-1
        //             逐字節段讀取,read返回值是讀取到的有效字節長度,read接受的參數是一個字符數組,把讀取到的字節放入字節數組(字節流)
        byte[] bytes = new byte[1024 * 10];
        int len = -1;
        while ((len = fis.read(bytes)) != -1){
            fos.write(bytes,0,len);
        }
        // 4.關閉流
        fos.close();
        fis.close();
        long endTime = System.currentTimeMillis();
        System.out.println("批量讀取用時:" + (endTime - startTime) + "毫秒");
    }

總結

  1. 批量的把字節流寫入文件要限定寫入字節流長度,因爲字節流中的數據是覆蓋進行刷新的,如圖
    在這裏插入圖片描述
    源文件讀取完畢以後,字節流中內容如圖所示,因爲第三次讀取了2個字節的有效數據,所以字節流中還保留着第二次讀取的一部分剩餘內容。

  2. 讀取到文件結束標誌,返回值爲-1。

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