I/O框架
一、流的概念
概念
内存与储存设备之间传输数据的通道
分类
按方向
- 输入流:将<存储设备>中的内容读入到<内存>中
- 输出流:将<内存>中的内容写入到<存储设备>中
按单位
- 字节流:以字节为单位,可以读写所有数据
- 字符流:以字符为单位,只能读写文本数据
按功能
- 节点流:具有实际传输数据的读写功能
- 过滤流:在节点流的基础之上增强功能
二、字节流
字节流的父类(抽象类)
InputStream
此抽象类是表示字节输入流的所有类的超类
OutputStream
此抽象类是表示输出字节流的所有类的超类
文件字节流
- FileInputStream
public int read(byte[] b) 从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
package demo1;
import java.io.File;
import java.io.FileInputStream;
public class FileLearn {
public static void main(String[]args)throws Exception{
FileInputStream fileInputStream=new FileInputStream("d:\\aaa.txt");
int data=0;
byte[] bytes=new byte[3];
int count=fileInputStream.read(bytes);
System.out.println(count);
System.out.println(new String(bytes));
while((data=fileInputStream.read())!=-1){
System.out.println((char)data);
}
fileInputStream.close();
}
}
3
asd
a
s
d
- FileOutputStream
public void write(byte[] b) 一次写多个字节,将b数组中所有字节,写入输出流
public class OutPutLearn {
public static void main(String[] args) throws Exception{
FileOutputStream fileOutputStream=new FileOutputStream("D:\\aaae.txt",true);
fileOutputStream.write(97);
fileOutputStream.write('b');
fileOutputStream.write('c');
String str="helloworld";
fileOutputStream.write(str.getBytes());
fileOutputStream.close();
}
}
文件复制
package demo1;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Copy {
public static void main(String[] args) throws Exception{
FileInputStream fileInputStream=new FileInputStream("d:\\aaa.txt");
FileOutputStream fileOutputStream=new FileOutputStream("d:\\sdsd.txt");
byte[] buf=new byte[1024];
int count=0;
while((count=fileInputStream.read(buf))!=-1){
fileOutputStream.write(buf,0,count);
}
fileInputStream.close();
fileOutputStream.close();
}
}
三、字节缓冲流
BufferedInputStream
为另一个输入流增添一些功能,即缓冲输入以及支持mark和reset方法的能力。
private static int DEFAULT_BUFFER_SIZE = 8192; 缓冲求大小
即内容小于8k会存与缓存区,可用flush()写入硬盘
package demo1;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class BufferedInput {
public static void main(String[] args) throws Exception {
FileOutputStream fileInputStream=new FileOutputStream("D:\\aaa.txt");
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(fileInputStream);
for(int i=0;i<10;i++