Java流
流的概念
流代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象。作用是为数据源和目的地建立一个输送通道。
字节流和字符流
1)字节流:数据流中最小的数据单位是字节,操作的是byte类型数据。
2)字符流:数据流中最小的数据单位是字符,Java中一个字符占两个字节。
1)输入流,程序从输入流中读取数据,不关心数据来自何处。
2)输出流,程序向输出流中写入数据,不关心目的地是何处。
流的特性
1)先进先出:最先写入的输出流最先被输入流读取到。
2)顺序存取
3)只读或只写:每个流只能是输入流或输出流中的一种。输入流只能读,输出流只能写。
字符流--其实还是字节流 fuck!:abstarct class Reader:
class BufferedReader:
calss InputStreamReader:
class FileReader
Writer:
BufferedWriter
OutputStreamWriter:
FileWriter
字节流:InputStream:
FileInputStream
FilterInputStream:
BufferedInputStream
OutputStream:
FileOutputStream
FilterOutputStream:
BufferedOutputStream
字符流读写
读
1.使用FileReader构造一个File实例给父类 InputStreamReader的构造器 ,构造器通过这个 File构造一个FileInputStream(只要是InputStream子类就阔以) 实际上就是在这儿从字节流处理成字符流的、、
InputStreamReader fr=new FileReader(new File("sdasd.sda"));
char[] cs=new char[10];
int n=fr.read(cs);
//如果读到最后没了,read方法会返回 -1//这是Reader提供的方法
//FileReader其实就是 通过 一个文件地址字符串或者File对象 给 InputStreamReader 构造、传入 了一个 InputStream 对象
//InputStreamReader和Reader 提供了 read(cs)方法
2.直接使用InputStreamReaderInputStreamReader isr=new InputStreamReader(aFileInputStreamOROtherInputStream);
//构造器要传入一个 字节流InputStream对象char[] cs=new char[20];
int n=isr.read(cs);
//还是使用FileRader的爷爷 InputStreamReader的爸爸的 read(cs)方法
3.使用缓冲字符流 BufferedReader
Buffered构造器要传入Reader的实例来构造,所以只能传入FileReader或者InputStreamReader实例。
而InputStreamReader构造时要传入一个 InputStream字节输入流实例。
3.1 read()/**
* Reads a single character.
*
* @return The character read, as an integer in the range
* 0 to 65535 (0x00-0xffff), or -1 if the
* end of the stream has been reached
* @exception IOException If an I/O error occurs
*/
public int read() throws IOException {
3.2 read(cs) //结尾返回 -1 ,每次read返回读入的 字符数
3.3 readLine //String readLine() 每次返回读取到的一行字符串,读完了 会返回 null
写
1.FileWriter
通过构造器 调用 父类OutputStreamWriter构造器,通过传入的File 构造一个FileOutputStream
FileWriter fw=new FileWriter(new File("sda.txt),true);//true表示文件尾追加
void write(String s) //(s,begin,end)
void write(cahr[] cs) //(cs,begin,end)
void write(int c)//char(c)
//Writer类中 abstract public void write(char cbuf[], int off, int len) throws IOException;
//flush() 都是立即将字符写入文件,还可以继续写。但close后就不可以写了
//close()//必须关闭
2.OutputStreamWriter
需要通过一个OutputStream来构造.//FileOutputStream提供的可追加构造器OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream(f,true));
3.BufferedWriter
需要一个Writer实例来构造。所以只能传入OutputStreamWriter或者子类FileWriter实例。void new line();//仅换行
void bw.write("hello a")