java---IO流:字节流

字节流写数据
package IO流.字节流.字节流写数据;

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

/*
        字节流抽象基类
            inputStream: 这个抽象类是表示字节输入流的所有类的超类
            outputStream: 这个抽象类表示字节输出流的所有类的超类
            子类名特点: 子类名称都是以其父类名作为子类名的后缀

        FileOutputStream:文件输出流  用于将数据写入File
            FileOutputStream(String name): 创建文件输出流以指定的名写入文件

        使用字节输出流写数据的步骤:
            创建字节输出流对象
            调用字节输出流对象的写数据方法
            释放资源

 */
public class 字节流写数据 {
    public static void main(String[] args) throws IOException {
        //创建字节输出流对象
        FileOutputStream fos=new FileOutputStream("idea_text\\fos.txt");
        /*
            做了三件事情:
                1,调用系统功能创建了文件
                2,创建了字节输出流对象
                3,让字节输出流对象指向创建好的文件
         */

        //void write​(int b) 将指定的字节写入此文件输出流。
        fos.write(97);
//        fos.write(57);
//        fos.write(55);

        //最后都要释放资源
        //void close​() 关闭此文件输出流并释放与此流相关联的任何系统资源
        fos.close();


    }
}
字节流写数据的3种方式
package IO流.字节流.字节流写数据;
/*
        void write​(int b)
            将指定的字节写入此文件输出流。
            一次写一个字节数据
        void write​(byte[] b)
            将 b.length字节从指定的字节数组写入此文件输出流。
            一次写一个字节数组数据
        void write​(byte[] b, int off, int len)
            将 len字节从指定的字节数组开始,从偏移量 off开始写入此文件输出流。
            一次写一个字节数组的部分数据
 */

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

public class 字节流写数据的3种方式 {
    public static void main(String[] args) throws IOException {
        //创建文件输出流以指定的名称写入文件
        FileOutputStream fos = new FileOutputStream("idea_text\\fos.txt");
        //new File(name)
//        FileOutputStream fos = new FileOutputStream(new File("idea_text\\fos.txt"));

        //创建文件输出流以写入由指定的File对象表示的文件
//        FileOutputStream(File file)
//        File file=new File("idea_text\\fos.txt");
//        FileOutputStream fos2 = new FileOutputStream(file);
//        FileOutputStream fos2 = new FileOutputStream(new File("idea_text\\fos.txt"));

/*        //void write​(int b)
        fos.write(97);
        fos.write(98);
        fos.write(99);
        fos.write(100);
        fos.write(101);*/

        //void write​(byte[] b)
//        byte[] bys={97,98,99,100,101};
        //byte[] getBytes() :返回字符串对应的字节数组
        byte[] bys ="abcde".getBytes();
//        fos.write(bys);

        //void write​(byte[] b, int off, int len)
        fos.write(bys,1,3);

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






    }
}

字节流写数据的两个小问题
package IO流.字节流.字节流写数据;
/*
        1,字节流写数据如何实现换行呢?
            window:\r\n
            linux:  \n
            mac:   \r

        2,字节流如何实现追加写入呢?
            public FileOutputStream (String name,boolean append)
                创建文件输出流以指定的名称写入文件
                如果第二个参数为ture,则字节将写入文件的末尾而不是开头

 */

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

public class 字节流写数据的两个小问题 {
    public static void main(String[] args) throws IOException {
        //创建字节输出流对象
        //追加写入
        FileOutputStream fos=new FileOutputStream("idea_text\\fos.txt",true);

        //写数据
        for (int i=0;i<10;i++){
            fos.write("hello".getBytes());
            fos.write("\r\n".getBytes());//换行
        }

        //释放资源
        fos.close();
    }
}
字节流写数据加异常处理
package IO流.字节流.字节流写数据;
/*
        finally:
            在异常处理时提供finally块来执行所有的清除操作。
          特点:
                被finally控制的语句一定会执行,除非JVM退出

 */

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

public class 字节流写数据加异常处理 {
    public static void main(String[] args){

        //加finally来释放资源
        FileOutputStream fos = null;
        try{
            fos=new FileOutputStream("idea_text\\fos.txt");
            fos.write("hello".getBytes());
        }catch(IOException e){
            e.printStackTrace();
        }
        finally{
            if (fos!=null){
                try{
                    fos.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }

        }
    }
}
 

字节流读数据:

一次读一个字节数据

package IO流.字节流.字节流读数据.一次读一个字节数据;
/*
    字节流读数据:
        需求:
            把文件fos.txt中的内容读取出来在控制台输出

            FileInputStream从文件系统中的文件获取输入字节。
                FileInputStream​(String name)
                    通过打开与实际文件的连接来创建一个 FileInputStream ,
                    该文件由文件系统中的路径名 name命名。

            使用字节输入流读数据的步骤:
                1,创建字节输入流对象
                2,调用字节输入流对象的读取数据方法
                3,释放资源

 */

import java.io.FileInputStream;

import java.io.IOException;

public class 一次读一个字节数据 {
    public static void main(String[] args) throws IOException {
        //创建字节输入流对象
        //FileInputStream​(String name)
        FileInputStream fis=new FileInputStream("idea_text\\fos.txt");

        //调用字节输入流对象的读取数据
        int by;
        /*
            fis.read():读数据
            by=fis.read():把读取的数据赋值给by
            by !=-1 :判断读取的数据是否为-1
         */
        while ((by = fis.read()) != -1){
            System.out.println((char)by);
        }

        //释放资源
        fis.close();
    }

}

 

 

复制文本文件
package IO流.字节流.字节流读数据.一次读一个字节数据;

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

/*
        需求:
            把“D:\\1\\java\\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt”

        分析:
            1,复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源)
                然后写入另一个文件中(目的地)
            2,数据源:
                D:\\1\\java\\窗里窗外.txt---读数据---InputSteam---FileInputStream
            3,目的地
                idea_text\\窗里窗外.txt---写数据---OutputStream---FileOutputStream

 */
public class 复制文本文件 {
    public static void main(String[] args) throws IOException {
        //根据数据源创建字节输入流对象
        FileInputStream fis=new FileInputStream("D:\\1\\java\\窗里窗外.txt");

        //根据目的地创建字节输出流对象
        FileOutputStream fos=new FileOutputStream("idea_text\\窗里窗外.txt");

        //读取数据(一次读取一个字节)
        int by;
        while ((by=fis.read())!=-1){
            fos.write(by);
        }


        //释放资源
        fis.close();
        fos.close();

    }
}
一次读一个字节数组数据
package IO流.字节流.字节流读数据.一次读一个字节数组数据;

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

/*
    字节流读数据:
        需求:
            把文件fos.txt中的内容读取出来在控制台输出

            使用字节输入流读数据的步骤:
                1,创建字节输入流对象
                2,调用字节输入流对象的读取数据方法
                3,释放资源

 */
public class Demo {
    public static void main(String[] args) throws IOException {
        //创建字节输入流对象
        FileInputStream fis=new FileInputStream("idea_text\\fos.txt");

        //调用字节输入流对象的读取数据方法
        //int read​(byte[] b) 从该输入流读取最多 b.length个字节的数据到一个字节数组。
/*
        byte[] bys=new byte[5];

        //第一次读数据
        int len = fis.read(bys);
        System.out.println(len);
        //String (byte[] bytes)
        System.out.println(new String(bys));

        //第二次读数据
        len = fis.read(bys);
        System.out.println(len);
        //String (byte[] bytes)
        System.out.println(new String(bys));

        //第三次读数据
        len = fis.read(bys);
        System.out.println(len);
        //String (byte[] bytes)
        System.out.println(new String(bys));
        */
/*
        hello\r\n
        world\r\n
         *//*


        */
/*
        第一次:hello
        第二次:\r\nwor
        第三次:ld\r\nr
         *//*


*/

        //代码优化:
        byte[] bys =new byte[1024];
        int len;
        while ((len = fis.read(bys)) != -1){
            System.out.println(new String(bys,0,len));
        }

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


    }
}

 

 

复制图片
package IO流.字节流.字节流读数据.一次读一个字节数组数据;


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


/*
        需求:
            把“D:\\1\\1.jpg”复制到模块目录下的“1.jpg”

        思路:
            1,根据数据源创建字节输入流对象
            2,根据目的地创建字节输出流对象
            3,读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
            4,释放资源

 */
public class 复制图片 {
    public static void main(String[] args) throws IOException {
        //根据数据源创建字节输入流对象
        FileInputStream fis = new FileInputStream("D:\\1\\1.jpg");
        //根据目的地创建字节输出流对象
        FileOutputStream fos=new FileOutputStream("idea_text\\1.jpg");

        //读写数据
        byte[] bys=new byte[1024];
        int len;
        while((len=fis.read(bys))!=-1){
            fos.write(bys,0,len);
        }

        //释放资源
        fis.close();
        fos.close();

    }
}
字节缓冲流
package IO流.字节流.字节缓冲流;
/*

1,  BufferOutputStream:该类实现缓冲输出流。
    通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
2,  BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。
    当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节

    构造方法:
    字节缓冲输出流:BufferedOutputStream(OutputStreamout)
    字节缓冲输入流:BufferedInputStream(InputStreamin)

    为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?
    ●字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作

 */

import java.io.*;

public class Demo {
    public static void main(String[] args) throws IOException {
/*
        //字节缓冲输出流:BufferedOutputStream(OutputStreamout)
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("idea_text\\bos.txt"));
        //写数据
        bos.write("hello\r\n".getBytes());
        bos.write("world\r\n".getBytes());
        //释放资源
        bos.close();

        */

        //字节缓冲输入流:BufferedInputStream(InputStreamin)
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("idea_text\\bos.txt"));

        //一次读取一个字节数据
//        int by;
//        while((by=bos.read())!=-1){
//            System.out.println((char)by);
//        }

        //一次读取一个字节数组数据
        byte[] bys=new byte[1024];
        int len;
        while((len=bis.read())!=-1){
            System.out.println(new String(bys,0,len));
        }

        //释放资源
        bis.close();
    }
}
复制视频
package IO流.字节流.字节缓冲流;
/*
        需求:
            把“D:\\1\\字节流复制视频.avi”复制到模块目录下的“idea_text\\字节流复制视频.avi”

        思路:
            1,根据数据源创建字节输入流对象
            2,根据目的地创建字节输出流对象
            3,读写数据,复制视频
            4,释放资源
 */

import java.io.*;

public class 复制视频 {
    public static void main(String[] args) throws IOException{
        //记录开始时间
        long startTime = System.currentTimeMillis();

        //复制视频
        method1();

        //记录结束时间
        long endTime = System.currentTimeMillis();
        System.out.println("共耗时:"+(endTime-startTime)+"毫秒");

    }
    public static void method1() throws IOException {
        //根据数据源创建字节输入流对象
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\1\\字节流复制视频.avi"));
        //根据目的地创建字节输出流对象
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("idea_text\\字节流复制视频.avi"));

        //读写数据,复制视频

        //一次读写一个字节
        int by;
        while ((by = bis.read()) != -1){
            bos.write(by);
        }

        //一次读写以个字节数组数据
        //耗时更少,推荐使用
        byte[] bys=new byte[1024];
        int len;
        while ((len = bis.read())!=-1){
            bos.write(bys,0,len);
        }

        //释放资源
        bis.close();
        bos.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放码过来a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值