第8章-第3节-Java中的字节流

1、字节输出流OutputStream(写出):

父类:OutputStream 是字节输出流的父类,该类是一个抽象类,不能直接实例化

子类:FileOutputStream 继承了OutputStream ,是一个具体的类

1)、构造方法:

方法名 说明
public FileOutputStream(String name) 创建一个字节输出流,指向指定的文件路径
public FileOutputStream(String name, boolean append) 创建一个字节输出流,指向指定的文件路径,追加写内容
public FileOutputStream(File file) 创建一个字节输出流,指向file文件
public FileOutputStream(File file, boolean append) 创建一个字节输出流,指向file文件,追加写内容
File file = new File("test\\a1.txt");
OutputStream out = new FileOutputStream(file, true);
out.close();

 2)、写出数据:

方法名 说明
void write(int b) 将指定的字节写入此文件输出流 一次写一个字节数据
void write(byte[] b) 将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据
void write(byte[] b, int off, int len) 将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据
// 写出指定长度的字节数组
byte[] bytes = "我爱蜗牛".getBytes("UTF-8");
out.write(bytes, 3, bytes.length - 3);

// 释放资源
out.close();

 2、字节输入流InputStream(读入):

父类:InputStream 是字节输入流的父类,该类是一个抽象类,不能直接实例化

子类:FileInputStream 继承了InputStream ,是一个具体的类

1)、构造方法:

方法名 说明
public FileInputStream(String name) 创建一个字节输入流,指向指定的文件路径
public FileInputStream(File file) 创建一个字节输入流,指向file文件
// 创建一个字节输入流,指向一个file文件
// 如果文件不存在,这会出现运行时异常
File file = new File("test\\a.txt");
if(!file.exists()){
    file.createNewFile();
}
InputStream in = new FileInputStream(file);
System.out.println(in);
in.close();

 2)、读入数据

方法名 说明
public int read() 将指定文件读取进内存 一次读取一个字节数据
public int read(byte b[]) 一次读取一个字节数组数据
public int read(byte b[], int off, int len) 一次读取一个字节数组的部分数据,从off位置开始,读取len个长度
// 一次读取一个字节数组
byte[] bs = new byte[1024];  
int len = in.read(bs);
// 如果文件中数据已经读取完毕,没有数据时,read方法会返回一个-1 代表数据读取完毕
while(len != -1){
    System.out.print(new String(bs, 0, len));
    len = in.read(bs);
}
in.close();
    /**
     * 复制mp3文件
     */
    public static void main(String[] args)  {

        //1. 字节输入流, 字节输出流
        File f = new File("D://test.mp3");
        if(!f.exists()){
            System.out.println("文件不存在,请检查路径~~");
        }else{
            InputStream ins = null;
            OutputStream ops = null;
            try {
                //准备好两个流对象
                ins = new FileInputStream(f);
                ops = new FileOutputStream("D://"+UUID.randomUUID()+".mp3");
                //读数据 写数据
                byte[]nums = new byte[1024];
                int len = -1;
                while((len = ins.read(nums))!=-1){
                    //写入数据到新文件
                    ops.write(nums,0,len);
                }
                System.out.println("复制成功!");

                //检查新文件是否成功创建
                System.out.println(new File("D://copy_"+f.getName()).exists());

            } catch (IOException e) {
                System.err.println("出错了!");
            }finally {
                try {
                    if(ins != null || ops != null){
                        ins.close();
                        ops.close();
                    }
                } catch (IOException e) {
                        throw new RuntimeException(e);
                }

            }


        }
    }

3、复制案例(边读入边写出):

public class CopyTest {
    public static void main(String[] args) throws IOException {
        //字节流 复制文件
        InputStream ins  = null;
        OutputStream os  = null;

        try {
            //前期检查
            File file = new File("E://test.mp4");
            if(!file.exists()) file.createNewFile();

            ins = new FileInputStream(file);
            //相对路径
            os = new FileOutputStream("images//mp4_copy.mp4");

            //复制操作   边读边写
            byte[] bs = new byte[1024];
            int len = -1;
            while((len = ins.read(bs))!=-1) {
                //写入
                os.write(bs);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            //关闭流
            if(ins != null) ins.close();
            if(os != null) os.close();
        }
    }
}

本电子书目录:《Java基础的重点知识点全集》

你可能感兴趣的:(java)