java笔记12 字节流和字符流

一、什么是IO
I : Input;
O:Output;
通过IO可以完成硬盘文件的读和写。
在这里插入图片描述
二、IO流的分类
(1):按照流的方向进行分类(以内存作为参照物):

往内存中去,叫做输入(Input),或者叫做读(Read)
从内存中出来,叫做输出(Output),或者叫做写(write)

(2):按照读取数据方式不同进行分类:

  • 有的流是按照字节的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制。这种流是万能的,什么类型的文件都可以读取。包括文本文件,图片,声音文件,视频等;
    例如文件file1.txt(a中国bc张三fe),采用字节流的话是这样读的:
    第一次读:一个字节,正好读到’a’,
    第二次读:一个字节,正好读到’中’字符的一半,
    第三次读:一个字节,正好读到’中’字符的另外一半。

  • 有的流是按照字符的方式读取数据的,一次读取一个字符,这种流是为了方便读取普通文本文件而存在的,这种流不能读取图片、声音、视频等文件。只能读取纯文本文件,连word文件都无法读取。

三、文件流

  1. 文件流包括
    FilelnputStream FileOutputStream — 字节流
    FileReader FileWriter — 字符流
  2. FilelnputStream的使用
  • lnputStream 是用来读取字节的,是个抽象类,我们通常使用的是该类的子类
  • FilelnputStream 是InputStream的子类,利用FilelnputStream 可以将一个文件的内容按字节为单位读取出来
  • FilelnputStream有一个很常用的构造函数:
    public FilelnputStream(String fileName) throws FileNotFoundException
    (1)利用该构造函数可以实现将输入流连接到某个文件的功能;
    (2)必须对本构造函数抛出的异常进行捕捉;
    (3)如果用字符串来表示操作系统的文件路径时,我们可以使用 \ \ (两个反斜杠)和 /(一个正斜杠)两种方式来作为文件夹的路径分隔符;
    (4)FileOutputStream 同理。
  1. FileReader的使用
  • Reader 是用来读取字符的,是个抽象类,我们通常使用的是该类的子类
  • FileReader是Reader的子类,利用FileReader可以将一个文件的内容以字符为单位读取出来
  • FileReader有一个很常用的构造函数:
    public FileReader(String fileName) throws FileNotFoundException
    (1) 利用该构造函数可以实现将输入流连接到某个文件的功能
    (2)必须对本构造函数抛出的异常进行捕捉
    (3)如果用字符串来表示操作系统的文件路径时,我们可以使用 \ \ (两个反斜杠)和 /(一个正斜杠)两种方式来作为文件夹的路径分隔符;
    (4)FileWriter 同理。

四、字节流、字符流的区别

  • FilelnputStream 和 FileOutputStream 可以完成所有格式文件的赋值
  • FileReader 和 FileWriter 只可以完成文本文件的复制,却无法完成视频等格式文件的复制
  • 因为字节是不需要解码和编码的,将字节转化为字符才存在解码和解码的问题,所以字节流可以从所有格式的设备中读写数据,但字符流只能从文本格式的设备中读写数据。

五、字节流和字符流的使用

  1. 字符流实现文本文件的复制(读取)
    字符流一次读取两个字节(字符流不能处理非文本文件,或者说,字符流是专门处理文本文件的)
package com.ittanya.demo1;

import java.io.FileReader;
import java.io.FileWriter;

public class FileReadWriterCopy {
    public static void main(String[] args) throws Exception{
        //绝对路径
        FileReader fr=new FileReader("D:\\ideaProjects\\basic code\\javaday\\src\\com\\ittanya\\demo1\\FileReadWriterCopy.java");
        //写入,随便写到D盘下的一个根目录里
        FileWriter fw=new FileWriter("D:\\Tanya.haha");

        int ch;
        ch=fr.read();
        while(-1!=ch){
            fw.write(ch);
            ch=fr.read();
        }
        fw.flush();//刷新
        fr.close();
        fw.close();
    }
}

得到如下文件:
在这里插入图片描述

  1. 用字节流拷贝文本文件
    (一次读取一个字节)
package com.ittanya.demo1;

import java.io.*;

//用字节流拷贝文本文件
public class InputStreamOutPutStream {
    public static void main(String[] args) throws Exception{
        FileInputStream fi=new FileInputStream("D:\\ideaProjects\\basic code\\javaday\\src\\com\\ittanya\\demo1\\FileReadWriterCopy.java");
        //写入,随便写到D盘下的一个根目录里
        FileOutputStream fo=new FileOutputStream("D:\\Tanya.haha1");
        int ch;
        ch=fi.read();
        while(-1!=ch){
            fo.write(ch);
            ch=fi.read();
        }
        fo.flush();//刷新
        fi.close();
        fo.close();
    }
}

得到以下文件:
在这里插入图片描述

  1. 用字节流读取非文本文件(以图片文件为例):
package com.ittanya.demo1;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class InputStreamOutPutStream2 {
    public static void main(String[] args) throws Exception{
        FileInputStream fi=new FileInputStream("D:\\壁纸\\镜玄.png");
        //写入,随便写到D盘下的一个根目录里
        FileOutputStream fo=new FileOutputStream("D:\\镜玄大帅哥.jpg");
        int ch;
        ch=fi.read();
        while(-1!=ch){
            fo.write(ch);
            ch=fi.read();
        }
        fo.flush();//刷新
        fi.close();
        fo.close();
    }
}

读取结果:
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值