JavaSE进阶-day09
1.IO相关概念
概念: I: input,就是输入.也叫做"读",指的是"把数据从硬盘读取到内存". O: Output,就是输出.也叫做"写",指的是"把数据从内存写到硬盘". IO流: 指的就是对文件的"读写". 分类: 根据流向分: 输入流: 把数据读取到内存中的IO流,就称之为"输入流".所有的输入流都有read 输出流: 把数据从内存写出去的IO流,就称之为"输出流".所有的输出流都有write 根据单位分: 字节流: 读和写的时候,操作的都是字节. 字节流可以操作"任何文件". 字符流: 读和写的时候,操作的都是字符. 字符流只能操作"文本文件(可以用记事本正常打开的文件)".
2.字节流
2.1 字节输出流
构造: public FileOutputStream(String file); //指定要书写的位置,如果文件不存在就创建,如果文件存在就覆盖. public FileOutputStream(String file, boolean append); //append为true表示追加,append为false表示不追加(覆盖) 方法: public void write(int by); //写出一个字节 public void write(byte[] bys); //写出一个字节数组(把数组中的所有字节都写出去) public void write(byte[] bys,int off,int len); //写出字节数组的一部分(从off索引处开始,写len个) public void close(); //关闭流(释放资源)
2.2 字节输入流
构造: public FileInputStream(String file); //指定要读取的位置,如果文件不存在就报错 方法: public int read(); //读取一个字节,返回字节对应的编码. 如果读取不到,则返回-1 public int read(byte[] bys); //读取一个字节数组. 返回读取到的字节的个数. 如果读取不到,则返回-1 public void close(); //关闭流(释放资源)
2.3 拷贝文件
① 单字节拷贝
//1.定义字节输入流,指定要拷贝的文件 FileInputStream fis = new FileInputStream("MyTest\\6B.jpeg"); //2.定义字节输出流,指定要拷贝到的位置(也是一个文件) FileOutputStream fos = new FileOutputStream("MyTest\\a.jpeg"); //3.定义变量,用来存储每次拷贝的字节 int by; //4.输入流读取字节,判断是否读到末尾(读到-1则表示读到末尾) while((by = fis.read()) != -1){ //5.输出流写 fos.write(by); } //6.关闭输入流 fis.close(); //7.关闭输出流 fos.close();
② 字节数组拷贝
//1.定义字节输入流,指定要拷贝的文件 FileInputStream fis = new FileInputStream("MyTest\\TestDemo.java"); //2.定义字节输出流,指定要拷贝到的位置(也是一个文件) FileOutputStream fos = new FileOutputStream("MyTest\\Demo.java"); //3.定义数组,用来存储每次拷贝的字节 byte[] bys = new byte[1024 * 8]; //4.定义变量,用来存储每次拷贝到的字节的个数 int len; //5.输入流读取多个字节,存入数组中,判断是否读到末尾(读到-1则表示读到末尾) while((len = fis.read(bys)) != -1){ //6.输出流写 fos.write(bys,0,len); } //7.关闭输入流 fis.close(); //8.关闭输出流 fos.close();
3.IO标准语法
3.1 try-catch-finally
try{ //可能出现异常的代码 //如果出现异常,则立即跳转到catch中 //如果不出现异常,则正常执行 }catch(异常类型 e){ //如果try中出现异常,则立即执行catch中的代码 //如果try中不出现异常,则catch不执行 }finally{ //不论是否出现异常,最后都会执行finally }
3.2 IO标准语法(了解)
//1.创建输出流对象,并给予初始化值 FileOutputStream fos = null; try { //2.指定要操作的文件 fos = new FileOutputStream("MyTest\\a.txt"); //3.向文件中书写内容 fos.write(97); fos.write(98); } catch (IOException e) { e.printStackTrace(); } finally { //4.判断输出流是否创建成功(如果没有创建成功,则就没有必要关闭了) if (fos != null) { try { //5.释放资源 fos.close(); } catch (IOException e) { e.printStackTrace(); } } }
4.字节缓冲流
4.1 字节缓冲输入流
概述: 字节缓冲输入流 = 字节输入流 + 8K数组(缓冲区). 构造: public BufferedInputStream(InputStream is); //根据一个字节流,生成一个字节缓冲流 方法: public int read() //从该输入流读取一个字节的数据。 public int read(byte[] b) //从该输入流读取最多"b.length"个字节的数据到一个字节数组。 public void close() //关闭此文件输入流并释放与流相关联的任何系统资源。
4.2 字节缓冲输出流
概述: 字节缓冲输出流 = 字节输出流 + 8K数组(缓冲区). 构造: public BufferedOutputStream(OutputStream os); //根据一个字节流,生成一个字节缓冲流 方法: public void write(int b) //将指定的字节写入此文件输出流。 public void write(byte[] b, int off, int len) //将b数组中,从off位置开始的"len个字节"写入此文件输出流。 public void flush() //刷新流(强制清空缓冲区) public void close() //关闭流(关流之间会自动刷新缓冲区)