字节的输入输出流

1.OutputStream类

OutputStream它不仅可以写入字节,字符,还可以写入图片等媒体文件 

 由于OutputStream是抽象类不能创建对象,所以用它子类来完成写入字节的操作

2 .FileOutputStream类

  • 用OutputStream的子类java.io.FileOutputStream向文件中写入字节

  • FileOutputStream类的构造方法有5种重载方式,以下是常用的4种

 

案例:

package outputstream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {
    public static void main(String[] args) {
        FileOutputStream fos=null;

        try {
            //创建 FileOutputStream对象
            fos=new FileOutputStream("data.txt");
            //写出指定的字节到输出流中
            fos.write(97);
            //写出指定的字节到输出流中
            fos.write("abc".getBytes());
            //字节数组一部分写入到字节流中
            fos.write("1234567".getBytes(),1,5);
            //flush
            fos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fos!=null){
                //关闭FileOutputStream
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

3.InputStream类

InputStream它不仅可以读取字节,字符,还可以读取图片等媒体文件  

 由于IntputStream是抽象类不能创建对象,所以用它子类来完成写入字节的操作

 

4.FileInputStream类

  • 用InputStream的子类java.io.FileInputStream从文件中读取字节

  • FileOutputStream类的构造方法有3种重载方式,以下是常用的2种

 

案例:

package inputStream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileInputStreamTest {
    public static void main(String[] args) {
//        readByte();
        read();
    }
    public static void readByte(){
        
        FileInputStream fis=null;
        try {
            //创建FileInputSteam对象
            fis=new FileInputStream("data.txt");
            //定义字节数组
            byte[] buffer=new byte[3];
            int len;
            //把流中数据读取到定义的字节数组中
            //循环读取,判断读取的字节数量是否为-1,为-1,停止循环,否则继续循环
            while((len=fis.read(buffer))!=-1){
                String str=new String(buffer,0,len);
                System.out.print(str);
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    private static void read(){
        FileInputStream fis=null;
        try {
            fis=new FileInputStream("data.txt");
            int num=fis.read();
            while(num!=-1){
                System.out.print((char)num);
                num=fis.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }if(fis!=null){
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

 

5.FileInputStream与FileOutputStream实现文件复制

package outputstream_inputstream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileInputStreamAndFileOutputStreamCopyTest {
    public static void main(String[] args) {
        FileInputStream fis=null;
        FileOutputStream fos=null;

        try {
            fis=new FileInputStream("data.txt");
            fos=new FileOutputStream("data1.txt");
            byte[] buffer=new byte[3];
            int len;
            while ((len=fis.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }if (fis!=null){
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }if (fos!=null){
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

6.BufferedOutputStream类

BufferedOutputStream类里有一个方法要注意

package outputstream;

import sun.nio.ch.IOUtil;
import writer_and_reader.IOUtills;

import java.io.*;

public class BufferedOutputStreamTest {
    public static void main(String[] args) {
        FileOutputStream fos=null;
        BufferedOutputStream bos=null;
        try {
            //创建FileOutputStream对象
          fos=new FileOutputStream("data2.txt");
          //创建BufferedOutputStream对象
          bos=new BufferedOutputStream(fos);
          //BufferedOutputStream对象把数据写入字节输出流中
          bos.write(97);
          bos.write("abc".getBytes());
          bos.write("shsy".getBytes(),1,2);
          bos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            IOUtills.close(bos);
            IOUtills.close(fos);
        }

    }
}

7.BufferedInputStream类

BufferedInputStream类里有一个方法要注意

案例 :

package inputStream;

import writer_and_reader.IOUtills;

import java.io.*;

public class BufferedInputStreamTest {
    public static void main(String[] args) {
        FileInputStream fis=null;
        BufferedInputStream bis=null;

        try {
            fis=new FileInputStream("data2.txt");
            bis=new BufferedInputStream(fis);
            byte[] buffer=new byte[3];
            int len;
            while((len=bis.read(buffer))!=-1){
                String s=new String(buffer,0,len);
                System.out.println(s);//三个三个读
            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            IOUtills.close(bis);
            IOUtills.close(fis);
        }
    }
}

 

8.BufferedInputStream与BufferedOutputStream实现文件复制

案例:

package outputstream_inputstream;

import writer_and_reader.IOUtills;

import java.io.*;
import java.util.Date;

public class BufferedInputStreamAndBufferedOutputStream {
    public static void main(String[] args) {
        Date start=new Date();
        FileInputStream fis=null;
        FileOutputStream fos=null;
        BufferedInputStream bis=null;
        BufferedOutputStream bos=null;

        try {
            fis=new FileInputStream("D:\\ tmp\\1.txt");
            bis=new BufferedInputStream(fis);
            fos=new FileOutputStream("D:\\ tmp\\11.txt");
            bos=new BufferedOutputStream(fos);
            byte[] buffer=new byte[1024];
            int len;
            while((len=bis.read(buffer))!=-1){
                bos.write(buffer,0,len);
            }
            bos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            IOUtills.close(bos);
            IOUtills.close(fos);
            IOUtills.close(bis);
            IOUtills.close(fis);


        }
        Date end=new Date();
        System.out.println(end.getTime()-start.getTime());
    }
}

 

package writer_and_reader;

import java.io.*;

public class IOUtills {
    public static void close(Writer w){
        if(w!=null){
            try {
                w.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(Reader r){
        if (r!=null){
            try {
                r.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(OutputStream os){
        if(os!=null){
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(InputStream is){
        if(is!=null){
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值