File类概述
-
File
类在包java.io.File
下、代表操作系统的文件对象(文件、文件夹)。
-
File
类提供了诸如:定位文件,获取文件本身的信息、删除文件、创建文件(文件夹)等功能。
File类创建对象
方法名称 |
说明 |
public File(String pathname) |
根据文件路径创建文件对象 |
public File(String parent, String child) |
从父路径名字符串和子路径名字符串创建文件对象 |
public File(File parent, String child ) |
根据父路径对应文件对象和子路径名字符串创建文件对象 |
-
File
对象可以定位文件和文件夹
-
File
封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的。
绝对路径和相对路径
File file1 = new File(“D:\\itheima\\a.txt”);
- 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件。
File file3 = new File(“模块名\\a.txt”);
File类的常用API
判断文件类型、获取文件信息
方法名称 |
说明 |
public boolean isDirectory() |
测试此抽象路径名表示的File 是否为文件夹 |
public boolean isFile() |
测试此抽象路径名表示的File 是否为文件 |
public boolean exists() |
测试此抽象路径名表示的File 是否存在 |
public String getAbsolutePath() |
返回此抽象路径名的绝对路径名字符串 |
public String getPath() |
将此抽象路径名转换为路径名字符串 |
public String getName() |
返回由此抽象路径名表示的文件或文件夹的名称 |
public long lastModified() |
返回文件最后修改的时间毫秒值 |
创建文件
方法名称 |
说明 |
public boolean createNewFile() |
创建一个新的空的文件 |
public boolean mkdirs() |
可以创建多级文件夹 |
删除文件
方法名称 |
说明 |
public boolean delete() |
删除由此抽象路径名表示的文件或空文件夹 |
-
delete
方法默认只能删除文件和空文件夹。
-
delete
方法直接删除不走回收站
遍历文件夹
方法名称 |
说明 |
public String[] list() |
获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。 |
public File[] listFiles() |
获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回 |
listFiles
方法注意事项:
- 当调用者不存在时,返回
null
- 当调用者是一个文件时,返回
null
- 当调用者是一个空文件夹时,返回一个长度为
的数组
- 当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在
File
数组中返回
- 当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在
File
数组中返回,包含隐藏内容
- 当调用者是一个需要权限才能进入的文件夹时,返回
null
IO流概述
IO流也称为输入、输出流,就是用来读写数据的。
- I表示
intput
,是数据从硬盘文件读入到内存的过程,称之输入,负责读。
- O表示
output
,是内存程序的数据从内存到写出到硬盘文件的过程,称之输出,负责写。
流的四大类:
- 字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流称为字节输入流。
- 字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流称为字节输出流。
- 字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流称为字符输入流。
- 字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流称为字符输出流。
字节流的使用
文件字节输入流:每次读取一个字节/字节数组
文件字节输入流:FileInputStream
构造器 |
说明 |
public FileInputStream(File file) |
创建字节输入流管道与源文件对象接通 |
public FileInputStream(String pathname) |
创建字节输入流管道与源文件对象接通 |
方法名称 |
说明 |
public int read() |
每次读取一个字节返回,如果字节已经没有可读的返回-1
|
public int read(byte[] buffer) |
每次读取一个字节数组返回,如果字节已经没有可读的返回-1
|
文件字节输入流:一次读完全部字节
官方为字节输入流InputStream
提供了如下API
可以直接把文件的全部数据读取到一个字节数组中
方法名称 |
说明 |
public byte[] readAllBytes() throws IOException |
直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回 |
文件字节输出流:写字节数据到文件
文件字节输出流:FileOutputStream
作用:以内存为基准,把内存中的数据以字节的形式写出到磁盘文件中去的流。
构造器 |
说明 |
public FileOutputStream(File file) |
创建字节输出流管道与源文件对象接通 |
public FileOutputStream(File file,boolean append) |
创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath) |
创建字节输出流管道与源文件路径接通 |
public FileOutputStream(String filepath,boolean append) |
创建字节输出流管道与源文件路径接通,可追加数据 |
FileOutputStream
写数据出去的API
方法名称 |
说明 |
public void write(int a) |
写一个字节出去 |
public void write(byte[] buffer) |
写一个字节数组出去 |
public void write(byte[] buffer , int pos , int len) |
写一个字节数组的一部分出去 |
流的关闭与刷新
方法 |
说明 |
flush() |
刷新流,还可以继续写数据 |
close() |
关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据 |
文件拷贝
public class Copydemo {
public static void main(String[] args) throws Exception {
// 这里面只能放置资源对象,用完会自动关闭:自动调用资源对象的close方法关闭资源(即使出现异常也会做关闭操作)
// 1、创建一个字节输入流管道与原文件接通
InputStream is = new FileInputStream("file-io-app/src/out04.txt");
// 2、创建一个字节输出流管道与目标文件接通
OutputStream os = new FileOutputStream("file-io-app/src/out05.txt");
try ( is ; os ) {
// 3、定义一个字节数组转移数据
byte[] buffer = new byte[1024];
int len; // 记录每次读取的字节数。
while ((len = is.read(buffer)) != -1){
os.write(buffer, 0 , len);
}
System.out.println("复制完成了!");
} catch (Exception e){
e.printStackTrace();
}
}
}
字符流的使用
文件字符输入流:一次读取一个字符/字符数组
- 字节流读取中文输出会存在什么问题?
会乱码。或者内存溢出。
- 读取中文输出,哪个流更合适,为什么?
字符流更合适,最小单位是按照单个字符读取的。
文件字符输入流:Reader
作用:以内存为基准,把磁盘文件中的数据以字符的形式读取到内存中去。
构造器 |
说明 |
public FileReader(File file) |
创建字符输入流管道与源文件对象接通 |
public FileReader(String pathname) |
创建字符输入流管道与源文件对象接通 |
方法名称 |
说明 |
public int read() |
每次读取一个字符返回,如果字符已经没有可读的返回-1
|
public int read(char[] buffer) |
每次读取一个字符数组,返回读取的字符个数,如果字符已经没有可读的返回-1
|
文件字符输出流
文件字符输出流:FileWriter
作用:以内存为基准,把内存中的数据以字符的形式写出到磁盘文件中去的流。
构造器 |
说明 |
public FileWriter(File file) |
创建字符输出流管道与源文件对象接通 |
public FileWriter(File file,boolean append) |
创建字符输出流管道与源文件对象接通,可追加数据 |
public FileWriter(String filepath) |
创建字符输出流管道与源文件路径接通 |
public FileWriter(String filepath,boolean append) |
创建字符输出流管道与源文件路径接通,可追加数据 |
FileWriter
写数据出去的API
方法名称 |
说明 |
void write(int c) |
写一个字符 |
void write(char[] cbuf) |
写入一个字符数组 |
void write(char[] cbuf, int off, int len) |
写入字符数组的一部分 |
void write(String str) |
写一个字符串 |
void write(String str, int off, int len) |
写一个字符串的一部分 |
流的关闭与刷新
方法 |
说明 |
flush() |
刷新流,还可以继续写数据 |
close() |
关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据 |