Java案例——字節流實現復制文件(文本、圖片、視頻)


一、字節流復制文本文件

需求:把E盤下的abc.txt文件復制到F盤下的abc.txt中

分析:

1.復制文本文件,其實就是把文本文件的內容從一個文件中讀出(數據源),然后寫入到另一個文件中(目的地)

2.數據源:E:\\abc.txt ——>需要讀數據——>InputStream——>最終實現類FileInputStream

3.目的地:F:\\abc.txt——>需要寫數據——>OutputStream——>最終實現類FileInputStream

步驟:

1.根據數據源創建字節輸入流對象

2.根據目的地創建字節輸出流對象

3.讀寫數據,復制文本文件(一次讀取一個字節、一次寫入一個字節;)

4.釋放資源

/*需求:把E盤下的abc.txt文件復制到F盤下的abc.txt中
分析:
1.復制文本文件,其實就是把文本文件的內容從一個文件中讀出(數據源),然后寫入到另一個文件中(目的地)

2.數據源:E:\\\abc.txt ——>需要讀數據——>InputStream——>最終實現類FileInputStream

3.目的地:F:\\\abc.txt——>需要寫數據——>OutputStream——>最終實現類FileInputStream
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制文本文件(一次讀取一個字節、一次寫入一個字節;建議使用循環方式)
4.釋放資源
* */
public class Demo02 {
  public static void main(String[] args) throws IOException {
      //根據數據源創建字節輸入流對象
      FileInputStream fips=new FileInputStream("E:\\abc.txt");
      //根據目的地創建字節輸出流對象
      FileOutputStream fops=new FileOutputStream("F:\\abc.txt");
      //讀寫數據,復制文本文件(一次讀取一個字節、一次寫入一個字節;建議使用循環方式)
        int by;
      while((by=fips.read())!=-1){
          fops.write(by);
      }
      //釋放資源
      fops.close();
      fips.close();
  }
}

二、字節流復制圖片

需求:把E盤下的123.jpg圖片復制到F盤下的123.jpgt中

步驟:

1.根據數據源創建字節輸入流對象

2.根據目的地創建字節輸出流對象

3.讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)

4.釋放資源

/*需求:把E盤下的123.jpg圖片復制到F盤下的123.jpgt中
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)
4.釋放資源
* */
public class Demo03 {
  public static void main(String[] args) throws IOException {
      //根據數據源創建字節輸入流對象
      FileInputStream fips=new FileInputStream("E:\\123.jpg");
      FileOutputStream fops=new FileOutputStream("F:\\123.jpg");
      //讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)
      byte[]bytes=new byte[1024];
      int len;
      while((len=fips.read(bytes))!=-1){
          fops.write(new String(bytes,0,len).getBytes);
          fops.flush();//清除緩存
      }
      //釋放資源
      fops.close();
      fips.close();
  }
}

容易出現的問題:

我在寫完之后發現復制后的圖片雙擊打不開,再回去看代碼,也沒幾行,我覺得問題應該是出在了字節數組轉字符串再轉字節數組那一行,猜測應該是二進制數據在轉成字符串后出現了問題,再轉回去的數據不是之前的了,所以寫入的數據不是之前的圖片的二進制數據,才會出現損壞或不被識別。 嘗試對這一行進行修改,既然轉String出現問題,那么就不轉了,直接寫字節數組

/*需求:把E盤下的123.jpg圖片復制到F盤下的123.jpgt中
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)
4.釋放資源
* */
public class Demo03 {
  public static void main(String[] args) throws IOException {
      //根據數據源創建字節輸入流對象
      FileInputStream fips=new FileInputStream("E:\\123.jpg");
      FileOutputStream fops=new FileOutputStream("F:\\123.jpg");
      //讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)
      byte[]bytes=new byte[1024];
      int len;
      while((len=fips.read(bytes))!=-1){
          fops.write(bytes,0,len);
          fops.flush();//清除緩存
      }
      //釋放資源
      fops.close();
      fips.close();
  }
}

完美解決!!!

三、字節流復制視頻

需求:把E盤下的123.mp4圖片復制到F盤下的123.mp4t中

步驟:

1.根據數據源創建字節輸入流對象

2.根據目的地創建字節輸出流對象

3.讀寫數據,復制視頻(4種方式,基本字節流一次讀寫一個字節、一次讀寫一個字節數組數據;字節緩沖流一次讀寫一個字節、一次讀寫一個字節數組)

4.釋放資源

/*需求:把E盤下的123.mp4圖片復制到F盤下的123.mp4
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制視頻(4種方式,基本字節流一次讀寫一個字節、一次讀寫一個字節數組數據;字節緩沖流一次讀寫一個字節、一次讀寫一個字節數組)
4.釋放資源
* */
public class Demo05 {
  public static void main(String[] args) throws IOException {
      //記錄開始時間
      long startime=System.currentTimeMillis();
      //方式一
      method1();
      //方式二
      method2();
      //方式三
      method3();
      //方式4
      method4();
      //記錄結束時間
      long endtime= System.currentTimeMillis();
      System.out.println("共用時"+(endtime-startime)+"毫秒");
  }
  //方法一,使用基本字節流實現一次讀取一個字節
  public static void method1() throws IOException {
      FileOutputStream fops=new FileOutputStream("F:\\123.mp4");
      FileInputStream fips=new FileInputStream("E:\\123.mp4");
      //一次讀取一個數據
      int by;
      while((by=fips.read())!=-1){
          fops.write(by);
      }
      fops.close();
      fips.close();

  }
  //方法二,一次讀取一個字節數組數據
  public static void method2() throws IOException {
      FileInputStream fips=new FileInputStream("E:\\123.mp4");
      FileOutputStream fops=new FileOutputStream("F:\\123.mp4");
      //一次讀取一個數據
      byte []bytes=new byte[1024];
      int len;
      while((len=fips.read(bytes))!=-1){
          fops.write(bytes,0,len);
      }
      fops.close();
      fips.close();

  }
  //方法三,使用字節緩沖流一次讀取一個字節
  public static void method4() throws IOException {
      //創建字節緩沖流對象
      BufferedInputStream bips=new BufferedInputStream(new FileInputStream("E:\\123.mp4"));
      BufferedOutputStream bops=new BufferedOutputStream(new FileOutputStream("F:\\123.mp4"));
      //一次讀取一個字節數據
      int by;
      while((by=bips.read())!=-1){
          bops.write(by);
      }
      bips.close();
      bops.close();

  }
  //方法四,使用字節緩沖流一次讀取一個字節數組數據
  public static void method3() throws IOException {
      //創建字節緩沖流對象
      BufferedInputStream bips=new BufferedInputStream(new FileInputStream("E:\\123.mp4"));
      BufferedOutputStream bops=new BufferedOutputStream(new FileOutputStream("F:\\123.mp4"));
      //一次讀取一個字節數組數據
      byte []bytes=new byte[1024];
      int len;
      while((len=bips.read(bytes))!=-1){
          bops.write(bytes,0,len);
      }
      bips.close();
      bops.close();

  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM