File 类
- File代表文件或者文件夹的类
- 是文件和目录路径名的抽象表示
- 对于file而言,其封装的并不是一个真正存在的文件,只是一个路径名。
- 它可以存在,也可以不存在
- 将来是要通过具体的操作吧这个路径的内容转换为具体存在的
常见构造方法
方法名 | 说明 |
public File(String pathname) | 通过将给定的路径名字符串转换为抽象路径来创建新的File实例 |
public File(String parent,String child) | 从父路径名字符串和子路径名字符串创建新的File实例 |
public File(File parent,String child) | 从父抽象路径名和子路径名字符串创建新的File实例 |
### 绝对路径和相对路径
+ 绝对路径
+ 以盘符开始的路径,完整的路径名
+ 不需要任何其他信息就可以定位它所表示的文件
+ 相对路径
+ 相对于某某的路径
+ File file = new File("aaa.txt");
+ //相对于当前项目下的路径
+ File file = new File("src\\aaa.txt");
+ //相对于src下的路径
+ 必须使用取自其他路径名的信息进行解释
### 常用成员方法
#### 创建功能
方法名 | 说明 |
public boolean createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新文件,不能创建文件夹 |
public boolean mkdir() | 创建由此抽象路径名命名的目录,即文件夹;只能创建**单级文件夹** |
public boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录;即可以创建**多级文件夹** |
#### 删除功能
方法名 | 说明 |
public boolean delete() | 删除由此抽象路径名表示的文件或目录 |
- 当删除一个目录中 有内容时(目录或者文件),必须先删除里面的目录和文件,才能删除该目录
- 使用 delete() 删除不走回收站
判断和获取功能
方法名 | 说明 |
public boolean isDirectory() | 测试此抽象路径名表示的file是否为目录 |
public boolean isFile() | 测试此抽象路径名表示的file是否为文件 |
public boolean exists() | 测试此抽象路径名表示的File是否存在 |
public String getAbsolutePath() | 返回此抽象路径名的绝对路径 |
public String getPath()/td>
| 将此抽象路径名转换为路径名字字符串 |
public String getName() | 返回由此抽象路径名表示的 文件 或 目录 的名称 |
public String[] list() | 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组 |
public File[] listFiles()/td>
| 将此抽象路径名表示的**目录中**的文件和目录的File对象的数组 |
public long length()/td>
| 获取当前抽象路径名表示的长度,大小 |
## IO流
### IO流概述
+ IO
+ 输入/输出,input/output
+ 流
+ 是一种抽象概念,是对数据传输的总称;
+ 即数据在设备间的传输称为流
+ 本质是数据传输
+ IO流就是来处理设备间数据传输问题的
+ 文件复制
+ 文件上传
+ 文件下载
+ 。。。
### IO流分类
+ 按数据的流向
+ 输入流:读数据
+ 输出流:写数据
+ 按数据的类型
+ 字节流
+ 字节输入流;
+ 字节输出流
+ 字符流
+ 字符输入流
+ 字符输出流
+ 一般来说,IO流是按照 **数据类型** 分类的
#### 使用时机
+ 若数据通过Windows自带的记事本软件打开,我们还可以读懂里面的内容
+ **用字符流**
+ 反之;或者不知道用什么类型的流
+ **用字节流**
字节流
字节输出流 FileOutputStream
构造方法
- public FileOutputStream(String name)
- public FileOutputStream(File file)
- 注意事项:
- 不能传一个文件夹的路径,运行会报错
- 若些一个不存在的文件的路径,它会先创建出来
常用成员方法
- public void write(byte b)
- public void write(byte[] b)
- public void write(byte[] b, int off, int len)
- 一次写出一个字节数组的一部分
- int off: 开始的索引,从0开始
- int len: 长度
- public void close()
两个小问题
- 如何实现换行
- 在Windows里
- 换行: \r\n
- “\r\n”.getBytes()
- Linux
- Mac
- 如何实现追加
- public FileOutputStream(“aaa.txt”,true)
字节输入流 FileInputStream
构造方法
- public FileInputStream(String name)
- public FileInputStream(File file)
常用成员方法
- public int read()
- 一次读出一个字节,返回读取的数据,若无数据可读,返回 -1
- public int read(byte[] b)
- 一次读出一个字节数组
- 返回 实际读到的数据长度;若未读取到数据,返回 -1;
- 并将数据写入到 byte数组中
- public int read(byte[] b, int off, int len)
- 一次读出一个字节数组的一部分
- int off: 开始的索引,从0开始
- int len: 长度
- public void close()
文件的复制
方式一:一次读取一个字节,一次写入一个字节
//创建字节输入流,用来读取数据
FileInputStream fis = new FileInputStream("a.txt");
//创建字节输出流,用来写出数据
FileOutputStream fos = new FileOutputStream("b.txt");
//复制方式:读取一个字节,写入一个字节
int by = 0;
while((by = fis.read()) != -1) {
fos.write(by);
}
//释放资源
fos.close();
fis.close();
方式二:一次读取一个字节数组,一次写出一个字节数组的一部分
//创建字节输入流对象,用来读取数据
FileInputStream fis = new FileInputStream("a.txt");
//创建字节输出流对象,用来写出数据
FileOutputStream fos = new FileOutputStream("d.txt");
//复制:一次读取一个字节数组,一次写出一个字节数组的一部分
//byte[] bys = new byte[1024];
int len = 0;//用来接收实际读取的个数的
while((len = fis.read(bys)) != -1) {
fos.write(bys, 0, len);//一次写出一个字节数组的一部分
}
//释放资源
fos.close();
fis.close();
IO流的异常处理
如果要捕获异常,代码该如何写?
//创建字节输入流,用来读取数据
FileInputStream fis = null;
//创建字节输出流,用来写出数据
FileOutputStream fos = null;
try {
fis = new FileInputStream("a.txt");
fos = new FileOutputStream("b.txt");
//复制方式:读取一个字节,写入一个字节
int by = 0;
while((by = fis.read()) != -1) {
fos.write(by);
}
} catch(Exception e) {
e.printStackTrace();//打印异常信息
} finally {
//释放资源
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}