IO概述:
I:Inuput输入(从硬盘读取文件到内存);
O: Output输出(将数据从内存写入硬盘);
流:一种写入数据的抽象方式,是有方向的
顶层父类:
输入流 输出流
字节流 InputStream OutputStream
字符流 Reader Writer
字节流
一切文本数据在存储时,都以二进制形式保存(以字节为单位),传输时一样如此,所以字节流可以传输任意文件数据。在操作流时,无论使用什么流对象,底层传输始终为二进制数据。
字节输出流
java.IO.OutputStream(是一个抽象类)
一个常用子类:FileOutputStream(文件字节输出流)
作用:把内存中的数据写入硬盘文件
子类构造法方法
1.FileOutputStream(String name)(目的地是一个文件路径)
2.FileOutputStream(File file) (目的地是一个文件)
参数:写入文件的目的地 构造方法的作用:
1.创建FileOutputStream对象
2.根据构造方法中传递的文件/文件路径,创建一个空文件
3.把对象指向创建好的文件
写入数据的原理: java程序->JVM->OS->OS调用写数据的方法->把数据写入文件
使用步骤:
1.创建一个FileOutputStream对象,构造方法传递数据写入目的地
2.调用FileOutputStream对象的write方法,把数据写入文件
3.释放资源(调用close方法) (流使用会占用一定的内存,使用完毕以后清空内存,提高效率)
// 文件存储原理和记事本打开文件
硬盘中存储的数据都是二进制,任意的文本编辑器在打开文件时会查询编码表,把字节转化为字符表示 ( 0-127:查询ASCII编码表 其他值:查询系统默认编码表 )
数据的续写
FileOutputStream类的构造方法
FileOutputStream(String pathname ,boolean append), FileOutputStream(File file ,boolean append)
参数boolean append 是追加开关
true: 创建对象不会创建文件,在源文件后追加写入数据
flase: 覆盖原文件
代码学习
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class DemoByte02 { public static void main(String[] args) throws IOException { File file = new File("Month"+File.separator+"src"+File.separator+ "LearnIO"+File.separator+"write1.txt"); //相对文件路径 FileOutputStream fos =new FileOutputStream(file); byte[] bt={97,98,99}; fos.write(bt); fos.flush(); fos.close(); //writestr(fos,"hellow,world"); //在源文件后追加写入数据 /*File file = new File("Month"+File.separator+"src"+File.separator+ "LearnIO"+File.separator+"write.txt"); FileOutputStream fos =new FileOutputStream(file,true); writestr(fos,"、 i'am java 多 多 关 照");*/ } //写入字符串的方法 public static void writestr(FileOutputStream fos,String str) throws IOException { byte[] bt = str.getBytes(); //将字符串转化为字节数组 fos.write(bt); fos.flush();; fos.close(); } }
字节输入流InputStream
其一个子类:FileInputStream(文件字节输入流)
作用:把硬盘数据文件读取到内存中
构造方法:
FileInputStream(String pathname);FileInputStream(File file)
参数:读取文件数据源
作用:
1.创建FileInputStream对象
2.把该对象指向构造方法要读取的文件
读取数据的原理 java程序->JVM->OS->OS读取数据的方法->读文件
使用步骤
1.创建一个FileInputStream对象,构造方法传递数据读取目的地
2.调用FileInputStream对象的read方法,读取数据
3.释放资源(调用close方法)
代码练习
public static void main(String[] args) throws IOException { File file = new File("Month"+File.separator+"src"+File.separator+ "LearnIO"+File.separator+"write1.txt"); FileInputStream fis =new FileInputStream(file); //read方法:int read();返回值为读到的数据,读完数据返回-1 //int read(byte[] byte);int read(byte[] byte,int off,int,len); //一次读取多个数据,返回值为读到的有效字节数,读完数据返回-1 byte[] bt=new byte[3]; int a= fis.read(bt);//会把读到的数据存入传入的字节数组 System.out.println(a); //System.out.println(fis.read()); System.out.println(new String(bt));//将读到的多个字节数据按字符串格式输出 }