java io流不关闭有什么后果_IO知识点学习

本文介绍了Java IO流的基本概念,包括输入流、输出流的分类,字节流和字符流的区别。详细讲解了字节流的OutputStream和InputStream类,如FileOutputStream和FileInputStream的使用方法,以及字符流的Reader和Writer类,如FileReader和FileWriter的构造和读写操作。强调了关闭流的重要性,未关闭流可能导致数据丢失或资源浪费。

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

1 IO概述

IO指数据的传输,可以看作是数据的一种流动,按照流的方向,以内存为基准,输入input和输出output,流向内存的叫输入流,流出内存的叫输出流。输入也叫读取,输出也叫写出

1.1 IO的分类

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

输入流,把数据从其他设备读取到内存的流

输出流,把数据从内存写出到其他设备的流

根据数据分类,字节流和字符流

字节流,以字节为单位,读写数据的流

字符流,以字符为单位,读写数据的流

1.2 顶级父类

04900003242dc39c09983e504333398b.png

2 字节流

2.1 一切皆为字节

一切数据在存储时,都是以二进制数字的形式保存,都是一个一个的字节,那么传输也是如此,所以,字节流可以传输任意文本数据,在操作流的时候,我们要时刻明确,无论使用什么流对象,底层都是二进制数据。

2.2 字节输出流(OutputStream)

java.io.outputstream 抽象类表示字节输出流,将指定的字节信息写到目的地,定义了字节输出流的共性方法:

  • public void close():关闭输出流并释放资源
  • public void flush():刷新此输出流,并强制任何缓冲的输出字节被写出
  • public void write(byte[] b):将从指定的字节数组写入此输出流
  • public void write(byet[] b int off , int len):
  • public void write(int b):将指定的字节输出流

2.3 FileOutputStream类

Java.io.FileOutputStream类是文件输出流,用于将数据写出到文件

构造方法

  • public FileOutputStream(File file):创建文件输出流以写入由指定的File对象表示的文件
  • public FileOutputSteam(String name):创建文件输出流以指定的名称写入文件。

当创建一个流对象时,必须传入一个文件路径,该路径下,如果没有这个文件,会创建该文件,如果有这个文件,会清空这个文件的数据。

写出字节数据

  • 1、写出字节:write(int b):可以写出一个字节数据
  • 2、写出字节数组:write(byte[] b):每次可以写出数组中的数据,

继续追加续写

  • public FileOutputStream(File file,boolean append):创建文件输出流以写入由指定的File对象表示文件。
  • public FileOutptStream(File file,boolean append):创建文件输出流以指定的名称写入文件上述两个方法,参数中都需要传入一个boolean类型的值,true表示追加,false表示清空元数据

2.4 字节输入流(InputStream)

java.io.InputStream抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存,定义了字节输入流的基本共性方法

  • public void close():关闭此输入流并释放资源
  • public abstract int read ():从输入流读取数据的下一个字节
  • public int read(byte[] b):从输入流中读取一些字节数,并将它们存储到字节数组中

2.5 FileInputStream类

Java.io.FileInputStream类是文件输入流。从文件中读取字节

构造方法:

  • public FileInputStream(File file):通过打开与实际文件连接来创建一个FileInputStream,该文件有文件系统中的File对象file命名
  • public FileInputStream(String name):该文件有文件系统的路径名name命令创建一个流对象时,必须传入一个文件路径,该路径下如何没有文件,会抛出FileNotFoundException

读取字节数据

  • 1、读取字节:read方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1
  • 2、使用字节数组读取:read(byte[] b):每次读取b的长度个字节到数组中,返回读取到有效字节个数,读取到末尾,返回-1

3 字符流

当使用字节读取文本文件时,遇到中文字符时,可以不会显示完整的字符,因为一个中文字符占多位字节存储,Java提供字符流,以字符为单位读写数据,专门用于处理文本文件

3.1 字符输入流(Reader)

java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中,定义了字符输入流的基本共性功能方法:

  • public void close():关闭此流并释放此流相关的资源
  • public int read():从此输入流读取一个字符
  • public int read(char[] cbuf):从输入流读取一些字符,并将它们存储到字符数组中,

3.2 FileReader

java.io.FileReader类是读取字符文件的类,构造时使用系统默认的字符编码和默认字节缓冲区,

构造方法

  • public Reader(File file):创建一个新的FileReader,给定要读取的File对象
  • public Reader(String fileName):创建一个新的FileReader,给定要读取的文件的名称当你创建一个流对象时,必须传入一个文件路径,类似于FileInputStream

读取字符数据

  • 1、读取字符:read方法,每次可以读取一个字符的数据,提升为int类型,读取到文本末尾,返回-1,循环读取
  • 2、使用字符数组读取:read(char[] b):每次读取b的长度的字符到数组中,返回读取到的有效字符个数,读取末尾时,返回-1

3.3 字符输出流(Writer)

java.io.Writer抽象类是用于表示写出字符流的所有类的超类,将指定的字符信息写出到目的地定义了字符输出流的共性方法

  • public void write(int c):写入单个字符
  • public void write(char[] b):写入字符数组
  • public abstract void wrter(char[] b ,int off,int len):写入字符数组的某一部分
  • public write(String str):写入字符串
  • public write(String str,int off,int len):写入字符串的某一部分
  • void flush()
  • void close()

3.4 FileWriter

java.io.FileWriter是写出字符到文件的类,构造时,使用系统默认的字符编码和字节缓冲区

构造方法:

  • FileWriter(File file):创建一个新的字符输出流,给定要写出的File对象
  • FileWriter(String filename):创建一个新的字符出流,给定要写出的文件的名称

基本写出数据

  • 写出数据 write(int b):每次写出一个字符数据

关闭和刷新

因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中,但是关闭的流对象,是无法继续写出数据,如果我们既想写出数据,又想继续使用流,就有flush方法

  • flush:刷新缓冲区,流对象可以继续使用
  • close:先刷新缓冲区,再关闭

写出其他数据

  • 写出字符数组write(char[] b );每次写出字符数组中的数据
  • 写出字符串write(string str):每次可以写出字符串中的数据

5 属性集

5.1 概述

java.util.Projecties继承于hashtable,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应的值,都是一个字符串

5.2 Properties类

构造方法:

  • public Properties():创建一个空的属性列表

基本存储方法

  • public Object setProperties(String key,String value):保存一对属性
  • public String getProperties(String key):键获取值
  • public Set stringPropertyNames:所有键的名称集合

与流相关的方法

  • public void load(InputStream isStream):从字符输入流中读取键值对参数中使用了字节输入流,通过流对象,可以关联到某文件上,这样能加载文本中的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值