java笔记IO

java笔记IO 《1》

1.0.0基本概念及IO入门
对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能。程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件、数据库、其他程序、网络、IO设备等等。外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象、屏蔽外部的差异,从而实现更加便捷的编程。

IO:输入、输出(input/output),
输入input:可以让程序从外部系统获得(读取)数据,

读取硬盘上的文件内容到程序。例如:播放器打开一个视频文件、word打开一个doc文件。
读取网络上某个位置内容到程序。例如:浏览器中输入网址后,打开该网址对应的网页内容;下载网络上某个网址的文件。
读取数据库系统的数据到程序
读取某些硬件系统数据到程序。例如:车载电脑读取雷达扫描信息到程序;温控系统等。

输出output:程序输出数据给外部系统,从而可以操作外部系统(写,输出)

将数据写到硬盘中。例如:我们编辑完一个word文档后,将内容写到硬盘上进行保存。
将数据写到数据库系统中。例如:我们注册一个网站会员,实际就是后台程序向数据库中写入一条记录。
将数据写到某些硬件系统中。例如:导弹系统导航程序将新的路径输出到飞控子系统,飞控子系统根据数据修正飞行路径。

java。io 包为我们提供了相关的API,实现对所有外部系统的输入输出操作。

##1.1.1 数据源
数据源:data source,提供数据的原始媒介。
数据源分为:源设备,目标设备。
1.源设备:为程序提供数据,一般对应输入流。
2.目标设备:程序数据的目的地,一般应对输出流。

常见的数据员有:数据库,文件,其他程序,内存,网络连接,IO设备。
在这里插入图片描述
1.1.1数据源示意图

##1.1.2流的概念
(stream),是一个抽象,动态的概念,是一连串连续动态的数据集合。
按流向分:
输入流:我们通过流(stream)将数据源(source)中的数据(information)输送到程序(Program)中。
输入流是数据源到程序(以InputStream.Reader结尾的流)。
输出流我们通过流(stream)将程序(Proram)中的数据(information)输送到目的数据源(dest)中。
输出流是程序到目的地(以OutPutStream,Writer结尾的流)。
在这里插入图片描述
##输入/输出流的划分 是相对于程序而言的,并不是相对数据源
按处理的数据单元分为:
1、字节流:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流,eg:FileInputStream、FileOutputStream。
2、处理流:以字符为单位获取数据,命名上以Reader/Writer结尾的流一般是字符流,eg:FileReader、FileWriter。
按处理对象不同分:
1、节点流:可以直接从数据源或者目的地读写数据,eg:FileInputStream、FileReader、DataInputStream等。
2、处理流:不直接连接到数据源或者目的地,是“处理流的流”。通过对其他流的处理提高程序的性能,eg:BufferedInputStream、BufferedReader等。处理流也叫包装流。
节点流处于IO操作的第一线所有操作必须通过他们进行; 处理流可以对节点流进行包装,提高性能或提高程序的灵活性。
在这里插入图片描述

##1.1.3 第一个简单的IO流程序及深入理解
当程序需要读取数据源的数据时,就会通过IO流对象开启一个通向数据源的流,通过这个IO流对象的相关方法可以顺序读取数据源 中的数据。
【示例1.1.3】使用流读取文件内容(不规范写法,仅用于测试)

import java.io.*;
public class TestIO1 {
    public static void main(String[] args) {
        try {
            //创建输入流
            FileInputStream fis = new FileInputStream("d:/a.txt"); // 文件内容是:abc
            //一个字节一个字节的读取数据
            int s1 = fis.read(); // 打印输入字符a对应的ascii码值97
            int s2 = fis.read(); // 打印输入字符b对应的ascii码值98
            int s3 = fis.read(); // 打印输入字符c 对应的ascii码值99
            int s4 = fis.read(); // 由于文件内容已经读取完毕,返回-1
            System.out.println(s1);
            System.out.println(s2);
            System.out.println(s3);
            System.out.println(s4);
            // 流对象使用完,必须关闭!不然,总占用系统资源,最终会造成系统崩溃!
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行结果:

在这里插入图片描述
通过10.1需要注意的是:
1、在以上代码中读取的文件是已知的,所以可以使用固定次数的“ int s = fis.read(); ”语句读取内容,但在实际开发中,通常我们不知道文件的内容,因此我们在读取的时候需要配合while循环使用。
2、为了保证出现异常后流的正常关闭,通常要将流的关闭语句放到finally语句块中,并且要判断流是不是NULL.

###IO流的经典写法如下:
10.2 使用流读取文件内容(经典代码,一定要掌握)

import java.io.*;
public class TestIO2 {
    public static void main(String[] args) {
        FileInputStream fis = null;
        try {
        	//创建输入流
            fis = new FileInputStream("d:/a.txt"); // 内容是:abc
            StringBuilder sb = new StringBuilder();
            int temp = 0;
            //当temp等于-1时,表示已经到了文件结尾,停止读取
            while ((temp = fis.read()) != -1) {
                sb.append((char) temp);
            }
            System.out.println(sb);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                //这种写法,保证了即使遇到异常情况,也会关闭流对象。
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

执行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值