java基础----IO流

文章介绍了Java中的IO流概念,包括输入流和输出流的分类,如字节流和字符流,以及节点流和处理流的区别。通过示例代码展示了如何使用FileInputStream和FileOutputStream进行字节流操作,解释了为何汉字在字节流中显示异常,并提出使用FileReader和FileWriter进行字符流操作以正确读取汉字。最后,强调了异常处理和资源关闭的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、初识IO流

File:创建文件,目录,但是文件的内容无法操作

对文件的内容进行操作,使用IO流

注意:管道并不是真实存在的

IO流: 一般都是成双成对: 有一个xx输入流, 对应有一个xx输出流

输入流: 接收数据, 读操作

输出流: 发送数据,写操作 读入写出

IO的父类组成:四大抽象类组成:

 

二、IO流的分类

按流向分:

◦ 输入流:程序可以从中读取数据的流

◦ 输出流:程序能向其中写入数据的流

按数据传输单位分:

◦ 字节流:以字节为单位传输数据的流

◦ 字符流:以字符为单位传输数据的流

按功能分:

◦ 节点流:用于直接操作目标设备的流

◦ 处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更强大、灵活的读写功能。

 

 

节点流: 直接接在源头的流, 不需要依赖其他流

  1. 字节的节点流: 万能流(不管是什么文件(视频、音频、文本)都能进行读写)

FileInputStream: 文件字节输入流, 源头接在文件, 把文件的内容读取到内存(程序)

FileOutputStream: 文件字节输出流: 把内存(程序)的数据写入到文件

  1. 字符节点流: 只能文本文件读写

FileReader: 文件字符输入流, 源头接在文件, 把文件的内容读取到内存(程序)

FileWriter: 文件字符输出流: 把内存(程序)的数据写入到文件

输入流:

  1. read() 读方法

  2. close() 关闭

输出流:

  1. write() 写方法

  2. close() 关闭

IO流使用步骤:

  1. 创建一个IO对象

  2. 如果输入流,调用read() 读取数据, 如果是输出流: 调用write() 写数据

  3. 关闭

字节输入流:FileInputStream

构造方法:  

 

 

为什么fis已经在new FileInputStream()的时候初始化了,还要进行赋值等于null呢?

因为在初始化的时候会有个FileNotFoundException异常,如果发生了异常,try{}

里面的内容根本就不会执行,所以file就不会进行初始化,也就没有赋值,所以在一开始要让fis等于null;

为什么fis.close要放在finally里面呢?

因为打印后,read()方法会出现异常,万一出现了异常,fis.close() 就不会执行,也就关不了,而放在finally里面,无论抛不抛出异常,最终都会关闭fis.

运行结果:

为什么汉字变成这样了呢?

因为这是字节流,他是一个字节一个字节的读的,而汉字是两个字节,所以只读了一半,打印出来就乱套了。

所以,我们使用字符流来读:

package com.fs.javase;

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

public class IODemo2 {
    public static void main(String[] args) {
        FileReader fr =null;
        //创建对象
        File file = new File("C:\\test\\c.txt");
        //读取文件
        try {
            fr = new FileReader(file);
            //int rs = fr.read();
            int rs = -1;//读到文件末尾
            //当没有读到文件末尾
            while ((rs=fr.read()) != -1){
                System.out.print((char)rs);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

 运行结果:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值