IO字节流和字符流

本文介绍了Java中的IO流,包括字节流和字符流的区别与应用场景。字节流分为字节输入流和字节输出流,如FileInputStream和FileOutputStream,用于处理二进制数据。字符流包含字符输入流FileReader和字符输出流FileWriter,适合处理文本数据。通过实例展示了如何使用这些流进行数据读写。

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

  • I 表示intput , 是数据从硬盘文件读入到内存的过程,称为输入,负责读
  • O表示output, 是内存程序的数据从内存写出到硬盘文件的过程.称为输出,负责写.

 

总结流的四大类: 

  • 字节输入流: 把来自磁盘文件网络中的数据以字节的方式读入到内存中去的流称为字节输入流
  • 字节输出流:把内存中的数据以字节写出到磁盘文件或者网络中去的称为字节输出流
  • 字符输入流:把来自磁盘文件网络中的数据以字符的方式读入到内存中去的流称为字符输入流
  • 字符输出流:把内存中的数据以字符写出到磁盘文件或者网络中去的流称为字符输出流

FileInputStream:

FileInputStream​(File file)通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的 File对象 file命名
FileInputStream​(String name)通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的路径名 name命名
read()从此输入流中读取一个字节的数据。
read​(byte[] b)从此输入流 b.length最多 b.length字节的数据读 b.length字节数组
read​(byte[] b, int off, int len)从此输入流 len最多 len字节的数据读入一个字节数组。
close()关闭此文件输入流并释放与该流关联的所有系统资源
flush()刷新流。

 


使用循环改进,输出全部内容

 


使用字节输入流读取字节数组

 改进写法\\

          var is = new FileInputStream("d:/soft/Demo/1.txt");
               byte[] st = new byte[50];
               int len;
               while ((len=is.read(st))!=-1){
                   System.out.println(new String(st,0,len));
               }

字节输出流: FileOutputStream

FileOutputStream​(String name)创建文件输出流以写入具有指定名称的文件。
FileOutputStream​(File file)创建文件输出流以写入由指定的 File对象表示的文件
write​(int b)将指定的字节写入此文件输出流
write​(byte[] b)将指定字节数组中的 b.length字节写入此文件输出流。
write​(byte[] b, int off, int len)将从偏移量 off开始的指定字节数组中的 len字节写入此文件输出流
public static void main(String[] args) throws Exception {
        var os =new FileOutputStream("d:/soft/Demo/1.txt");//先清空之前的数据,写新数据进去
         //写一个数据出去
        os.write('a');
        os.write(98);
        os.write('是');

        byte[] buffer ={'a',12,33,22};
        os.write(buffer);
        os.write("\r\n".getBytes()); //\r\n 表字符流换行 \r表回车
        byte[] buffer2 ="我是中国人".getBytes();
        os.write(buffer2);
        byte[] buffer3 ={'c',11,22,33};
        os.write(buffer3,0,3); //选取指定范围写入
        //写数据必须刷新数据
//        os.flush();
        os.close();  //释放资源

字符流: 与字节流相比,字符流更适合读取文本数据。

字符输入流:FileReader

FileReader​(String fileName)使用平台 default charset创建一个新的 FileReader ,给定要读取的文件的 名称 。
FileReader​(File file)使用平台 FileReader ,在 File读取时创建一个新的 FileReader 。
read()读一个字符。
read​(char[] cbuf)将字符读入数组。
read​(char[] cbuf, int off, int len)将字符读入数组的一部分。
  public static void main(String[] args) throws IOException {
            //实例一个字符输入流,与源文件相连
        var file = new FileReader("d:/soft/Demo/2.txt");
          //定义一个字符数组做桶
        char[] buffer =new char[1000];
        int len;
         //定义len用来接收读取到的文件,把读到的文件放到桶里
        while ((len =file.read(buffer))!=-1){
                //实例化字符串对象,把桶子里的接收
                String str =new String(buffer,0,len);
            System.out.println(str);
        }
    }

字符输出流: FileWriter

FileWriter​(String fileName)构造一个 FileWriter给出文件名,使用平台的 default charset
FileWriter​(File file)给 File写一个 FileWriter ,使用平台的 default charset
append​(char c)将指定的字符追加到此writer。
append​(CharSequence csq, int start, int end)将指定字符序列的子序列追加到此writer。
write​(String str)写一个字符串。
write​(char[] cbuf)写一个字符数组。
write​(String str, int off, int len)写一个字符串的一部分。
write​(char[] cbuf, int off, int len)写一个字符数组的一部分
package IO;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriter1 {
    public static void main(String[] args) throws IOException {
        var fw =new FileWriter("d:/soft/Demo/1.txt");
//        public void write(int c):写一个字符出去
        fw.write(32);
        fw.write('男' );
        fw.write("鲁迅");
        fw.write("\r\n");
        fw.flush();
        //写一个字符数组出去 public void write(char[] buffer)
        char[] buffer ="我是周树人".toCharArray();
        fw.write(buffer);
        fw.write("\r\n");
        //写入字符串的一部分出去 public void write(String c ,int pos,int end)
        fw.write("我是鲁迅er",1,5);
        fw.write("\r\n");
        //写数组的一部分出去。public void write(char[] c ,int pos,int end)
        char []chars ="我是讯哥儿".toCharArray();
        fw.write(chars,1,4);
        // ,flush()  刷新后流可以继续使用
        fw.write("\r\n");
        fw.flush();

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值