JavaSE-21- 字节流 FileInputStream FileOutputStream 拷贝媒体文件的几种方式


   //1.字节流不需要转码直接操作字节。
    // 2.  close  关闭资源动作要完成,无flush()
    //3.写数据 ,直接写入目的地File 或者  FileDescriptor。写入图像原始字节流。
    //4.读数据, FileInputStream    int read()  一次读取一个字节。
   // 5. int read(byte[] b)从该输入流读取最多 b.length个字节的数据为字节数组。

    //从该输入流读取一个字节的数据。
    //6.建议 少用  int available()  文件大小。  一般用于小文件或者分段对文件读取。
    //  byte[]  buf =new byte[fis.available];
   // fis.read(buf);
    //
    //返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞
package day21;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamDemo {
    public static void main(String[] args) {
       byteWriter() ;
       byteReader();
    }
    /*
   //1.字节流不需要转码直接操作字节。
    // 2.  close  关闭资源动作要完成,无flush()
    //3.写数据 ,直接写入目的地File 或者  FileDescriptor。写入图像原始字节流。
    //4.读数据, FileInputStream    int read()  一次读取一个字节。
   // 5. int read(byte[] b)从该输入流读取最多 b.length个字节的数据为字节数组。

    //从该输入流读取一个字节的数据。
    //6. 少用  int available()  文件大小。  一般用于小文件或者分段对文件读取。
    //  byte[]  buf =new byte[fis.available];
   // fis.read(buf);
    //
    //返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞
*/
    private static void byteWriter() {
        FileOutputStream  fileOutputStrem=null ;
        try{
            fileOutputStrem =new FileOutputStream("bytetest.txt");
            for(int i=0;i<10;i++) {
                fileOutputStrem.write("abcdefghijklmnopqwrstuvwxyz".getBytes());
            }
        }catch ( FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fileOutputStrem !=null){
                try {
                    fileOutputStrem.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    private   static  void  byteReader(){

        FileInputStream  fileInputStream =null;
        try{
            fileInputStream =new FileInputStream("bytetest.txt");
           int  size= fileInputStream.available();
           System.out.println("size="+size);
           if(size>0){
               int  len =0;
               StringBuffer  sb=   new StringBuffer();
              byte[] buf= new byte[1024];
               while((len=fileInputStream.read(buf))!=-1){

                   sb.append( new String(buf,0,len));
               }
               System.out.println(sb.toString());
           }
        }catch ( FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

拷贝媒体文件的几种方式:


 

//练习拷贝  方式 1: 媒体文件   拷贝mp3  小型文件比较快。
    public  static  void mp3Copy(String  filename1 ,String  filename2){
      FileInputStream  fis =null;
      FileOutputStream fos =null;
        try {
           // fis= new FileInputStream("F:\\Kugou\\Carly Rae Jepsen - Picture.mp3");
            fis= new FileInputStream(filename1);
            //fos =new FileOutputStream("F:\\Kugou\\Picture.mp3");
            fos =new FileOutputStream(filename2);
            byte[] buf =new byte[1024];
            int len=0;
            while ((len=fis.read(buf))!=-1){
                try {
                    fos.write(buf,0,len);
                    System.out.println("len ="+len);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } catch ( IOException e){
            e.printStackTrace();
        }finally {
              if(fis!=null){
                  try {
                      fis.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //练:2  使用缓冲区   大型 媒体文件   拷贝mp3
    public  static  void copyPiture(){
        FileInputStream  fis =null;
        FileOutputStream fos =null;
        BufferedInputStream  bis=null;
        BufferedOutputStream bos=null;
        try {
             fis= new FileInputStream("F:\\封存\\工藤静香\\20170510172403_MEtTc.jpg");
             bis=new BufferedInputStream(fis);
             fos =new FileOutputStream("F:\\Kugou\\MEtTc.jpg");
             bos=new BufferedOutputStream(fos);

            byte[] buf =new byte[1024];
            int len=0;
            while ((len=bis.read(buf))!=-1){
                try {
                    bos.write(buf,0,len);
                    bos.flush();
                    System.out.println("len ="+len);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } catch ( IOException e){
            e.printStackTrace();
        }finally {
            if(bis!=null){
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(bos!=null){
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }



    //练习拷贝   方式 3:fis.available() 媒体文件  不建议有可能会溢出。
    public  static  void mp3Copy3(){
        FileInputStream  fis =null;
        FileOutputStream fos =null;
        String  filename1="F:\\Kugou\\Carly Rae Jepsen - Picture.mp3" ;
        String  filename2="F:\\Kugou\\Picture2.mp3";
        try {
            // fis= new FileInputStream("F:\\Kugou\\Carly Rae Jepsen - Picture.mp3");
            fis= new FileInputStream(filename1);
            //fos =new FileOutputStream("F:\\Kugou\\Picture.mp3");
            fos =new FileOutputStream(filename2);
            byte[] buf =new byte[fis.available()];
                try {
                    fos.write(buf,0,fis.available());
                } catch (IOException e) {
                    e.printStackTrace();
                }

        } catch ( IOException e){
            e.printStackTrace();
        }finally {
            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    

//   方式4. 千万不要用,效率没有!
    public static void copy_4() throws IOException {
        FileInputStream fis = new FileInputStream("c:\\0.mp3");
        FileOutputStream fos = new FileOutputStream("c:\\4.mp3");


        int ch = 0;

        while((ch =fis.read())!=-1){
            fos.write(ch);
        }

        fos.close();
        fis.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值