递归: 方法定义本身调用方法本身的现象叫递归
注意:
递归一定要有一个出口,结束条件,否则就是死循环;
递归的次数不能太多,否则就会发生内存溢出;
构造方法不能递归使用。
IO流的分类:(java程序为中心的)
流向:
输入流 读取数据
输出流 写出数据
数据类型:
字节流
字节输入流 读取数据 InputStream
字节输出流 写出数据 OutputStream
字符流
字符输入流 读取数据 Reader
字符输出流 写出数据 Writer
FileOutputStream:字节输出流:
字节输出流操作步骤:
创建字节流输出对象
调用write方法写数据
释放资源
void write(byte[] b)
将 b.length个字节从指定的字节数组写入此文件输出流。
void write(byte[] b, int off, int len)
将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。
void write(int b)
将指定的字节写入此文件输出流。
FileOutputStream(File file, boolean append)
创建文件输出流以写入由指定的 File对象表示的文件。 true代表的追加写入,默认是false覆盖
FileInputStream:字节输入流:
创建FileInputStream对象
调用read方法读取数据,输出到控制台
释放资源
int read()
从该输入流读取一个字节的数据。
int read(byte[] b)
从该输入流读取最多 b.length个字节的数据为字节数组。
字节缓冲区:
字节缓冲输出流
BufferedOutputStream
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.txt"));
字节缓冲输入流
BufferedInputStream
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
字符流: (字符转换流)
字符流 = 字节流 + 编码表
Reader:
字符输入流构造方法:
InputStreamReader(InputStream in)
读取数据,根据默认的编码用字符作为桥梁将字节流转换为字符流
创建一个使用默认字符集的InputStreamReader。
InputStreamReader(InputStream in, String charsetName)
读取数据,根据指定的编码用字符作为桥梁将字节流转换为字符流
创建一个使用命名字符集的InputStreamReader。
InputStreamReader读数据方法
public int read():一次只读一个字符
public int read(char[] cbuf):一次读取一个字符数组
Writer:
字符输出流构造方法:
OutputStreamWriter 字符输出流
根据默认的编码用字符流作为桥梁将字节流转成字符流
public OutputStreamWriter(OutputStream out)
根据指定的编码用字符流作为桥梁将字节流转成字符流
public OutputStreamWriter(OutputStream out,String charsetName)
OutputStreamWriter写数据方法
public void write(int c)
public void write(char[] cbuf)
public void write(char[] cbuf,int off,int len)
public void write(String str)
public void write(String str,int off,int len)
flush()的作用:刷新缓冲区,将缓冲区的内容写入到文件中
flush()与close()的区别:
close()方法调用是关闭流对象,会先刷新一次缓冲区,关闭之后,就不能继续使用该流对象了
flush()方法调用后,刷新一次缓冲区,但是流对象可以继续使用
字符缓冲流:
BufferedWriter:字符缓冲输出流
BufferedReader:字符缓冲输入流
BufferedWriter:字符缓冲输出流
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入
BufferedReader:字符缓冲输入流
BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流。
字符缓冲流的特殊方法:
BufferedWriter:
public void newLine() 写一行行分隔符。
行分隔符字符串由系统属性line.separator定义,并不一定是单个换行符('\ n')字符。
BufferedReader:
public String readLine() 读一行文字。到换行符终止