一、操作文件或目录的属性
程序的主要任务就是操作数据,通过允许程序读取文件的内容或向文件写入数据,可以使程序应用更为广泛。一般情况下,当数据位于内存中并且属于特定的类型时,程序才能够操作它们。大多数数据并不是都在内存中,而是以文件的形式存放在外部磁盘中。文件是指相关记录或放在一起的数据集合。
1.使用File类操作文件或目录属性
在Java中如何保存数据呢?java.io包提供一些接口和类,对文件进行基本的操作,包括对文件和目录属性的操作,对文件读写额操作等。
File对象既可以表示文件,也可以表示目录。在程序中,一个File对象可以代表一个文件或目录。利用它可用来对文件或目录进行基本操作。
创建一个File对象的语法格式如下。
File file = new File(String pathName);
//pathName表示所指向的文件的路径名
File对象是java.io包中引用磁盘文件的唯一对象。File类仅仅是描述File对象的属性,而并未说明数据是如何存储的。File类提供了一些重要的方法来管理文件或目录的属性,常用方法如表。
方法名称 | 说明 |
---|---|
boolean exists() | 判断文件或目录是否存在 |
boolean isFile() | 判断是否是文件 |
boolean isDirectory() | 判断是否是目录 |
String getPath() | 返回此对象表示的文件的相对路径名 |
String getAbsolutePath() | 返回此对象表示的文件的绝对路径名 |
String getName() | 返回此对象表示的文件或目录的名称 |
boolean delete() | 删除此对象指定的文件或目录 |
boolean createNewFile() | 创建名称的空文件,不创建文件夹 |
long length() | 返回文件的长度,单位为字节,若文件不存在,则返回OL |
二、Java的流
流,是指一连串流动的字符,是以先进先出的方式发送和接收数据的通道。
一个流是一个输入设备或输出设备的抽象表示。可以写数据到流中,也可以从流中读数据。可以把流想象为程序中流进或流出的一个字节序列。
按照不同的分类方式,可以将流分为不同的类型。
a. 按照流的流向进行划分,可以分为输入流和输出流。
输入流:只能从中读取数据,而不能向其中写入数据。
输出流:只能向其中写入数据,而不能从中读取数据。
Java的输出流主要由OutputStream和Writer作为基类,而输入流则主要由InputStream和Reader作为基类。
b. 按照所操作的数据单元的不同,流又可划分成字节流和字符流。
字节流操作的最小数据单元为8位的字节,而字符流操作的最小数据单元是16位的字符。
字节流和字符流的区分非常简单,字节流建议用于二进制数据,而字符流用于文本,用法几乎是完全一样的。
这四个基类都是抽象类,我们知道,不能创建抽象类的实例,因为这四个抽象类只用作实现更具体的输入或输出功能子类的基类。它们都定义了一组方法,来定义它们代表的流的操作的一个基本集,一个被访问的流基本特征都是通过实现这四个抽象类额方法来建立的。
三、读写文本文件
1.字节输入流InputStream类读取
字节输入流InputStream的作用就是将文件中的数据输入到内部存储器中,它提供一系列的方法,如下表。
方法名称 | 说明 |
---|---|
int read() | 读取一个字节数据 |
int read(byte[] b) | 将数据读取到字节数组中 |
int read(byte[] b,int off,int len) | 从输入流读取最多len长度的字节,保存到字节数组b中,保存的位置从off开始 |
void close() | 关闭输入流 |
int available() | 返回输入流读取的估计字节数 |
1.1字节输入流FileInputStream类
我们通常使用InputStream的子类FileInputStream类来实现文本文件内容的读取,常用构造方法有以下两个。
a. FileInputStream(File file)。其中,file指定文件数据源。
File file =new File("D:\\teat.txt");
InputStream fis=new FileInputStream(file);
b. FileInputStream(String name)。其中,name指定文件数据源,包含路径信息。
InputStream fis=new FileInputStream("D:\\teat.txt");
1.2使用FileInputStream读取文件
使用FileInputStream读取文本文件的具体步骤如下。
a.引入相关的类。
import java.io.*;
b. 创建一个文件输入流对象。
InputStream fis=new FileInputStream("D:\\teat.txt");
c. 利用文件输入流的方法读取文本文件的数据。
fis.available();//可读取的字节数
fis.read();//读取文件的数据
d.关闭文件输入流对象。
fis.close();
2.字节输出流OutputStream类写入
字节输出流OutputStream类的作用是把内存中的数据输出到文件中,它提供一系列的方法,如下表。
方法名称 | 说明 |
---|---|
void write(int c) | 写入一个字节数据 |
void write(byte[] b) | 写入数组b的所有字节 |
void write(byte[] b,int off,int len) | 将字节数组中从off开始,长度为len的字节数据输出到输出流中 |
void close() | 关闭输出流 |
2.1字节输出流FileOutputStream类
我们通常使用OutputStream的子类FileOutputStream类来实现文本文件内容的写入,常用构造方法有以下三个。
a. FileOutputStream(File file)。其中,file指定文件目标数据源。
File file =new File("D:\\teat.txt");
FileOutputStream fis=new FileOutputStream(file);
b. FileOutputStream(String name)。其中,name指定文件目标数据源,包含路径信息。
FileOutputStream fis=new FileOutputStream("D:\\teat.txt");
c. FileOutputStream(String name,boolean append)。其中,name指定文件目标数据源,包含路径信息。append表示是否在文件末尾添加数据,若设置为true,则在文件末尾添加数据。
FileOutputStream fis=new FileOutputStream("D:\\teat.txt",true);
2.2使用FileOutputStream写入文件
使用FileOutputStream写入文本文件的具体步骤如下。
a.引入相关的类。
import java.io.*;
b. 创建一个文件输出流对象。
FileOutputStream fis=new FileOutputStream("D:\\teat.txt");
c. 利用文件输出流的方法写入文本文件的数据。
String str="好好学习";
byte[] words=str.getByte();
fis.write(words,0,words.length);
d.关闭文件输出流对象。
fis.close();
3.字符输入流Reader类读取
Reader类是读取字符流的抽象类,他提供的常用方法。
方法名称 | 说明 |
---|---|
int read() | 读取单个字符 |
int read(byte[] b) | 从输入流读取最多b.length长度的字符,保存到字符数组b中,返回实际读取的字符数 |
int read(byte[] b,int off,int len) | 从输入流读取最多len长度的字节,保存到字节数组b中,保存的位置从off开始,返回实际读取的字符长度 |
void close() | 关闭流 |
3.1字符输入流FileReader类
我们通常使用Reader的子类FileReader类来实现文本文件内容的读取,常用构造方法以下。
FileReader(String name)。其中,name指定文件数据源,包含路径信息。
Reader fis=new FileReader("D:\\teat.txt");
3.2使用FileReader读取文件
使用FileReader读取文本文件的具体步骤如下。
a.引入相关的类。
import java.io.*;
b. 创建一个FileReader对象。
Reader fr=new FileReader("D:\\teat.txt");
c. 利用FileReader类的方法读取文本文件的数据。
int read();//读取单个字符
d.关闭文件输入流对象。
fr.close();
3.3字符输入流BuffrerdReader类
BuffrerdReader类是Reader类的子类,它与FileReader类的区别在于,BuffrerdReader类带有缓冲区,它可以先把一批数据读到缓冲区,接下来的读操作都是缓冲区内获取数据,避免每次都从数据源读取数据进行字符编码转换,从而提高读取操作的效率。BuffrerdReader类常用构造方法格式如下。
BuffrerdReader(Reader in)。创建对象如下。
Reader fr =new FileReader("D:\\teat.txt");
BuffrerdReader br=new BuffrerdReader(fr);
//br就是创建的一个使用默认大小输入缓冲区的缓冲字符输入流
3.4使用FileReader和BuffrerdReader读取文件
使用FileReader和BuffrerdReader读取文本文件的具体步骤如下。
a.引入相关的类。
import java.io.*;
b. 创建一个BuffrerdReader对象。
Reader fr =new FileReader("D:\\teat.txt");
BuffrerdReader br=new BuffrerdReader(fr);
c. 利用BuffrerdReader类的方法读取文本文件的数据。
br.readLine();//读取一行数据,返回字符串
d.关闭文件输入流对象。
br.close();
fr.close();
4.字符输出流Writer类写入
Writer类是向文件写入数据的字符流,它提供了常用的方法。
方法名称 | 说明 |
---|---|
Writer(String str) | 将str字符串里包含的字符输出到指定的输出流中 |
Writer(String str,int off,int len) | 将str字符串里从off位置开始长度为len的字符输出到输出流中 |
void close() | 关闭输出流 |
void flush() | 刷新输出流 |
4.1字符输出流FileWriter类
FileWriter类是Reader的子类,常用构造方法格式如下。
FileWriter(String name)。其中,name表示与系统有关的文件名,使用此构造方法创建字符输出对象。
Writer fr=new FileWriter("D:\\text.txt");
4.2使用FileWriter写入文本文件
使用FileWriter写入文本文件的具体步骤如下。
a.引入相关的类。
import java.io.*;
b. 创建一个文件FileWriter对象。
Writer fw=new FileWriter("D:\\teat.txt");
c. 利用FileWriter的方法写入文本文件的数据。
bw.write("hello");
d.关闭文件输出流对象。
bw.flush();
fw.close();
4.3 字符输出流BufferedWriter类
BufferedWriter是Writer的子类。BufferedWriter与BufferedReader的流向正好相反,BufferedWriter是把一批数据写到缓冲区,当缓冲区满的时候,再把缓冲区的数据写到字符输出流中。这可以避免每次都执行物理写操作,从而提高输入/输出操作的效率。构造方法如下。
BufferedWriter(Writer out)。构造方法创建对象如下。
Writer fw=new FileWriter("D:\\teat.txt");
BufferedWriter bw=new BufferedWriter(fw);
//bw就是创建的使用默认大小输出缓=缓冲字符输出流
4.4使用BufferedWriter和FileWriter写入文本文件
使用BufferedWriter和FileWriter写入文本文件的具体步骤如下。
a.引入相关的类。
import java.io.*;
b. 创建一个文件BufferedWriter对象。
FileWriter fw=new FileWriter("D:\\teat.txt");
BufferedWriter bw=new BufferedWriter(fw);
c. 利用BufferedWriter的方法写入文本文件的数据。
bw.write("hello");
d.关闭文件输出流对象。
bw.flush();
fw.close();
四、二进制文件的读写
常见的文件读写中还有一种二进制文件的读写。读写二进制文件常用的类有DataInputStream和DataOutputStream。
1.使用字节流类DataInputStream读二进制文件
DataInputStream类是FileInputStream的子类,它是FileInputStream类的扩展。利用DataInputStream类读取二进制文件的实现步骤其实与FileInputStream类读取的步骤相似,而且还要用到FileInputStream类。
a.引入相关的类。
import java.io.*;
b. 创建一个数据输入流对象。
FileInputStream fis=new FileInputStream("D:\\teat.txt");
DataInputStream dis=new DataInputStream(fis);
c. 利用数据输入流的方法读取二进制文件的数据。
dis.read();
d.关闭文件输出流对象。
dis.close();
2.使用字节流类DataOutputStream写二进制文件
DataOutputStream类是FileOutputStream的子类,它是FileOutputStream类的扩展。利用DataOutputStream类写二进制文件的实现步骤其实与FileOutputStream类写入的步骤相似,而且还要用到FileOutputStream类。
a.引入相关的类。
import java.io.*;
b. 创建一个数据输出流对象。
FileOutputStream fos=new FileOutputStream("D:\\teat.txt");
DataOutputStream dos=new DataOutputStream(fos);
c. 利用数据输出流的方法写二进制文件的数据。
dos.write(1);//将指定字节数据写入二进制文件
d.关闭文件输出流对象。
dos.close();