8.1 操作文件或目录的属性
8.1.1 使用File类操作文件或目录属性
首先学习如何使用File类操作文件或目录。
File对象即可也表示文件,也可表示目录。在程序中,一个File对象可以代表一个文件或目录。利用它可用来对文件或目录进行基本操作。它可以查出与文件相关的信息,如名称,最后修改日期、文件大小等。
创建一个File对象的语法格式如下:
File file = new File(String pathName); |
其中,pathName是指文件的路径。
File对象是Java.io包中引用磁盘文件的唯一对象。File类仅仅是描述File对象的属性,而并未说明数据是如何存储的。File类提供了一些重要的方法来管理文件或目录的属性,常用的方法如表:
File类的常用方法
方法名称 |
说明 |
boolean exists() |
判断文件或目录是否存在 |
boolean isFile() |
判断是否是文件 |
boolean isDirectory() |
判断是否是目录 |
String getPath() |
返回此对象表示的文件的相对路径名 |
String getAbsolutePath() |
返回此对象表示的文件的绝对路径名 |
String getName() |
返回此对象表示的文件或目录的名称 |
boolean delete() |
删除此对象指定的文件或目录 |
boolean createNewFile() |
创建名称的空文件,不创建文件夹 |
long length() |
返回文件的长度,单位为字节,若文件不存在,则返回OL |
8.2 Java流
流,是指一连串的流动字符,是以先进先出的方式发送和接受数据的通道。
一个流是一个输入设备或输出设备的抽象表示。可以写数据到流中,也可以从流中毒数据。可以把流想象为程序中流进或流出的一个字节序列。
流具有明确的方向性,当向一个流写入数据时,这个流被称为输出流,输出流可以将信息送往程序的外部,如硬盘上的文件,打印机上的文件等。
(1) 按照流的流向进行划分,可以分为输入流和输出流,如图:
↑→→→输出流→→OutputStram和Writer作为基类 按流向区分→↑ ↓→→→输入流→→InputStram和Reader作为基类 |
输入流:只能从中读取数据,而不能向其中写入数据。
输出流:只能向其中写入数据,而不能从中读取数据。
(2) 字节流操作的最小数据单元为8为的字节,而字符流操作的最小数据单元是16位的字符。字节流和字符流的区分非常简单,字节流建议用二进制数据,而字符流用于文本,他们的用法几乎完全一样。
8.3 读写文本文件
8.3.1 使用字节流读写文本文件
(1)字节输入流InputStream类
字节输入流InputStream的作用就是将文件中的数据输入到内部存储器(简称内存)中,他提供了一系列和读取数据有关的方法,常用的方法如表:
方法名称 |
说明 |
int read() |
读取一个字节数据,从输入流中读取一个八位的字节,把它转换为0~255的整数返回 |
int read(byte[] b) |
将数据读取到字节数组中,将数据读取到字数组中,返回实际读取的字节数 |
int read(byte[]b,int off,int le) |
从输入流中读取最多len长度的字节,保存到字节数组b中,保存的位置从off开始。保存位置0开始。 |
void close() |
关闭输入流 |
int available() |
返回输入流读取的估计字节数 |
无参的read()方法从输入流读取一个八位的字节,把它转换为0~255的整数返回。
有参的两个read()方法从输入流批量读取若干个字节。在从文件或键盘读数据时,采用read(byte[]b)或read(byte[]b,int off,int len)方法可以减少进行物理读文件或键盘的次数,提高输入/输出操作效率。
(2)字节输入流FileInputStream类
在实际应用中,我们通常用InputStream的子类FileInputStream类来实现文本文件内容的读取,常用的构造方法有一下两个。
1) FileInputStream(File file)。其中file指定文件数据源。使用此构造方法创建文件输入流对象。
2) FileInputStream(String name)。其中name指定文件数据源,包含路径信息。使用此构造方法创建文件输入流对象。
(3) 使用FileInputStream读取文件
使用FileInputStream读取文本文件的具体步骤如下。
1) 引入相关类。
2) 创建一个文件输入流对象。
3) 利用文件输入流的方法读取文本文件的数据。
4) 关闭文件输入流对象。
8.3.2 使用字节流写文本文件
(1)字节输出流OutputStream类
字节输出流OutputStream类的作用是把内存中的数据输出到文件中,他提供了一系列象文件中写数据的有关方法,常用的方法如表。
OutputStream类的常用方法
方法名称 |
说明 |
Void write(int c) |
写入一个字节数据 |
Void write(byte[]buf) |
写入数组buf的所有字节 |
Void write(byte[]b,int off,int len) |
将字节数组中从off位置开始,长度为len的字节数据输出到输出流中 |
Void close() |
关闭输出流 |
(2)字节输出流FileOutputStream类
在实际应用中,我们通常使用OutputStream的子类FileOutputStream类来实现向文本文件写入数据,常用的构造方法有一下三个。
1) FileOutputStream(File file)。其中name指定文件目标数据源,包含路径信息。使用此构造方法创建文件输出流对象。
2) FileOutputStream(String name)。其中name指定文件目标数据源,包含路径信息。使用此构造方法创建文件输出流对象。
3) FileOutputStream(String name,boolean append)。其中name指定文件目标数据源,包含路径信息。append表示是否在文件末尾添加数据。若设置为true,则在末尾添加数据。使用此构造方法创建文件输出流对象。
(3)使用FileOutputStream写文本文件
使用FileOutputStream向文本文件中写入数据的具体使用步骤如下。
1) 引入相关的类。
2) 构造一个文件输出流对象。
3) 利用文件输出流的方法把数据写入文本文件中。
4) 关闭文件输出流。
8.3.4 使用字符流读取文本文件
1.字符输入流Reader类
Reader类是读取字符流的抽象类,他提供常用的方法,如表:
方法名称 |
说明 |
int read() |
从输入流中读取单个字符 |
int read(byte[] c) |
从输入流中读取c.length长度的字符,保存字符数组c中,返回实际读取的字符数 |
read(char[] c,int off,int len) |
从输入流中读取最多的len长度的字符,保存字符数组c中,返回实际读取的字符长度 |
void close() |
关闭流 |
2.字符输入流FileReadaer类
FileReader类是Reader的子类。
3.使用FileReader读取文件
使用字符流类FileReader读取文本文件的具体步骤如下。
1) 引入相关类。
2) 创建一个FileReader对象
3) 利用FileReader类的方法读取文本文件的数据
4) 关闭相关的流对象
4.字符输入流BufferedReader类
BufferedReader类是Reader类的子类,他与FileReader类的区别在于,BufferedReaderler类带有缓冲区,它可以先把一批数据读到缓冲区,接下来的读操作都是缓冲区获取数据,避免每次都从数据源读取数据进行字符编码转换,从而提高读取操作效率。BufferedReader类常用的构造方法格式。
5.使用FileReader和BufferedReadre读取文本文件
使用字符流类BufferedReader和FileReader读取文本文件的具体步骤。
1) 引入相关的类
2) 创建一个BufferedReader对象
3) 利用BufferedReader类的方法读取文本文件的数据
4) 关闭相关的流。
8.3.5 使用字符流写文本文件
1.字符输出流Writer类
Wirite类是向文件写入数据的字符流,它提供了常用的方法,如表:
Writer类常用方法
方法名称 |
说明 |
write(String str) |
将str字符串里的包含字符输出到指定的输出流中 |
write(String str,int off,int len) |
将str字符里从off位置开始长度为len的字符输出到输出流中 |
void close() |
关闭输出流 |
void flush() |
刷新输出流 |
2.字符输出流FileWrite类
FileWriter类是Reader饿子类,常用的构造方法格式如下:
FileWriter (String fileName)
3.使用FileWrite写文本文件
使用字符流类FileWriter将数据源写入到文本文件的具体操作步骤如下:
1) 引入相关的类
2) 创建一个FileWriter对象
3) 利用FileWriter类的方法写文本文件
4) 相关流对象的清空和关闭
4.字符输出流BufferedWrite类
BuffereadWriter是Writer类的子类。BufferedWriter与BufferedReader的流方向正好相反,BufferedWriter是把一批数据写到缓冲区,当缓冲区满的时候,再把缓冲区的数据写到字符输出流中。这可以避免每次都执行物理写操作,从而提高输入/输出操作的效率。
5.使用BufferedWriter和FileWriter写文本文件
1) 引入相关的类
2) 构造一个BufferedWriter对象
3) 利用BufferedWriter类的方法写文本文件
4) 相关流对下岗的清空和关闭
8.4 二级制文件的读写
8.4.1 使用字节流类DataInputStream读二进制文件
DataInputStream类是FileInputStream的子类,他是FileInputStream类的扩展,利用DataInputStream类读取二进制文件的实现步骤其实与FileInputStream类读取文本文件的步骤极其相似,而是还要用到FileInputStream类。具体步骤如下:
1) 引入相关的类
2) 构造一个数据输入流对象
3) 利用数据输入流类的方法读取二进制文件的数据
4) 关闭数据输入流
8.4.2 使用字节流类DataOutputStream写二进制文件
DataOutputStream类是FileOutputStream的子类,他是FileOutputStream类的扩展。利用DataOutputStream类写二进制文件的实现步骤其实与FileOutputStream类写文本文件的步骤极其相似。而且还要用到FileOutputStream类。具体步骤如下:
1) 引入相关的类
2) 构造一个数据输出流对象
3) 利用数据输出流类的方法写二进制文件的数据
4) 关闭数据输出流
本章总结
1.File类用于访问文件或目录的属性。
2.流是指一连串流动的字符,是以先进先出额方式发送信息的通道。程序和数据源之间是通过流联系起来的。
3.流可以分为输入流和输出流,也可以分为字节流和字符流。
4.FileInputStream和FileOutputStream以字节流的方法读写文本文件。
5.BufferedReader和BufferedWriter以字符流的方法是读写文本文件,而且效率更高。
6.DataInputStream和DataOutputStream可用读写二级制文件。