JAVA-------IO流

IO流

什么是流

  • 指一连串流动的字符,是以先进先出方式发送信息的通道

根据数据的流向分为:输入流 和 输出流

  • 输入流:把数据从其他设备上读取到内存中的流
  • 输出流:把数据从内存中写出到其他设备上的流

根据数据的类型分为:字节流和字符流

  • 字节流:以字节为单位,读写数据的流。可以读写任何类型的文件
  • 字符流:以字符为单位,读写数据的流。只能读写文本

对应的超类

输入流输出流
字节流InputStreamOutputStream
字符流ReaderWriter

在这里插入图片描述

字节流

OutputStream(字节输出流)

是所有字节输出流的所有类的超类,将指定的字节信息写出到目的地

字节输出流的共性功能
public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
public void write(byte[] b):将 b.length个字节从指定的字节数组写入此输出流。
public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。 也就是说从off个字节数开始读取一直到len个字节结束
 public abstract void write(int b) :将指定的字节输出流。
FileOutputStream

文件输出流,用于数据写出到文件

构造方法

在这里插入图片描述

其中 public FileOutputStream(String name)最常用

类似这样创建字节输出流对象都做了三件事情

  1. 调用系统功能去创建文件【输出流对象才会自动创建】
  2. 创建fos对象
  3. 把foutputStream对象指向这个文件
FileOutputStream写字节数据

在这里插入图片描述

通过write方法实现字节数据的写入

FileOutputStream的换行实现与追加写入
换行实现
	windows		\r\n
	Linux		\n
	Mac			\r
eclipse/IDEA 中的记事本软件以及editplus这样的第三种软件都做了平台的兼容

追加写入
	public FileOutputStream(File file, boolean append)
	public FileOutputStream(String name, boolean append)
这两个构造方法,第二个参数中都需要传入一个boolean类型的值,true 表示追加数据,false 表示不追加也就是清空原有数据。这样创建的输出流对象,就可以指定是否追加续写了

代码演示

public class Test {
    public static void main(String[] args) throws IOException {
       
       File file = new File("a.txt");
        //当输出流所关联的文件不存在,就会自动创建一个文件,不会报错
        FileOutputStream out = new FileOutputStream(file);
       
       //创建一个向具有指定名称的文件中写入数据的输出字节流
        FileOutputStream out1 = new FileOutputStream("b.txt");
       
       //一次写入一个字节
        out1.write(97);
        out1.write(98);
        out1.write(99);
        out1.flush();
       
       //一次写入一个字节数组  
       //.getBytes()
        byte[] bytes = "我想和你一起闯入森林潜入海底".getBytes();
        out.write(bytes);
        out.flush();
       
       //0表示从字节数组的哪个索引开始   12 表示写了多少个字节  
       //一个汉字在UTF-8中占3个字节
        out.write(butes,0,12);
        out.flush();
        
       //true表示追加写入,不会造成覆盖
        FileOutputStream out2 = new FileOutputStream("c.txt",true);
        byte[] bytes1 = "人类的本质".getBytes();
        out2.write(bytes1);
        out2.flush();
        
       // 换行符的使用
        out2.write("\r\n".getBytes());
        out2.flush();
        
       //最后记得关闭
        out.close();
        out1.close();
        out2.close();
    }
}

生成结果

a.txt

我想和你一起闯入森林潜入海底

b.txt

abc

c.txt

程序运行几次,就会写几次,不会造成覆盖

人类的本质
人类的本质
人类的本质
人类的本质
InputStream(字节输入流)

抽象类,是表示字节输入流的所有类的超类

字节输入流的共性功能
public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
public abstract int read(): 从输入流读取数据的下一个字节。
public int read(byte[] b): 该方法返回的int值代表的是读取了多少个字节,读到几个返回几个,读取不到返回-1
FileInputStream

文件输入流,从文件中读取字节

构造方法

在这里插入图片描述

其中 public FileInputStream(String name)最常用

读取字节

在这里插入图片描述

**read()**方法

(d.txt)内容为 abcd

public class Test2 {
    public static void main(String[] args) throws IOException {
        File file = new File("d.txt");
        file.createNewFile();
        FileInputStream in = new FileInputStream(file);
        int r1 = in.read();
        System.out.println(r1);
        int r2 = in.read();
        System.out.println(r2);
        int r3 = in.read();
        System.out.println(r3);
        int r4 = in.read();
        System.out.println(r4);
        int r5 = in.read();
        System.out.println(r5);
        
    }
}
输出结果
97
98
99
100
-1
使用字节数组读取

read(byte[] b),每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回-1

public class Test2 {
    public static void main(String[] args) throws IOException {
        File file = new File("d.txt");
        file.createNewFile();
        FileInputStream in = new FileInputStream(file);
        byte[] bytes = new byte[1024];
        int len=0;
        int read = in.read(bytes);
        for (byte aByte : bytes) {
            System.out.println(aByte);
        }
        System.out.println(read);
        in.close();
    }
}
输出结果
97
98
99
100
(1020个0)
4

字符流

Reader(字符输入流)

抽象类,字符输入流的所有类的超类,可以读取字符信息到内存中

字符输入流的共性方法
public void close() :关闭此流并释放与此流相关联的任何系统资源。
public int read(): 从输入流读取一个字符。
public int read(char[] cbuf): 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中
InputStreamReader/FileReader

InputStreamReader是字节流通向字符流的桥梁

FileReader是读取字符文件的便利类

构造方法

在这里插入图片描述

Writer(字符输出流)

抽象类,字符输出流的所有类的超类,将指定的字符信息写出到目的地

字符输出流的共性方法
void write(int c) 写入单个字符
void write(char[] cbuf)写入字符数组
abstract void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数
void write(String str)写入字符串
void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数
void flush()刷新该流的缓冲
void close() 关闭此流,但要先刷新它
OutputStreamWriter/FileWriter

OutputStreamWriter是字符流通向字节流的桥梁

FileWriter是写出字符到文件的便利类

构造方法
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值