根据流的流向分类:
Input:输入流 从磁盘到java程序中
Output:输出流 从java程序到磁盘中
注意:输入输出全是根据 java程序 而言的
根据流操作的数据来分类
字符流: 操作字符
只能操作普通文本文件,
最常见的文本文件:.txt,.java,.c,.cpp等其他语言的源代码
只要用文本工具(记事本,notepad++,editplus)可以打开的 ,而且打开后我们人类能看懂的 都是文本文件
注意:我们用的.doc,excel,ppt这些不是文本文件
字节流: 操作字节
能操作一切文件(文本文件,.mp3,视频.avi,.rmvb,mp4,doc,excel,ppt)
java中的四大流:
字符输入流:共同父类 Reader 比如:FileReader,BufferedReader
功能:读取一个字符,读取一个字符数组
字符输出流:共同的父类 Writer 比如:FileWriterBufferedWriter
功能:写一个字符,写一个字符数组(一部分),写一个字符串
字节输入流:共同父类InputStream 比如:FileInputStream,BufferedInputStream
功能:读取一个字节,读取一个字节数组
字节输出流:共同父类 OutputStream比如:FileOutputStream,BufferedOutputStream
功能:写一个字节,写一个字节数组(一部分)
总结2条规律:
只要是输入流 此流的方法名一定叫做 read
只要是输出流 此流的方法名一定叫做 write
java中流的命名是十分规范的:
功能+父类的名字
2.字节流:
FileInputStream :
读取数据方法: read
publicint read();
标准代码
intb = 0;
while((b=fis.read())!=-1){
syso((char)b);
}
publicint read(byte[] bs);
标准代码
byte[]bs = new byte[1024];
intlen = 0;
while((len=fis.read(bs))!=-1){
Strings = new String(bs,0,len);
syso(s);
}
FileOutputStream:方法名write
publicvoid write(int b)//一次写一个字节
publicvoid write(byte[] bs)//一次写一个字节数组
publicvoid write(byte[] bs,int startIndex,int len)//一次写一个字节数组的一部分
缓冲流:
BufferedOutputStream:基于FileOutputStream
BufferedInputStream:基于FileInputStream
一般步骤
1、创建对象
1.1写操作
public FileOutputStream(String filename,boolean flag); //flag 为ture时是续写,不写默认是不续写、
FileOutputStream fos = FileOutputStream(路径);
1.创建了一个文件字节输出流对象
2.如果文件不存在,会自动创建一个
3.让fos这流 指向该文件
1.2 读操作
FileInputStream fis = newFileInputStream("D:\\txt");
* 1.创建了 文件字节输入流对象
* 2.检测文件是否存在,如果不存在 直接抛出异常
* 3.让 fis输入流对象 指向该文件
2、读写操作
2.1、写操作:
运用String方法中的.getBytes方法 可以将字符串转换成Byte[]
byte[] bs ="这是一句例子".getBytes();
fos.write(bs);
2.2、读操作
1、一个字节一个字节读
int b = 0;//用来保存每次读取到的码值
/*
* 1.fis.read():先读
* 2.b=fis.read():赋值
* 3.b!=-1:判断
*/
while((b=fis.read())!=-1){
//如果读取到了东西
System.out.println((char)b); // b为int类型数据 需强制类型转换为char
}
2、 一个数组读
byte[] bs = new byte[4]; //创建一个byte数组存放字节 实际开发中建议写1024或其倍数
intlen = 0;
/*(len= fis.read(bs))!=-1做了三件事
*1.fis.read(bs):先读
*2.len = fis.read(bs):赋值
*3.len!=-1:判断
*/
//标准代码
while((len= fis.read(bs))!=-1){
//实际读取到了 len个,读取到的数据保存在bs中
System.out.print(newString(bs,0,len)); //运用了String的byte[]构造方法,取出第0个索引到len的长度之间的内容
}
3、 关闭流!
3.1 写操作
fos.close();
3.2 读操作
Fis.close();