一、IO流概述
1、IO流:输入输出流(Input/Output)
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象,即数据在设备间的传输流,
流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作
大概来说:
输入流:把数据从文件读到(输入)程序中
输出流:从程序当中把一个数据(输出)写入文件中
2、流的分类
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流
(1)字节流
a.字节输出流
OutputStream类的定义:
public abstract class OutputStream extends Object implements Closeable,Flushable
此抽象类是表示输出字节流的所有类的超类,输出流接受输出字节并将这些字节发动到inputStream类的某个接受器
b.字节输入流
InputStream类的定义:
public abstract class InputStream implements Closeable
这个抽象类是所有基于字节的输入流的超类,抽象了Java的字节输入模型。在这个类中定义了一些基本的方法。
FileinputStream 是它的子类 从文件系统中的某个文件中获得输入字节
举例:
package IODemo; import java.io.*; /** * 字节输出输入流 * 输出流:超类OutputStream,对文件输出流的操作的子类是FileOutputStream * 输入流:超类InputStream,对文件输入流的操作子类是FileInputStream */ public class ByteStreaDemo { private static void in(){ //1、确定目标文件 File file = new File("D:\test\test.txt"); try { //2、构建一个输入流对象 InputStream in = new FileInputStream(file); // 读取的数据是一个字节一个字节的,所以要用一个字节数组来收 // 相当于一个容器来装文件里面的东西 1024大小表示容器能装1024个字节 1024字节=1kb byte[] bytes = new byte[1024]; int len = -1; //表示已经读取了多少个字节,如果是 -1,表示已经读取到文件的末尾 //字符串拼接 StringBuilder buf = new StringBuilder(); //把数据读入到数组中,并且返回读取的字节数,当不等于-1时表示已经读取到了数据,等于-1时表示已经读完 while ((len = in.read(bytes)) !=-1){ buf.append(new String(bytes)); // 根据读取到的字节数组,转换为字符串内容,并且进行拼接,添加到StringBuilder中 } System.out.println(buf); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static void out(){ //1、确定目标文件 File file = new File("D:\test\test.txt"); try { // 2、构建一个文件输出流的对象 OutputStream out = new FileOutputStream(file,true); // 如果加上true的话表示的是在原文件内容上追加内容,如果不加ture默认是重写 // 3、内容 String info = "大家好,我是落魄书生! "; //window 下 表示换行 //4、out对象写入文件中 要字节类型 字符串转字节类型 out.write(info.getBytes()); System.out.println("写入成功!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { out(); in(); } }