一.文件操作
1.构造方法
方法名 | 说明 |
---|---|
File(String pathname) | 根据一个路径得到File对象 |
File(String parent, String child) | 根据一个目录和一个子文件/目录得到File对象 |
File(File parent, String child) | 根据一个父File对象和一个子文件/目录得到File对象 |
2.创建:
方法名 | 说明 |
---|---|
createNewFile() | 在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false |
mkdir() | 在指定位置创建一个单级文件夹 |
mkdirs() | 在指定位置创建一个多级文件夹 |
renameTo(File dest) | 如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名, 如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切,而且还不能操作文件夹 |
3.删除:
方法名 | 说明 |
---|---|
delete() | 删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值 |
deleteOnExit() | jvm退出时删除文件或者文件夹,用于删除临时文件,无返回值。 |
4.判断:
方法 | 说明 |
---|---|
exists() | 文件或文件夹是否存在。 |
isFile() | 是否是一个文件,如果不存在,则始终为false |
isDirectory() | 是否是一个目录,如果不存在,则始终为false |
isHidden() | 是否是一个隐藏的文件或是否是隐藏的目录 |
isAbsolute() | 测试此抽象路径名是否为绝对路径名 |
5. 获取:
方法 | 说明 |
---|---|
getName() | 获取文件或文件夹的名称,不包含上级路径 |
getAbsolutePath() | 获取文件的绝对路径,与文件是否存在没关系 |
ength() | 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L |
getParent() | 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null |
lastModified() | 获取最后一次被修改的时间 |
6.文件夹相关:
方法 | 说明 |
---|---|
static File[] listRoots() | 列出所有的根目录(Window中就是所有系统的盘符) |
list() | 返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null |
listFiles() | 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null |
list(FilenameFilter filter) | 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null |
listFiles(FilenameFilter filter) | 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null |
二.IO流
1.字节流
(1).字节流基类
InputStream
InputStream:字节输入流基类,抽象类是表示字节输入流的所有类的超类。
常用方法:
方法名 | 说明 |
---|---|
abstract int read() | 从输入流中读取数据的下一个字节 |
int read(byte[] b) | 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中 |
int read(byte[] b, int off, int len) | 将输入流中最多 len 个数据字节读入 byte 数组 |
long skip(long n) | 跳过和丢弃此输入流中数据的 n个字节 |
void close() | 关闭此输入流并释放与该流关联的所有系统资源 |
OutputStream
OutputStream:字节输出流基类,抽象类是表示输出字节流的所有类的超类。
方法名 | 说明 |
---|---|
void write(byte[] b) | 将 b.length 个字节从指定的 byte 数组写入此输出流 |
void write(byte[] b, int off, int len) | 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流 |
abstract void write(int b) | 指定的字节写入此输出流 |
void close() | 关闭此输出流并释放与此流有关的所有系统资源 |
void flush() | 刷新此输出流并强制写出所有缓冲的输出字节 |
(2).字节文件操作流
FileInputStream
FileInputStream:字节文件输入流,从文件系统中的某个文件中获得输入字节,用于读取诸如图像数据之类的原始字节流。
构造方法:
方法名 | 说明 |
---|---|
FileInputStream(File file) | 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定 |
FileInputStream(String name) | 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径name指定 |
常用方法:覆盖和重写了父类的的常用方法。
FileOutputStream
FileOutputStream:字节文件输出流是用于将数据写入到File,从程序中写入到其他位置。
构造方法:
方法名 | 说明 |
---|---|
FileOutputStream(File file) | 创建一个向指定File对象表示的文件中写入数据的文件输出流 |
FileOutputStream(File file, boolean append) | 创建一个向指定File对象表示的文件中写入数据的文件输出流 |
FileOutputStream(String name) | 创建一个向具有指定名称的文件中写入数据的输出文件流 |
FileOutputStream(String name, boolean append) | 创建一个向具有指定name的文件中写入数据的输出文件流 |
常用方法:覆盖和重写了父类的的常用方法。
(3).字节缓冲流(高效流)
BufferedInputStream
BufferedInputStream:字节缓冲输入流,提高了读取效率。
构造方法:
方法名 | 说明 |
---|---|
BufferedInputStream(InputStream in) | 创建一个 BufferedInputStream并保存其参数,即输入流in,以便将来使用。 |
BufferedInputStream(InputStream in, int size) | 创建具有指定缓冲区大小的 BufferedInputStream并保存其参数,即输入流in以便将来使用 |
BufferedOutputStream
BufferedOutputStream:字节缓冲输出流,提高了写出效率。
构造方法:
方法名 | 说明 |
---|---|
BufferedOutputStream(OutputStream out) | 创建一个新的缓冲输出流,以将数据写入指定的底层输出流 |
BufferedOutputStream(OutputStream out, int size) | 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流 |
常用方法:
方法名 | 说明 |
---|---|
void write(byte[] b, int off, int len) | 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流 |
void write(int b) | 将指定的字节写入此缓冲的输出流 |
void flush() | 刷新此缓冲的输出流 |
2.字符流
(1).字符流基类
Reader
Reader:读取字符流的抽象类
常用方法:
方法名 | 说明 |
---|---|
int read() | 读取单个字符 |
int read(char[] cbuf) | 将字符读入数组 |
abstract int read(char[] cbuf, int off, int len) | 将字符读入数组的某一部分 |
long skip(long n) | 跳过字符 |
abstract void close() | 关闭该流并释放与之关联的所有资源 |
Writer
Writer:写入字符流的抽象类。
常用方法 | 说明 |
---|---|
void write(char[] cbuf) | 写入字符数组 |
abstract void write(char[] cbuf, int off, int len) | 写入字符数组的某一部分 |
void write(int c) | 写入单个字符 |
void write(String str) | 写入字符串 |
void write(String str, int off, int len) | 写入字符串的某一部分 |
Writer append(char c) | 将指定字符添加到此 writer |
Writer append(CharSequence csq) | 将指定字符序列添加到此 writer |
Writer append(CharSequence csq, int start, int end) | 将指定字符序列的子序列添加到此 writer.Appendable |
abstract void close() | 关闭此流,但要先刷新它 |
abstract void flush() | 刷新该流的缓冲 |
(2).字符转换流
InputStreamReader
InputStreamReader:字节流转字符流,它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
构造方法:
方法名 | 说明 |
---|---|
InputStreamReader(InputStream in) | 创建一个使用默认字符集的 InputStreamReader |
InputStreamReader(InputStream in, Charset cs) | 创建使用给定字符集的 InputStreamReader |
InputStreamReader(InputStream in, CharsetDecoder dec) | 创建使用给定字符集解码器的 InputStreamReader |
InputStreamReader(InputStream in, String charsetName) | 创建使用指定字符集的 InputStreamReader |
特有方法:
方法名 | 说明 |
---|---|
String getEncoding() | 返回此流使用的字符编码的名称 |
OutputStreamWriter
OutputStreamWriter:字节流转字符流。
构造方法:
方法名 | 说明 |
---|---|
OutputStreamWriter(OutputStream out) | 创建使用默认字符编码的 OutputStreamWriter |
OutputStreamWriter(OutputStream out, Charset cs) | 创建使用给定字符集的 OutputStreamWriter |
OutputStreamWriter(OutputStream out, CharsetEncoder enc) | 创建使用给定字符集编码器的 OutputStreamWriter |
OutputStreamWriter(OutputStream out, String charsetName) | 创建使用指定字符集的 OutputStreamWriter |
特有方法:
方法名 | 说明 |
---|---|
String getEncoding() | 返回此流使用的字符编码的名称 |
字符缓冲流(高效流)
BufferedReader:字符缓冲流,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
构造方法:
方法名 | 说明 |
---|---|
BufferedReader(Reader in) | 创建一个使用默认大小输入缓冲区的缓冲字符输入流 |
BufferedReader(Reader in, int sz) | 创建一个使用指定大小输入缓冲区的缓冲字符输入流 |
特有方法:
方法名 | 说明 |
---|---|
void newLine() | 写入一个行分隔符 |
FileReader、FileWriter
FileReader:InputStreamReader类的直接子类,用来读取字符文件的便捷类,使用默认字符编码。
FileWriter:OutputStreamWriter类的直接子类,用来写入字符文件的便捷类,使用默认字符编码。
3.缓冲流效率对比
读取方式一:
FileInputStream inputStream = new FileInputStream("D://test.mp4");
FileOutputStream outputStream = new FileOutputStream("test.mp4");
int len;
// 开始时间
long begin = System.currentTimeMillis();
// 一次读取一个字节
while ((len = inputStream.read()) != -1) {
outputStream.write(len);
}
// 用时毫秒
System.out.println(System.currentTimeMillis() - begin);// 213195
//关闭流释放资源
inputStream.close();
outputStream.close();
读取方式二:
FileInputStream inputStream = new FileInputStream("D://test.mp4");
FileOutputStream outputStream = new FileOutputStream("test.mp4");
int len;
byte[] bs = new byte[1024];
// 开始时间
long begin = System.currentTimeMillis();
// 一次读取一个字节数组
while ((len = inputStream.read(bs)) != -1) {
outputStream.write(bs, 0, len);
}
// 用时毫秒
System.out.println(System.currentTimeMillis() - begin);// 281
inputStream.close();
outputStream.close();
读取方式三:
FileInputStream inputStream = new FileInputStream("D://test.mp4");
BufferedInputStream bis = new BufferedInputStream(inputStream);
FileOutputStream outputStream = new FileOutputStream("test.mp4");
BufferedOutputStream bos = new BufferedOutputStream(outputStream);
int len;
byte[] bs = new byte[1024];
// 开始时间
long begin = System.currentTimeMillis();
while ((len = bis.read(bs)) != -1) {
bos.write(bs, 0, len);
}
// 用时毫秒
System.out.println(System.currentTimeMillis() - begin);// 78
bis.close();
bos.close();
读写速度差距相当明显