一、认识Java的流
(1)读文件是指把文件中的数据读取到内存中。
(2)写文件是把内存中的数据写到文件中。
(3)Java程序通过 流来读写文件。
(4)流是指一连串流程的字符,是以先进先出的方式发送和接收数据的 通道。
(5)流分为输入流和输出流,输入/输出流是相对于计算机内存来说的,如果数据输入到内存,则为输入流,如果从内存中输出则为输出流。
(6)Java的输出流主要有OutputStream类和Writer类作为基类,输入流主要由InputStream类和Reader类作为基类。
(7)在java.io包中,封装了许多输入/输出流的API,在程序中,这些输入/输出流类的对象称为 流对象。
(8)可以通过流对象将内存中的数据以流的方式写入文件,也可以通过流对象将文件中的数据以流的方式读取到内存。
(9)构造流对象时往往会和数据源(如文件)联系起来。数据源分为源数据源和目标数据源。输入流关联的是源数据源;输出流关联的是目标数据源。
(10)输入/输出流又分为字节流和字符流两种形式
字节流是8位通用字节流,其基本单位是字节。字节流的基类是InputStream类和OutputStream类,它们是 抽象类。
字符流是16位Unicode字符流,基本单位是Unicode字符。字符流最适合用来处理字符串和文本,因为它们支持国际上大多数的字符集和语言。字符流的基类是Reader类和Writer类,它们是 抽象类。
(11)一个被访问的流基本特征都是通过实现InputStream类、OutputStream类、Reader类和Writer类这4个抽象类的方法建立的。
1)InputStream类常用方法如下:
InputStream类的常用子类有 FileInputStream,用于从文件中读取数据。
2)OutputStream类常用方法如下:
OutputStream类的常用子类有 FileOutputStream,用于向文件写数据。
3)Reader类常用方法如下:
Reader类的常用子类有 BufferedReader,接受Reader对象作为参数,并对其添加字符缓冲器。
4)Write类常用方法如下:
Write类的常用子类有 BufferedWrite,用于将数据缓冲到字符输出流。
(12)在操作上字节流和字符流还有一个区别,字符流在操作时使用了缓冲区(内部存储器),而字节流在操作时直接操作文件,不会使用缓冲区。
(13)流中的方法在出现错误时都会抛出 IOException异常。
二、使用字节流读写文本文件
1、使用字节流类FileInputStream读文本文件
FileInputStream称为文件输入流,它是字节输入流InputStream抽象类的一个子类,它的作用是将文件中的数据输入到内部存储器(简称内存)中,可以利用它来读取文本文件中的数据,具体实现步骤如下:
(1)导入相关的类
import java.io.IOException;
import java.io.InputStream;
import java.io.FileInputStream;
(2)构造一个文件输入流对象
InputStream fileObject = new FileInputStream("text.txt");//此时的文件输入流对象fileObject就和源数据源(text.txt)关联起来。
(3)利用文件输入流类的方法读取文本文件中的数据
fileObject.available();//可读取的字节
fileObject.read();//读取文件的数据
(4)关闭文件输入流对象
fileObject.close();
2、使用字节流类FileOutputStream写文本文件
FileOutputStream称为文件输出流,它是字节输出流OutputStream抽象类的子类,它的作用是把内存中的数据输出到文件中,可以利用它把内存中的数据写入到文本文件中,具体实现步骤如下:
(1)导入相关的类
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileOutputStream;
(2)构造一个文件输出流对象
OutputStream fos = new FileOutnputStream("text.txt");//此时的文件输出流对象fos就和目标数据源(text.txt)关联起来。
(3)利用文件输出流类的方法把数据写入到文本文件中。
String str = "好好学习Java";
byte[] words = str.getBytes();
fos.write(words,0,words.length);//利用write方法将数据写入到文件中去
(4)关闭文件输入流对象
fos.close();
三、使用字符流读写文本文件
1、使用字符流类BufferedReader和FileReader读文本文件
BufferedReader和FileReader两个类都是Reader抽象类的子类,它们可以通过字符流的方式读取文件,并使用缓冲区,提高了读文本文件的效率。读取文本文件的具体步骤如下:
(1)导入相关的类
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
(2)构造一个BufferedReader对象
FileReader fr = new FileReader("mytest.txt");
BufferedReader br = new BufferedReader(fr);
(3)利用BufferedReader类的方法读取文本文件中的数据
br.readLine();//读取一行数据,返回字符串
(4)关闭相关的流对象
br.close();//后开的流先关
fr.close();//先开的流后关
2、使用字符流类BufferedWrite和FileWrite写文本文件
BufferedWrite和FileWrite都是字符输出流Write抽象类的子类,它们可以通过字符流的方式并通过缓冲区把数据写入文本文件,提高了写文本文件的效率。把数据写入文本文件的具体操作步骤如下:
(1)导入相关的类
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
(2)构造一个BufferedWriter对象
FileWriter fw = new FileWriter("mytest.txt");
BufferedWriter bw = new BufferedWriter(fw);
(3)利用BufferedWriter类的方法读取文本文件中的数据
br.write("hello");//读取一行数据,返回字符串
(4)相关流对象的清空和关闭
bw.flush();
bw.close();//后开的流先关
fw.close();//先开的流后关