File类
- File类
- 文件和目录路径名的抽象表示
- 文件和目录是可以通过File封装成对象的
- 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已,它可以是存在的,也可以是不存在的,将来是要通过具体的操作把这个路径的内容转换为具体存在的
- File类构造方法
方法名 | 说明 |
---|
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 |
File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例 |
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例 |
方法名 | 说明 |
---|
public boolean createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件 |
public boolean mkdir() | 创建由此抽象路径名命名的目录 |
public boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录 |
方法名 | 说明 |
---|
public boolean delete() | 删除由此抽象路径名表示的文件或目录 |
方法名 | 说明 |
---|
public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录 |
public boolean isFile() | 测试此抽象路径名表示的File是否为文件 |
public boolean exists() | 测试此抽象路径名表示的File是否存在 |
方法名 | 说明 |
---|
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 将此抽象路径名转换为路径名字符串 |
public String getName() | 返回由此抽象路径名表示的文件或目录的名称 |
public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
字节流
- IO流
- IO:输入(Input)输出:(Output)
- 流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,本质是数据传输
- IO流是用来处理设备间数据传输的问题,如:文件复制,上传,下载
- IO流分类
- IO流使用场景
- 操作纯文本文件,优先使用字符流
- 操作图片,视频,音频等二进制文件,优先使用字节流
- 不确定文件类型,使用字节流(万能流)
字节流写数据
- 字节流抽象基类
- InputStream: 这个抽象类是表示字节输入流的所有类的超类
- OutputStream: 这个抽象类表示字节流输出的所有类的超类
- 子类名特点: 子类名称都是以父类名作为子类名的后缀
- 字节输出流
- FileOutputStream(String name) :创建文件输出流以指定的名称写入文件
- 使用字节输出流写数据的步骤
- 创建字符输出流对象(调用系统功能创建文件,创建字节输出流对象,让字节输出流对象指向文件)
- FileOutputStream fos = new FileOutputStream(文件路径)
- 调用字节输出流对象的写数据方法 fos.write( );
- 释放资源 fos.close();
- 写数据的方法分类
方法名 | 说明 |
---|
void write(int b) | 将指定的字节写入此文件输出流 一次写一个字节数据 |
void write(byte[] b) | 将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据 |
void write(byte[] b, int off, int len) | 将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据 |
- 字节流写数据的两个问题
- 字节流写数据如何换行
- windows系统:\r\n
- linux系统:\n
- Mac系统:\r
- 字节流写数据如何实现追加写入
- Public FileOutputStream(String name,boolean append)
- 创建文件输出流以指定名称写入文件,如果第二个参数为true,则字节将写入文件的末尾而不是开头
- 字节流写数据加异常处理
- 异常处理格式
- try-catch-finally
- finally特点
- 被finally控制语句一定会执行,除非JVM退出
字节流读数据
- 字节输入流
- FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名
- 字节输入流读取数据步骤
- 创建字节输入流对象
- 调用字节输入流对象的读数据方法
- 释放资源
- 字节流读数据
- 一次读一个字节数组的方法
- public int read(byte[]b):从输入流读取最多b.length个字节的数据
- 返回的是读入缓冲区总字节数,也就是实际的读取字节个数
- 字节流复制文件
- 创建字节输入流对象
- 创建字节输出流对象
- 读写数据,复制图片
- 释放资源
字节缓冲流
- 字节缓冲流
- IBufferOutputStream: 该类实现缓冲输出流,通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
- IBufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组,当从流中读取或者跳过字节时,内部缓冲区将根据需要从所含的输入流中重新填充一次很多字节
- 构造方法
方法名 | 说明 |
---|
BufferedOutputStream(OutputStream out) | 创建字节缓冲输出流对象 |
BufferedInputStream(InputStream in) | 创建字节缓冲输入流对象 |
- 字节缓冲流复制视频
- 根据数据源创建字节输入流对象
- 根据目的地创建字节输出流对象
- 读写数据,复制视频
- 释放资源
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\itcast\\字节流复制图片.avi"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\字节流复制图片.avi"));
byte[] bys = new byte[1024];
int len;
while ((len=bis.read(bys))!=-1) {
bos.write(bys,0,len);
}
bos.close();
bis.close();
}
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\itcast\\字节流复制图片.avi"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\字节流复制图片.avi"));
int by;
while ((by=bis.read())!=-1) {
bos.write(by);
}
bos.close();
bis.close();
}
字符流
由于字节流操作中文不是特别的方便,所以Java就提供字符流
字符流 = 字节流 + 编码表
字符串中编码解码问题
方法名 | 说明 |
---|
byte[] getBytes() | 使用平台的默认字符集将该 String编码为一系列字节 |
byte[] getBytes(String charsetName) | 使用指定的字符集将该 String编码为一系列字节 |
String(byte[] bytes) | 使用平台的默认字符集解码指定的字节数组来创建字符串 |
String(byte[] bytes, String charsetName) | 通过指定的字符集解码指定的字节数组来创建字符串 |
字符流写数据
- Writer: 用于写入字符流的抽象父类
- FileWriter: 用于写入字符流常用子类
- 构造方法
方法名 | 说明 |
---|
FileWriter(File file) | 根据给定的 File 对象构造一个 FileWriter 对象 |
FileWriter(File file, boolean append) | 根据给定的 File 对象构造一个 FileWriter 对象 |
FileWriter(String fileName) | 根据给定的文件名构造一个 FileWriter 对象 |
FileWriter(String fileName, boolean append) | 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象 |
方法名 | 说明 |
---|
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() | 关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据 |
字符流读写数据
-
Reader:用于读取字符流的抽象父类
-
FileReader用于读取字符流的常用子类
-
构造方法
方法名 | 说明 |
---|
FileReader(File file) | 在给定从中读取数据的 File 的情况下创建一个新 FileReader |
FileReader(String fileName) | 在给定从中读取数据的文件名的情况下创建一个新 FileReader |
-
成员方法
方法名 | 说明 |
---|
int read() | 一次读一个字符数据 |
int read(char[] cbuf) | 一次读一个字符数组数据 |
字符缓冲流
- 字符缓冲流介绍
- BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途
- BufferedReader:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途
- 构造方法
方法名 | 说明 |
---|
BufferedWriter(Writer out) | 创建字符缓冲输出流对象 |
BufferedReader(Reader in) | 创建字符缓冲输入流对象 |
BufferedWriter:
方法名 | 说明 |
---|
void newLine() | 写一行行分隔符,行分隔符字符串由系统属性定义 |
BufferedReader:
方法名 | 说明 |
---|
String readLine() | 读一行文字。 结果包含行的内容的字符串,不包括任何行终止字符如果流的结尾已经到达,则为null |
Properties集合
- Properties作为Map集合的使用
- 是一个Map体系的集合类
- Properties可以保存到流中或从流中加载
- 属性列表中的每个键及其对应的值都是一个字符串
- Properties作为Map集合的特有方法
方法名 | 说明 |
---|
Object setProperty(String key, String value) | 设置集合的键和值,都是String类型,底层调用 Hashtable方法 put |
String getProperty(String key) | 使用此属性列表中指定的键搜索属性 |
Set stringPropertyNames() | 从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串 |