Java IO(一)——读写文件

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

IO流是什么

先看看百度百科对流的解释

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出
复制代码

可以用下面这副图来解释IO流,通俗地说,从磁盘将数据读入内存就称为输入流,而把数据从内存写入磁盘中就称为输出流。JAVA IO流就是JAVA程序和操作系统之间通信用的方法。

在这里插入图片描述

字节流和字符流

顾名思义,字节流读入方式是一字节一字节的读入,而字符流的读入方式是一字符一字符的读入,字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。 所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列 字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

在这里插入图片描述

FileInputStream && FileOutputStream

FileInputStream 和 FileOutputStream 处理字节流的,分别是处理输入和输出的,输入和输出可以一字节一字节进行,也可以一次多字节。

构造方法

对于 FileInputStream 来说,构造器很简单,直接传入待读文件的路径就行;对于FileOutputStream来说,有两种构造方法,第一种和FileInputStream 一样传入待写文件的路径,另一种是传入第二个参数(true 或者 false),表示重写文件或是在原有文件后面继续写入。

public FileInputStream(String name)
public FileOutputStream(String name)
public FileOutputStream(String name, boolean append)
复制代码

一次一字节

//FileInputStream 一次读入一字节的函数
	public int read()

//FileOutputStream 一次写一字节的函数
	public void write(int b)
复制代码

一次多字节

//FileInputStream 一次读入多字节的函数
	public int read(byte[] b)
	public int read(byte[] b, int off, int len)

//FileOutputStream 一次写多字节的函数
	public void write(byte[] b)
	public void write(byte[] b, int off, int len)
复制代码

关闭

在 FileInputStream 以及 FileOutputStream执行完毕以后需要调用close()函数关闭流,这十分重要,因为流是一种计算机资源,不关闭的话会浪费资源,并且对于输出流来说,不关闭的话就不能写入文件。

FileReader && FileWriter

FileReader 和 FileWriter处理字符流的,分别是处理输入和输出的,输入和输出可以一字符一字符进行,也可以一次多字符。

构造方法

对于 FileReader 来说,构造器很简单,直接传入待读文件的路径就行;对于FileWriter来说,有两种构造方法,第一种和FileReader 一样传入待写文件的路径,另一种是传入第二个参数(true 或者 false),表示重写文件或是在原有文件后面继续写入。

public FileReader(String name)
public FileWriter(String name)
public FileWriter(String name, boolean append)
复制代码

一次一字节

//FileReader 一次读入一字节的函数
	public int read()

//FileWriter 一次写一字节的函数
	public void write(int b)
复制代码

一次多字节

//FileReader 一次读入多字节的函数
	public int read(byte[] b)
	public int read(byte[] b, int off, int len)

//FileWriter 一次写多字节的函数
	public void write(byte[] b)
	public void write(byte[] b, int off, int len)
复制代码

关闭

在 FileReader 以及 FileWriter 执行完毕以后需要调用close()函数关闭流,这十分重要,因为流是一种计算机资源,不关闭的话会浪费资源,并且对于输出流来说,不关闭的话就不能写入文件。

猜你喜欢

转载自juejin.im/post/7017639934177591310