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();
}
}
}