day35IO2

一、上节课回顾

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(String name) 
通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
FileInputStream(File file) 
通过打开与实际文件的连接创建一个 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对象表示的文件。 

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

void write(int data),将参数,这个字节数据写出去
void write(byte[] b),将 b.length个字节从指定的字节数组写入此文件输出流。 
void write(byte[] b, int off, int len) ,将 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)-->末尾写

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341