本章节介绍Java中的文件操作。文件操作主要指的是使用Java程序进行输入/输出(I/O)操作,Java中所有的操作类都位于java.io包中,在使用时需要导入此包。在整个Java.io包中最重要的就是五个类和一个接口。其中,五个类指File, OutputStream, InputStream, Writer, Reader,一个接口指的是Serializable,掌握了这些就掌握了I/O操作的核心。
File类是java.io包下代表操作与平台无关的文件和目录的类,也就是说,如果需要在程序中操作文件或目录,就可以通过File类实现对文件或目录的新建,删除,重命名等操作。
File类的构造方法定义如下:
public File(String pathName)
其中,pathName指文件路径。因此,在创建File对象的时候必须设置文件路径。列如:操作C盘下的test.txt文件,创建File对象的语句如下。
File file=new File("C:/test.txt");
提示:
在Windows操作系统中,文件路径名中的路径分隔符可以使用正斜杠“/”,如"C:/test.txt",也可以使用反斜杠“\”,但必须写成“\\",其中第一个"\"表示转义符,如"C:\\test.txt".
pathName可以是相对路径也可以是绝对路径。绝对路径是以根目录开头的完整路径。相对路径一般是以项目文件夹为参照物。项目文件下一般有3个文件夹(.idea, out, src),和1个IML文件。
File类的常用方法
方法 | 描述 |
boolean createNewFile() | 创建新文件 |
boolean delete() | 删除文件 |
boolean exists() | 判断文件是否存在 |
boolean isFile() | 判断是否是文件 |
boolean isDirectory() | 判断是否是目录 |
long length() | 返回文件长度,单位为字节;若文件不存在,则返回0L |
String getPath() | 返回文件名对应的路径 |
String getAbsolutePath() | 返回此对象表示的文件的绝对路径 |
提示:如需完成对File类的更多操作,则可随时查阅API帮助文档。对文件操作时有些方法必须使用异常处理。
File类无法实现对文件内容的操作,也就是无法实现对文件的读写。而Java中的I/O流能够实现数据的输入和输出,是实现文件读写的基础。
提示:如何解释I/O呢?
I即input,指读取操作;O即output,指写入操作。
流,是指一连串流动的字符,是以先进先出的方式发送和接收数据的通道。既然是流,必然是有源端和目的端,它门可以是Internet上的某个统一资源定位符。所谓I/O流就是实现数据输入和输出的流,在I/O流基础上,可以实现对文件的读写操作。Java把所有流类型都封装到java.io包中,用以实现I/O操作。
Java的读取主要以InputStream和Reader作为基类,而写入则主要以OutputStream和Writer作为基类。它门都是一些抽象类,无法直接实例化对象。
按处理单元划分:字节流和字符流
Java中的流可以分为字节流和字符流,他们的区别在于操作的数据单元不同。
字节流:以8位字节为操作数据单元的流,可以于操作二进制数据(如操作图片文件)。
字符流:以16位的字符为操作数据单元的流,可用于操作文本数据。
通俗地理解,可以把I/O流看做一个水管,这个水管中依次排列着许多水滴,每滴水滴就是一个处理单元,即一个字节或字符。在字节流中每滴水滴是一个字节,在字符流中每滴水滴是一个字符。
java.io包中的流按存储单元分类主要有字节流和字符流两大类,两类都具有输入/输出操作。它门各自的基类如图所示,这些基类均为抽象类。
该类为抽象类,如果需要操作文件,则使用其子类FileOutputStream实例化。
OutputStream类中的主要操作方法
方法 | 描述 |
void close() | 关闭输出流 |
void flush() | 刷新缓冲区 |
void write(byte[] b) | 将每个byte数组写入数据流 |
void write(byte[] b,int off,int len) | 将每个指定范围的byte数组写入数据流 |
void write(int b) | 将一个字节数据写入数据流 |
在开发中,通常使用OutputStream类的FileOutputStream子类向文本文件写入数据。
FileOutputStream类常用的构造方法
方法 | 描述 |
FileOutputStream(File file) | 用于创建向指定File对象写数据的文件输出流。file:指定目标文件的对象 |
FileOutputStream(String name) | 用于创建向指定路径的文件写数据的文件输出流。name:指定目标文件的路径字符串 |
FileOutputStream(String name,boolean append) | 创建一个向指定路径的文件写入数据的文件输出流。name:指定目标文件的路径字符串。append:表示是否在文件末尾追加数据,若为true则表示可以在文件末尾追加数据 |
InputStream类定义的主要方法
方法 | 描述 |
int read() | |
int read(byte[] b) | |
int read | |
File类用来访问文件和目录。
流,是指一连串流动的字符,是以先进先出的方式发送和接收数据的通道。Java中的I/O流正是实现文件读写的基础,它可以方便地实现数据的输入和输出。
流具有明确的方向性,按照流的流向来分,其可以分为输入流和输出流。
按照处理单元划分,java中的流可以分为字节流和字符流。
按照流的角色划分,Java中的流可以为节点流和处理流。
FileInputStream和FileOutputStream实现以字节流的方式读写文本文件。
FileWriter类和FileReader类实现以字符流的方式读写文本文件。
BufferedWriter和BufferedReader类为字符缓冲流,具有缓冲区,执行效率更高。
序列化就是将对象的状态存储到特定的存储介质中的过程,也就是将对象状态转换为可保持或可传输格式的过程。反序列化是将存储介质中的数据重新构造为对象的过程。
序列化和反序列化需使用对象输入/输出流流ObjectInputStream和ObjectOutputStream。
努力造就实力,态度决定高度。