Java-----IO流【字节流与字符流】

字节流

FileOutputStream——字节输出流

  • 案例:

    public static void main(String[] args){
        // 1.创建一个字节输出流的对象
        // 为了方便练习,我们直接创建到根目录下
        // 创建一个字节输出流对象
            OutputStream outputStream = new FileOutputStream("a.txt");// 覆盖,下一次写入的字符会覆盖本来的字符
            OutputStream outputStream1 = new FileOutputStream("a.txt",true);// 不覆盖,下次写入字符会追加到后面
    
            // 直接写成这种情况是会换行追加写的,但如果是把“大家好”注释掉就会覆盖
            outputStream.write("大家好".getBytes(StandardCharsets.UTF_8));
            outputStream.write("你好啊".getBytes(StandardCharsets.UTF_8));
    
            // "\r\n"是换行的意思
            outputStream1.write("富强,民主,文明,和谐;\r\n".getBytes(StandardCharsets.UTF_8));
            outputStream1.write("自由,平等,公正,法制;\r\n".getBytes(StandardCharsets.UTF_8));
            outputStream1.write("爱国,敬业,诚信,友善。".getBytes(StandardCharsets.UTF_8));
    
            // 如果输入的是纯数字,那么显示的是ASCII码形式的数字
            outputStream.write(97);
            // 要是想输入数字,那么简单的来说,就是把数字转成字符串就可以了
    
            // 从下标零开始往后数到第三个三输入进去
            outputStream.write("abcdefg".getBytes(StandardCharsets.UTF_8),0,3);// 输入“abc”
            
            // 最后记得要时刻关闭IO流
            outputStream.close();
            outputStream1.close();
    }
    

FileInputStream——字节输入流

  • 案例:

    // 读文件的内容到内存,所以如果没有这个文件就会报错
    public static void main(String[] args){
        InputStream in = new FileInputStream("word.txt");
        System.out.println(in.read());// 一次读取一个字节,输出-1就表示没有内容(读完了)
        
        byte[] bytes = new byte[1024];
        in.read(bytes);// 将内容读取到传入的字节数组中
        System.out.println(new String(bytes).length());
        
        byte[] bytes = new byte[1024];
        int len = 0;
        while((len = in.read(bytes)) != -1){
            System.out.println(len);
            System.out.println("内容:"+new String(bytes, 0, len));
        }
        in.close();
    }
    

字符流

  • 实例 输出:

    // 创建一个字符输出流 一个中文汉字、字母、数字 都是字符
    Writer fw = new FileWriter("b.txt");
    // 可以不断向后添加内容
    Writer fw = new FileWriter("b.txt",true);
    // 通过字符流向 b.txt 中写入内容
    fw.write("大家好");
    fw.write("你好啊!!".toCharArray(),0,3);// 从零开始长度为3写入
    fw.write("今天天气不错".toCharArray());
    fw.write(20013);
    
    fw.close();
    
  • 实例 输入:

  • 一字符流的形式读取硬盘文件的内容到内存

    public static void main(String[] args) throws IOException{
        Reader fr = new FileReader("word.txt");
        System.out.println(fr.read()); // 20013  输出的字符对应的unicode编码
        System.out.println(fr.read()); // -1  表示文件读取结束
        
        char[] chars = new char[10];
        System.out.println(fr.read(chars,0,10));
        System.out.println(new String(chars,0,10));
        
        char[] chars = new char[10];
        int len = 0;// 每次循环读取到的字符长度存储到该变量上
        while((len = fr.read(chars)) != -1){
            // System.out.println(len);
            System.out.println(new String(chars,0,len));
        }
        fr.close();
    }
    

使用字符流、字节流复制文件

public static void main(String[] args) throws Exception{
        // 字符文件可以轻松复制文本到其他文件夹中,但如果传入是视频或图片文件,那么会导致你的文件打不开

        // 创建字符文件输入流
        Reader fr = new FileReader("a.txt");
        // 创建字符文件输出流
        Writer wr = new FileWriter("E:/a.txt");

        char[] ch = new char[10];
        int len = 0;// 每次循环读取到的字符长度储存到该变量上
        while ((len = fr.read(ch)) != -1){
            wr.write(ch,0,len);
        }

        wr.close();
        fr.close();

  }
public static void main(String[] args) throws Exception{
        // 字节流可以轻松复制图片和视频文件到其他文件夹中,但是用于传输文本文档内容可能会有乱码

        // 创建一个读取文件的字节输入流
        InputStream is = new FileInputStream("a.txt");
        // 创建一个写入硬盘数据的字节输出流
        OutputStream os = new FileOutputStream("D:/a.txt");

        byte[] b = new byte[1024];
      int len = 0;
        while ((len = is.read(b)) != -1){
            os.write(b,0,len);
        }

        os.close();
        is.close();
    }

所以我们一般用字符流来处理文本文件,用字节流来处理视频、图片等文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值