第十三章 io流

一、io流的概述与流的分流

概述

io是技术,用于处理设备间的数据传输。内存、硬盘、网络通讯。

数据的输入输出以“(stream)”的方式进行。

不同的数据要用不同的流,java.io包下就提供了不同的“流”类和接口,用以获取不同的数据,提供了标准的方法输入或输出数据。

io流原理

输入(读入)、输出(写出)都是基于内存角度

 

io流的分类

 

 

二、io流的体系结构

三、节点流

FileReader

 

1. read()的理解:返回读入的一个字符。如果达到文件末尾,返回-1
2. 异常的处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally处理
3. 读入的文件一定要存在,否则就会报FileNotFoundException。
//【写出的文件一定要存在吗?】
//垃圾回收机制只回收JVM堆内存里的对象空间。
   //对其他物理连接,比如数据库连接、【输入流输出流】、Socket连接无能为力,
   // 要手动关闭,不关闭会导致内存泄漏

 

 

FileReader读入数据的操作

//Reader的read三个方法:
//read()每次读一个
//read(char cbuf[])
//read(char cbuf[], int off, int len)放指定几个,用的比较少

FileReader用read(char[] cbuf)读入数据

FileWriter

 

FileWriter写出数据的操作

使用FileReader和FileWriter实现文本文件的复制

package com.atguigu.java;

import org.junit.Test;

import java.io.*;

/**
 *
 * 一、流的分类:
 * 1.操作数据单位:字节流、字符流
 * 2.数据的流向:输入流、输出流
 * 3.流的角色:节点流、处理流
 *
 * 二、流的体系结构
 * 抽象基类         节点流(或文件流)                               缓冲流(处理流的一种)//【给前面对应的四个流包装】//【缓冲流用于提高读写效率】
 * InputStream     FileInputStream   (read(byte[] buffer))        BufferedInputStream (read(byte[] buffer))  //【作用在FileInputStream上】
 * OutputStream    FileOutputStream  (write(byte[] buffer,0,len)  BufferedOutputStream (write(byte[] buffer,0,len) / flush() //【作用在FileOutputStream上】
 * Reader          FileReader (read(char[] cbuf))                 BufferedReader (read(char[] cbuf) / readLine())  //【作用在Reader上】
 * Writer          FileWriter (write(char[] cbuf,0,len)           BufferedWriter (write(char[] cbuf,0,len) / flush() //【作用在Writer上】
 *                  //【为什么是0,len?不然的话会输出123ld】
 * //【开发的时候用缓冲流,更快】
 *
 *
 * @author shkstart
 * @create 2019 上午 10:40
 */
public class FileReaderWriterTest {

    public static void main(String[] args) {
        File file = new File("hello.txt");//相较于当前工程
        System.out.println(file.getAbsolutePath());

        File file1 = new File("day09\\hello.txt");
        System.out.println(file1.getAbsolutePath());
    }

    /*
    将day09下的hello.txt文件内容读入程序中,并输出到控制台

    说明点:
    1. read()的理解:返回读入的一个字符。如果达到文件末尾,返回-1
    2. 异常的处理:为了【保证流资源一定可以执行关闭操作】。需要使用try-catch-finally处理
    3. 【读入的文件】一定要存在,否则就会报FileNotFoundException。
    //【写出的文件一定要存在吗?】

     */
    @Test
    public void testFileReader(){
        FileReader fr = null;
        try {
            //1.实例化File类的对象,指明要操作的文件
            File file = new File("hello.txt");//相较于当前Module
            //2.提供具体的流
            fr = new FileReader(file);//【造好管道】//【出文件找不到的异常FileNotFoundException】

            //3.数据的读入  //【对数据操作】
            //read():返回读入的一个字符。如果达到文件末尾,返回-1
            //【a --- 97,所以返回值是int(ascii码)】
            //【调一次,读一个】
            //方式一:
//        int data = fr.read();
//        while(data != -1){
//            System.out.print((char)data);//【强转】
//            data = fr.read();
//        }

         //【垃圾回收机制只回收JVM堆内存里的对象空间。
            //对其他物理连接,比如数据库连接、【输入流输出流】、Socket连接无能为力,
            // 要手动关闭,不关闭会导致内存泄漏】

        //【上面的操作:实现了读取硬盘中的文件,手机app联系人,打开,里面有联系人信息,
            // 联系人信息写在xml里或数据库里。
            // 一点开app,就会把xml文件输入到内存里(呈现给用户看)】


            //方式二:语法上针对于方式一的修改
            int data;
            while((data = fr.read()) != -1){//【read()了11次,最后一次返回-1】
                System.out.print((char)data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.流的关闭操作
//            try {
//                if(fr != null)
//                    fr.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
            //或
            if(fr != null){//【为什么加这个判断?如果new FileReader(file)出现异常,就不会ne
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值