Java IO流小结

文章目录


前言

Java基础:io流学习小结


一、IO流是什么?

I/O是Input/Output的缩写

I: input,读的操作,指将硬盘上的文件读入到内存。

O: output,写的操作,指将内存上的文件写入到硬盘。

IO流就是用来处理设备间数据传输问题的。


二、io流分类


1.字节流

(1)概述

在计算机中,无论是文本、图片、音频还是视频,所有的文件都是以二进制(字节)形式存在的,字节流可复制任何文件数据,因此字节流是程序中最常用的流。

(2)写入方法

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException{

        //创建一个字符输出流对象并让他指向文件位置
        FileOutputStream fos=new FileOutputStream("E:\\myjava\\javase\\fos.txt",true);

        //将字节97写入文件
        fos.write(97);
        fos.write("\r\n".getBytes());

        byte[] b= {97,98,99,100};
        //将b数组写入文件
        fos.write(b);
        fos.write("\r\n".getBytes());

        //将b数组的0到len写入文件
        fos.write(b,0,3);
        fos.write("\r\n".getBytes());

        //getBytes方法直接将要写的数据转化为字节写入文件
        //这边写入一个换行符
        fos.write("\r\n".getBytes());

        //关闭输出流并释放资源
        fos.close();
    }
}

在创建字符输出流对象时文件路径后加true代表追加写入

运行结果:

三次写入对应的结果,如果不写入回车对应的字节,那么将不会有换行出现。

 (3)读入方法

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException{

        //创建一个字符输出入流对象并让他指向文件位置
        FileInputStream fis=new FileInputStream("E:\\myjava\\javase\\fot.txt");

        //读取文件的一个字节
        int b=fis.read();
        System.out.println(b);
        System.out.println((char)b);

        //一次读取一个字节数组,数组大小一般设置为1024整数倍
        // 如果读取到文件的尾部,那么读取的b=-1
        //因此我们可以通过一个循环来读取一个文件里的所有数据
        byte[] bys=new byte[1024];
        int len;
        while((len=fis.read(bys))!=-1)
        {
            System.out.println(new String(bys,0,len));
        }
        
        //释放资源
        fis.close();
    }
}

运行结果:

 (4)字节缓冲流

字节缓冲流的读写方法与上述一致,但其具有一定的缓冲区,并且读写速度相对基础字符流要快一些, 可以指定缓冲区的大小,或者接受默认的大小。 在大多数情况下,默认值就足够大了。


2.字符流

(1)概述

字符流会把读取到的二进制的数据进行对应 的编码与解码工作,且字符流只能复制文本数据

 

(2)字符流的编码解码问题

import sun.nio.cs.ext.GBK;

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException{
        //创建字符输入流对象,通过GBK进行编码
        OutputStreamWriter ow=new OutputStreamWriter
                (new FileOutputStream("E:\\myjava\\javase\\fos.txt"), "GBK");

        //字符串写数据
        String str="我爱编码";
        ow.write(str);
        ow.close();
//        ow.write("\r\n");
        //字符串部分数据写入
//        ow.write(str,0,1);

        //创建字符输出流对象,通过GBK进行解码
        InputStreamReader iw=new InputStreamReader
                (new FileInputStream("E:\\myjava\\javase\\fos.txt"),"GBK");
        int b;
        while((b=iw.read())!=-1)
        {
            System.out.print((char)b);
        }

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

只有OutputStreamWriter和InputStreamReader分别提供了编码解码的功能呢,在指定文件的后面进步编码解码的指定,就可以按照指定的方法进行编码解码,上面的代码展示了按照GBK的方法进行编码解码,当你的编译器是UTF-8的方式进行编码时写入文件就会出现下面的问题

但是你可以用相应的编码方法进行解码,依旧可以输出正确的文本文档

注:FileReader和FileWriter与上述的方法相比缺少了编码和解码的功能

(2)字符流读写数据方法

字符流写数据的方法与字节流相比多出来了两种写入数据的方法

字符流多了可以写入字符串与读取部分字符串的功能如下图所示

写入的时候,可以添加flush方法对数据进行刷新,否则有可能出现数据显示不出来的问题

但是在代码的最后进行close也可以对数据进行一次刷新


 字符流读数据的方法可以参考字节流读数据的方法

(3)字符缓冲流

字符缓冲流的读写数据方法基本与字节流一致,

字符缓冲流的特有功能:

void newLine():相当于在写数据的时候换行

 public String readLine():读取一行数据,直到结尾,如果无文本可读则读取结果为null。


三、flush和close方法的区别

flush在写数据的时候进行刷新,刷新完了之后还可以继续写入数据,而close是关闭流,关闭之后不能继续写入数据,并且在关闭前也会有刷新的操作。


总结

综上所述,想要进行数据的读取一般使用字节流的方式,并且使用字节缓冲流一次读取一个数组的方式读取数据,这样读取的速度是最快的。

以上就是今天要讲的内容,本文仅仅简单介绍了IO流的基础内容,如果想学习更深的操作,还需自己钻研捏。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值