JAVA基础学习(九)------IO框架
流的概念
- 概念:内存与存储设备之间传输数据的通道
- 水借助管道传输;数据借助流传输
流的分类
按方向分
- 输入流:将<存储设备>中的内容读入到<内存>中
- 输出流:将<内存>中的内容写入到<存储设备>中
按单位分
- 字节流:以字节为单位,可以读写所有数据
- 字符流:以字符为单位,只能读写文本数据
按功能分
- 节点流:具有实际传输数据的读写功能
- 过滤流:在节点流的基础之上增强功能
字节流
字节流的父类(抽象类)
InputStream
:字节输入流
- public int read()
- public int read(byte[] b){}
- public int read(byte[] b,int off,int len){}
OutputStream
:字节输出流
- public void write(int n){}
- public void write(byte[] b){}
- public void write(byte[] b,int off,int len){}
文件字节流
FileInputStream
-
从硬盘读
-
public int read(byte[] b) :从流中读取到多个字节,将读到的内容存入b数组,返回实际读到的字节数;如果达到文件尾部,则返回-1
package study.io.Demo01; import java.io.FileInputStream; public class Demo01 { public static void main(String[] args) throws Exception{ ///创建FileInputStream,并指定文件路径 FileInputStream fis = new FileInputStream("E:\\aaa.txt"); //读取文件 // fis.read(); 只能读一个字节,读全部要加循环 /* int data = 0; while((data = fis.read())!=-1){ System.out.println(data); } */ byte[] buf = new byte[1024]; int count = 0; while((count = fis.read(buf))!=-1){ System.out.println(new String(buf,0,count)); } //关闭 fis.close(); System.out.println("执行完毕"); } }
FileOutputStream
-
public void write(byte[] b):一次写多个字节,将b数组中所有字节,写入输入流
import java.io.FileOutputStream; public class Demo02 { public static void main(String[] args) throws Exception { //创建文件字节输出流对象 //这样写的话会覆盖原有文本内容 //FileOutputStream fos = new FileOutputStream("E:\\bbb.txt"); //如果不想覆盖原有文本内容 FileOutputStream fos = new FileOutputStream("E:\\bbb.txt",true); //写入文件 /*fos.write(97); fos.write('b'); fos.write('c'); */ String str = "helloworld"; fos.write(str.getBytes()); //关闭 fos.close(); System.out.println("执行完毕"); } }
字节流复制文件
- 字节流可以复制任意文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Demo03 {
//使用文件字节流实现文件的复制
public static void main(String[] args) throws Exception {
//创建流
//文件字节输入流
FileInputStream fis = new FileInputStream("E:\\1.jpg");
//文件字节输出流
FileOutputStream fos = new FileOutputStream("E:\\2.jpg");
//一边读一边写
byte[] buf = new byte[1024];
int count = 0;
while((count = fis.read(buf))!= -1){
fos.write(buf,0,count);
}
//关闭
fis.close();
fos.close();
System.out.println("复制完毕");
}
}
字节缓冲流
- 缓冲流:
BufferedInputStream
/BufferedOutputStream
缓冲流作用
- 提高IO效率,减少访问磁盘的次数
- 数据储存在缓冲区中,flush是将缓冲区的内容写入文件中,也可以直接close
用字节缓冲流读取文件
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class Demo04 {
public static void main(String[] args) throws Exception {
//创建BufferedInputStream
FileInputStream fis = new FileInputStream("E:\\aaa.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
//读取
int data = 0;
while((data = bis.read())!=-1){
System.out.print((char)data);
}
//关闭
//内部会关闭fis 所以只需要关闭bis
bis.close();
}
}
用字节缓冲流写入文件
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo05 {
public static void main(String[] args) throws IOException {
//创建字节输出缓冲流
FileOutputStream fos = new FileOutputStream("E:\\buffer.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
//写入文件
//换行符 \r或\n
for (int i = 0; i < 10