目录

一.使用IO流四点要素

二.File类(操作文件,只对文件本身操作,不对内容操作)

(1)三种常用的构造方法:

(2)注意:

(3)File类常用的方法:获取功能、获取绝对路径和相对路径、判断功能、创建删除功能的方法

(4)File判断功能的方法:

(5)File类创建和删除功能的方法

(6)File类目录遍历:

三.IO分类(in输入也叫做读取数据,out输出也叫做作写出数据)

四.字节输出流(OutputStream)

(1)基本功能方法:(由父类OutputStream定义提供,但是子类都能使用,例如FileOutputStream类)

(2)FileOutputStream类构造方法

(3)注意:创建输出流对象的时候,系统会自动去对应位置创建对应文件,而创建输入流对象的时候,文件不存在则会报FileNotFoundException异常,也就是系统找不到指定的文件异常。

(4)FileOutputStream实现数据追加续写、换行

五.字节输入流

(1)基本功能方法:

(2)FileInputStream类的构造方法

六.字符流

七.字符输入流(Reader)

(1)常用方法:

(2)FileReader类构造方法:

八、字符输出流(Writer)

(1)常用方法:

(2)FileWriter类构造方法:

(3)【注意】:

(4)关闭close和刷新flush


一.使用IO流四点要素

<caption> 区别源与目的 </caption>
           源(System.in) InputStream(字节输入流) Reader(字符输入流)(纯文本)

        目的

(System.out)

OutputStream(字节输出流) Writer(字符输出流)(纯文本)

(1)明确要操作的数据是数据源还是数据目的(也就是要读还是要写)
(2)明确要操作的设备上的数据是字节还是文本
(3)明确数据所在的具体设备
(4)明确是否需要额外功能(比如是否需要转换流、高效流等)

额外的功能:

1.需要转换—— 转换流 InputStreamReader 、OutputStreamWriter

2.需要高效—— 缓冲流Bufferedxxx

3.多个源—— 序列流 SequenceInputStream

4.对象序列化—— ObjectInputStream、ObjectOutputStream

5.保证数据的输出形式—— 打印流PrintStream 、Printwriter

6.操作基本数据,保证字节原样性——DataOutputStream、DataInputStream
 

二.File类(操作文件,只对文件本身操作,不对内容操作)

(1)三种常用的构造方法:

1、 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
2、 public File(String parent, String child) :从父路径名字符串路径名字符串创建新的 File实例。
3、 public File(File parent, String child) :从父抽象路径名子路径名字符串创建新的 File实例。


(2)注意:

  1. 一个File对象代表硬盘中实际存在的一个文件或者目录。
  2. File类构造方法不会给你检验这个文件或文件夹是否真实存在,因此无论该路径下是否存在文件或者目录,都不影响File对象的创建。

(3)File类常用的方法:获取功能、获取绝对路径和相对路径、判断功能、创建删除功能的方法

1、public String getAbsolutePath() :返回此File的绝对路径名字符串

2、public String getPath() :将此File转换为路径名字符串

3、public String getName() :返回由此File表示的文件或目录的名称

4、public long length() :返回由此File表示的文件的长度


(4)File判断功能的方法:

1、 public boolean exists() :此File表示的文件或目录是否实际存在
2、 public boolean isDirectory() :此File表示的是否为目录
3、public boolean isFile() :此File表示的是否为文件

(5)File类创建和删除功能的方法

1.public boolean createNewFile() :文件不存在,创建一个新的空文件并返回true,文件存在,不创建文件并返回false。
2.public boolean delete() :删除由此File表示的文件或目录。
3.public boolean mkdir() :创建由此File表示的目录。
4.public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。


(6)File类目录遍历

1.public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。

2.public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

注意:listFiles在获取指定目录下的文件或者文件夹时必须满足下面两个条件

1,指定的目录必须存在

2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException异常

三.IO分类(in输入也叫做读取数据,out输出也叫做作写出数据

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

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

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

  • 字节流 :以字节为单位,读写数据的流。
  • 字符流 :以字符为单位,读写数据的流。
  • 这四个类的子类名称基本都是以其父类名作为子类名的后缀

四.字节输出流(OutputStream)

java.io.OutputStream抽象类是表示字节输出流的所有类的超类(父类),将指定的字节信息写出到目的地。

(1)基本功能方法:(由父类OutputStream定义提供,但是子类都能使用,例如FileOutputStream类)

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


(2)FileOutputStream类构造方法

1、 public FileOutputStream(File file):根据File对象为参数创建对象。
2、 public FileOutputStream(
String name): 根据名称字符串为参数创建对象。

(3)注意:
创建
输出流对象的时候,系统会自动去对应位置创建对应文件,而创建输入流对象的时候,文件不存在则会报FileNotFoundException异常,也就是系统找不到指定的文件异常。

(4)FileOutputStream实现数据追加续写、换行

1、public FileOutputStream(File file, boolean append)

2、public FileOutputStream(String name, boolean append)

这两个构造方法,第二个参数中都需要传入一个boolean类型的值,true 表示追加数据,false 表示不追加也就是清空原有数据。这样创建的输出流对象,就可以指定是否追加续写了,至于Windows换行则是 \n\r。
 

五.字节输入流

(1)基本功能方法:

1、 public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
2、public abstract int
read(): 从输入流读取数据的下一个字节。

3、 public int read(byte[] b): 该方法返回的int值代表的是读取了多少个字节,读到几个返回几个,读取不到返回-1


(2)FileInputStream类的构造方法

1、 FileInputStream(File file): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
2、 FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名name命名。
 

六.字符流

字符流:因为数据编码的不同,因而有了对字符进行高效操作的流对象,字符流本质其实就是基于字节流读取时,去查了指定的码表,而字节流直接读取数据会有乱码的问题(读中文会乱码)

SO:字符流 = 字节流 + 编码表

七.字符输入流(Reader)

(1)常用方法:

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

FileReader类:(取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。)

(2)FileReader类构造方法:

1、FileReader(File file): 创建一个新的 FileReader ,给定要读取的File对象
2、 FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的字符串名称

八、字符输出流(Writer)

Writer象类是字符输出流的所有类的超类(父类),将指定的字符信息写出到目的地。它同样定义了字符输出流的基本共性功能方法。

(1)常用方法:

1、void write(int c) 写入单个字符。
2、void write(char[] cbuf)写入字符数组。
3、 abstract void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
4、 void write(String str)写入字符串。
5、void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
6、void flush()刷新该流的缓冲。
7、void close() 关闭此流,但要先刷新它。

FileWriter类:是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

(2)FileWriter类构造方法:

1、 FileWriter(File file) 创建一个新的 FileWriter,给定要读取的File对象。
2、FileWriter(String fileName) 创建一个新的 FileWriter,给定要读取的文件的名称。

(3)【注意】:

关闭资源时,与FileOutputStream不同。 如果不关闭,数据只是保存到缓冲区,并未保存到文件。

(4)关闭close和刷新flush


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

flush :刷新缓冲区,流对象可以继续使用。
close:先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

flush()这个函数是清空的意思,用于清空缓冲区的数据流,进行流的操作时,数据先被读到内存中,然后再用数据写到文件中,那么当你数据读完时,我们如果这时调用close()方法关闭读写流,这时就可能造成数据丢失,为什么呢?因为,读入数据完成时不代表写入数据完成,一部分数据可能会留在缓存区中,这个时候flush()方法就格外重要了。

以上学习资料来自于java大佬,本人作此文章在于总结强化巩固基础知识,方便日后复习,同时分享一下。