目录
(2)字节缓冲输入流 BufferedInputStream
(2)字节缓冲输出流 BufferedOutputStream
一、File对象
1、创建File对象
File(String pathname):根据文件的路径来创建一个File文件对象
2、常用方法
- length():文件的字节量
- exists():是否存在,存在返回true
- isFile():是否为文件,是文件返回true
- isDirectory():是否为文件夹,是文件夹返回true
- getName():获取文件/文件夹名
- getParent():获取父文件夹的路径
- getAbsolutePath():获取文件的完整路径
- createNewFile():新建文件,文件夹不存在会异常,文件已经存在返回false
- mkdirs():新建多层不存在的文件夹\a\b\c
- mkdir():新建单层不存在的文件夹\a
- delete():删除文件,删除空文件夹
- list():返回String[],包含文件名
- listFiles():返回File[],包含文件对象
3、练习:递归求目录的文件个数
public class Test3 {
public static void main(String[] args) {
// 1、把指定目录封装成File对象
File file = new File("D:\\CentOS");
int size =count(file);
System.out.println(size);
}
private static int count(File file) {
// 2、把文件夹列表列出来
File[] files = file.listFiles();
//记录文件个数
int sum = 0;
for (int i = 0; i < files.length; i++) {
// 3、判断,如果是文件,sum++
if(files[i].isFile()) {
System.out.println(files[i].getName());
sum++;
}else if(files[i].isDirectory()){
// 4、判断,如果是文件夹,递归
//把当前遍历到的文件夹继续循环判断求和
sum = sum + count(files[i]);
}
}
return sum ;
}
二、字节流
1、字节输入流 InputStream
InputStream类是字节输入流的抽象类,是所有字节输入流的父类。
输入流是从文件向程序输入的流,需要向文件中读取数据(read)。
InputStream的常用方法:
- int available() 从下一次调用此输入流的方法返回可从该输入流读取(或跳过)的字节数,而不会阻塞。
- void close() 关闭此输入流并释放与流相关联的任何系统资源。
- void mark(int readlimit) 标记此输入流中的当前位置。
- boolean markSupported() 测试此输入流是否支持 mark和 reset方法。
- abstract int read() 从输入流读取数据的下一个字节。
- int read(byte[] b) 从输入流中读取一些字节数,并将它们存储到缓冲器阵列 b 。
- int read(byte[] b, int off, int len) 从输入流读取最多 len个字节的数据到字节数组。
- void reset() 将此流重新定位到最后在此输入流上调用 mark方法时的位置。
- long skip(long n) 跳过并丢弃来自此输入流的 n字节的数据。
(1)FileInputStream
继承了InputStream类, 构造方法如下:
- FileInputStream(File file) 通过File对象创建一个 FileInputStream
- FileInputStream(FileDescriptor fdObj) 通过文件描述符 fdObj 创建一个 FileInputStream,其表示在文件系统中的现有连接到一个实际的文件
- FileInputStream(String name) 通过文件系统中的路径名 name创建FileInputStream。
常用方法如下:
- int read() 从输入流中读取数据的下一个字节。
- int read(byte[] b) 从输入流中将n字节 读到byte 数组中,n最大为b.length,返回n。若输入流中的字节数大于n,返回值为n,否则返回实际读取的字节数。
- int read(byte[] b, int off, int len) 从输入流中读最多 len 个字节到 byte 数组中,返回len。
- void close() 关闭此输入流并释放与该流关联的所有系统资源。
说明:
- read():返回读入的一个当前字符,如果达到文件末尾,返回-1.
- 异常处理:为了保证流资源一定可以执行关闭操作,需要捕获异常。
(2)字节缓冲输入流 BufferedInputStream
BufferedInputStream 为一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组(默认大小8M),实现批量读取数据。
构造函数如下:
- BufferedInputStream(InputStream in) 通过InputStream创建BufferedInputStream 。
- BufferedInputStream(InputStream in, int size) 通过InputStream创建BufferedInputStream ,缓冲区大小为size
常用方法:
- int read() 从输入流中读取数据的下一个字节
- int read(byte[] b, int off, int len)
- void close() 关闭流,先刷新。
- void flush() 刷新流。
2、字节输出流OutputStream
字节输出流是从程序中输出的流,要往文件中写数据(write)。
(1)FileOutputStream
构造方法如下:
- FileOutputStream(File file) 向指定 File 对象表示的文件中写入数据。
- FileOutputStream(File file, boolean append) 向指定 File 对象表示的文件中添加数据,后面的布尔类型决定向文件中添加内容时是否覆盖原有内容。
- FileOutputStream(FileDescriptor fdObj) 向指定文件描述符处写入数据,该文件描述符表示一个到文件系统中的某实际文件的现有连接。
- FileOutputStream(String name) 向具有指定名称的文件中写入数据。
- FileOutputStream(String name, boolean append) 向具有指定 name 的文件中添加数据,后面的布尔类型决定添加到文件中的内容是否覆盖原有内容。
常用方法如下:
- void write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中。
- void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
- void write(int b) 将指定字节写入此文件输出流。
- void close() 关闭此输出流并释放与该流关联的所有系统资源。
(2)字节缓冲输出流 BufferedOutputStream
构造方法如下:
- BufferedOutputStream(OutputStream out) 通过OutputStream创建BufferedOutputStream。
- BufferedOutputStream(OutputStream out, int size) 通过OutputStream创建BufferedOutputStream,缓冲区大小为size。
常用方法如下:
- void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。
- void write(int b) 将指定的字节写入缓冲输出流的缓冲数组。
- void close() 关闭流,先刷新。
- void flush() 刷新流。
三、字符流
1、字符输入流Reader
Reader是字符输入流的基类,Reader的方法列表如下:
- void close() 关闭流并释放与之相关联的任何系统资源。
- void mark(int readAheadLimit) 标记流中的当前位置。
- boolean markSupported() 告诉这个流是否支持mark()操作。
- int read() 读一个字符
- int read(char[] cbuf) 将字符读入数组。
- int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
- int read(CharBuffer target) 尝试将字符读入指定的字符缓冲区。
- boolean ready() 告诉这个流是否准备好被读取。
- void reset() 重置流。
- long skip(long n) 跳过字符
(1)FileReader
FileReader用来读取字符文件。
构造方法如下:
- FileReader(File file) 通过File对象创建 FileReader。
- FileReader(FileDescriptor fd) 通过FileDescriptor创建FileReader。
- FileReader(String fileName) 通过文件名创建FileReader,
方法如下:
- int read() 读取单个字符,返回字符的ASCII码。
- int read(char[] cbuf) 将字符读入数组,返回读入数据的个数。
- int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。
- int read(CharBuffer target) 试图将字符读入指定的字符缓冲区。
- void close() 关闭流,先刷新
- void flush() 刷新流
(2)字符缓冲输入流 BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者可使用默认的大小(8M)。大多数情况下,默认值就足够大了。
构造函数如下:
- BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
- BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
常用方法如下:
- int read() 读取单个字符。
- int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。
2、字符输出流 Writer
Writer是字符输出流的基类,Writer的主要方法如下:
- void close() 关闭流,先刷新
- void flush() 刷新流
- void write(char[] cbuf) 写入一个字符数组。
- void write(char[] cbuf, int off, int len) 写入字符数组的一部分
- void write(int c) 写入一个字符
- void write(String str) 写入一个字符串
- void write(String str, int off, int len) 写入一个字符串的一部分
(1) FileWriter
继承了Writer类,构造函数如下:
- FileWriter(File file) 通过File 对象创建一个 FileWriter 对象。
- FileWriter(File file, boolean append) 通过File 对象创建一个 FileWriter 对象,后面的布尔类型决定向文件中添加内容时是否覆盖原有内容。
- FileWriter(FileDescriptor fd) 通过文件描述符创建FileWriter 对象。
- FileWriter(String fileName) 通过文件名创建一个 FileWriter 对象。
- FileWriter(String fileName, boolean append) 通过文件名创建一个 FileWriter 对象,后面的布尔类型决定添加到文件中的内容是否覆盖原有内容。
常用方法如下:
- void write(char[] cbuf) 写入字符数组。
- void write(int c) 写入单个字符。
- void write(String str) 写入字符串。
- void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
- void write(String str, int off, int len) 写入字符串的某一部分。
(2)字符缓冲输出流 BufferedWriter
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
构造方法如下:
- BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。
- BufferedWriter(Writer out, int sz) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流。
writer方法如下:
- void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
- void write(int c) 写入单个字符。
- void write(String s, int off, int len) 写入字符串的某一部分。