Java第17章 - I/O流(一)
目录
File类
认识Java的流
使用字节流读写文本文件
使用字符流读写文本文件
读写二进制文件
File类
(1)在Java程序中通过使用java.io包提供的一些接口和类,对计算机中的文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作。
(2)File对象既可以表示文件,也可以表示目录,在程序中一个File对象可以代表一个文件或目录。
(3)利用File类可以来对文件或目录进行基本操作。它可以查出与文件相关的信息,如名称、最后修改日期、文件大小等。
(4)File类的常用构造方法如下所示:
(5)File类的常用方法如下所示:
认识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个抽象类的方法建立的。
(12)InputStream类常用方法如下:
InputStream类的常用子类有FileInputStream,用于从文件中读取数据。
(13)OutputStream类常用方法如下:
OutputStream类的常用子类有FileOutputStream,用于向文件写数据。
(14)Reader类常用方法如下:
Reader类的常用子类有BufferedReader,接受Reader对象作为参数,并对其添加字符缓冲器。
(15)Write类常用方法如下:
Write类的常用子类有BufferedWrite,用于将数据缓冲到字符输出流。
(16)在操作上字节流和字符流还有一个区别,字符流在操作时使用了缓冲区(内部存储器),而字节流在操作时直接操作文件,不会使用缓冲区。
(17)流中的方法在出现错误时都会抛出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();//先开的流后关
读写二进制文件
读写二进制文件常用的类有DataInputStream和DataOutputStream。
1、 使用字节流读二进制文件
利用DataInputStream类读二进制文件,其实与利用FileInputStream类读文本文件及其相似,也要用到FileInputStream类关联二进制文件。具体操作步骤如下:
1)导入相关的类
import java.io.FileInputStream;
import java.io.DataInputStream;
import java.io.IOException;
2)构造一个数据输入流对象
FileInputStream fis = new FileInputStream("HelloWorld.class");
DataInputStream dis = new DataInputStream(fis);
3)利用数据输入流类的方法读取二进制文件中的数据
dis.readInt();//读取出来的是整数
dis.readByte();//读取出来的数据是Byte
4)关闭数据输入流
dis.close();//后开的流先关
fis.close();//先开的流后关
2、 使用字节流写二进制文件
利用DataOutputStream类写二进制文件,其实与利用FileOutputStream类写文本文件及其相似,也要用到FileOutputStream类关联二进制文件。具体操作步骤如下:
1)导入相关的类
import java.io.FileOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
2)构造一个数据输出流对象
FileOutputStream fos = new FileOutputStream("temp.class");
DataOutputStream dos = new DataOutputStream(fos);
3)利用数据输出流类的方法把数据写入二进制文件
dos.write(1); //把数据写入二进制文件
4)关闭数据输入流
dos.close();//后开的流先关
fos.close();//先开的流后关