2020-04-30day35——IO流

day35——IO流

一、上节课回顾

1、线程池

理解为一个容器,装有预先创建好的线程对象,执行任务。执行后归还给线程池等待下次的任务。降低了程序的开销:频繁的创建和销毁线程对象。。

Executor:接口

ExecutorService:线程池接口

Executors:工厂类(专门负责创建线程池的)

    ExecutorService es = Executors.newFixedThreadPool(n);

    ExecutorService es = Executors.newCachedThreadPool();

创建任务:实现Runnable接口

submit();//将任务提交给线程池,由线程池负责分配线程对象来执行任务。。

2、File类的操作

描述文件和目录

    文件:带后缀的,存储数据。靠后缀区分。

        mp3:音频文件,mp4:视频文件,jpg/png/gif...图片文件,txt:文本文档,java文件:

    目录:用于存储文件和目录的。

路径:描述文件或文件夹位置

    绝对路径:C:\Ruby\pro\aa\abc.txt

    相对路径:aa

        程序来讲:永远相对于项目目录

            File("aa\abc.txt");

            在项目目录下:aa文件夹,里面abc.txt

构造方法:File类的对象:

File(String path);

File(String parent,String child);

File(File parent,String child);

常用方法:

    文件:

        boolean  createNewFile();//用于创建一个新文件

        long  length();//用于获取一个文件的大小,字节

    目录:文件夹

        boolean  mkdir();//用于创建一层文件夹

        boolean  mkdirs();//用于创建多层(不存在的但是必须有)

        String[] list();//获取目录中的子内容(文件,文件夹),只获取一层。如果作用文件上,返回null。

        File[] listFiles();//

        listFiles(FileFilter);//接口:文件过滤器:accept(File)-->boolean

    两者皆可:

        delete();//文件或文件夹(空文件夹才可以)

        deleteOnExit();


        exists();//判断file对象对应的文件文件夹,是否存在

        isFile()-->boolean,判断是否是文件

        isDirectory()-->boolean,判断是否是目录

        canRead()

        canWriter()


        getName();//文件或目录的名称

        getPath();//获取文件或目录的路径

        getAbsolutePath();//获取绝对路径,从根盘符开始描述

        getAbsoluteFile();//File

        getParent()-->String

        getParentFile()-->File


        toString()-->String,重写Object类的toString(),文件的路径名

递归遍历文件夹

3、IO初识

I/O流

I:Input

O:Outout

流:Stream,数据

IO流:流的就是数据。用于将数据从一个地方流到另一个地方。

    文件——>程序

    程序——>文件

    网络——>程序

    程序——>网络

流的分类:

    流向:

        输入流:数据从外边进入到程序中。。读取数据

        输出流:数据从程序中出去。。写出数据

    单位:

        字节流:以字节为单位。


        字符流:以字符为单位。


    数据的本质都是01码。8个01码——>byte字节。字节流是一个最根本的流。


    功能:

        节点流:直接接触数据源的流

        处理流:套在流上的流。又叫过滤流。



    File,String,Date,Thread。。。

    FileInputSteram,BufferedInputStream,BufferedOutputStream,ObjectInputStream,DataInputStream,ByteArrayInputStream。。。。



二、本节课内容

2.1、4大基类流

InputStream,字节输入流:抽象的

OutputStream:字节输出流:抽象的

Reader:字符输入流:抽象的

Writer:字符输出流:抽象的

2.2、IO流的操作步骤

step1:确定数据从哪到哪。文件信息。

step2:创建流:

    流向:输入,输出

    单位:字节,字符

    子类流:文件,内存。。。。

step3:操作流

    读取数据:输入

        read()

    写出数据:输出

        write()

step4:关闭流

    close()

2.3、FileInputStream

用于以字节为单位,读取文件中的数据,到程序中。

1、构造方法:

FileInputStream(Stringname)

通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名。

FileInputStream(Filefile)

通过打开与实际文件的连接创建一个FileInputStream,该文件由文件系统中的File对象file命名。

read()-->int

    每次读取一个字节。返回值就是读入的数据本身。如果读到文件的末尾了,-1。


read(byte[] bs)-->int

    每次读取多个字节,最多是bs数组的长度个。返回值是本次读取的实际的字节个数。如果到达末尾,-1.


int read(byte[] bs, int off, int len)

    从该输入流读取最多 len字节的数据为字节数组 。第一个参数表示要存储本地读取的数据的数组,第二个参数,表示从哪个下标开始存储,第三个参数是表示本次读取预计的读取数量。该方法的返回值是本次读取的实际数量。如果到达文件末尾,-1。




byte[] bs = new byte[3];//内存资源

数据源:250个字节

    数组:100个长度 

    1次:100,剩150 读取100个

    2次:100,剩50  读取100个

    3次:50,读完了  读取50个


int read(byte[] bs) -->读多个,最多数组长度,实际看返回值,数据在数组中,将读取到的数据存入到数组中,默认从头开始存储。

在操作IO流读取本地文件的数据,提升效率。

硬盘和内存

read()-->每次读取一个数据,

read(byte[] bs)--> 1000

每次读取一个字节:

使用字节数组作为缓冲区,读取数据:

2.4、FileOutputStream

构造方法:

FileOutputStream(String name) ,在文件开头写,擦除写

创建文件输出流以指定的名称写入文件。

FileOutputStream(String name, boolean append) ,在文件的末尾写数据,追加

创建文件输出流以指定的名称写入文件。

FileOutputStream(File file) ,在文件开头写,擦除写

创建文件输出流以写入由指定的 File对象表示的文件。

FileOutputStream(File file, boolean append) ,在文件的末尾写数据,追加

创建文件输出流以写入由指定的 File对象表示的文件。

写出去的数据,是清空写。将文件中原来的数据全部擦除,从头开始写数据。

voidwrite(intdata),将参数,这个字节数据写出去

voidwrite(byte[]b),将b.length个字节从指定的字节数组写入此文件输出流。

voidwrite(byte[]b,intoff,intlen) ,将len字节从位于偏移量off的指定字节数组写入此文件输出流。

String--->byte[]

String--->char[]

思考题:

1、向文件中写数据的时候,如果文件不存在,能写吗?如果文件所在的文件夹不存在,能写吗?

如果文件不存在,FileOutputStream在写出数据的时候,会先创建文件,再写出。

但是如果文件夹不存在,那么就报错。(java.io.FileNotFoundException: C:\Ruby\pro\aa\bb\abc.txt (系统找不到指定的路径。)

2、能不清空的写,屁股后面写,不擦除原来的数据?

FileOutputStream(path)-->开头写

FileOutputStream(path , append-->true)-->末尾写

你可能感兴趣的:(2020-04-30day35——IO流)