黑马程序员--课堂笔记之一--day22

本文深入讲解Java中的IO流概念,包括如何使用InputStream和OutputStream进行基本的输入输出操作,以及如何利用装饰类提升代码复用性。同时介绍了字符流与字节流的区别,探讨了缓冲流的作用,展示了如何通过File类操作文件和目录。
---------------------- android培训java培训、期待与您交流! ----------------------

能不能将FileInputStream和FileOutputStream和二为一

readLine 内部有个储存一行的数组

装饰类可以重用

一个对象被装饰类装饰后,还可以被其它装饰装饰

Mind 记忆

总结每天的心得

 

读取一个键盘录入的数据,打印

键盘输入设备

Java对输入设备都有对应的对象。

 

InputStreamin = System.in

---PIC0001in就是输入流 按以前的方法读取

---PIC000232行,如果没有数据就进入阻塞状态,阻塞式方式

---PIC0003打了ab 回车,回车相当于命令结束

因为只读了一次

---PIC0004 输入了一个a,回车两个字节都被输入了

\r13 \n对应的是10

---PIC0005关闭了流再获取一次就不能读取了

---PIC0006其它流关闭之后,再new,还可以使用

这个系统流,系统中只有一个,如果关闭了就不能再调用,随着系统的消失而消失,随着系统的出现而出现,这个流不需要关闭

默认的输入设备和输出设备都不需要关闭

 

不断的读取键盘中输入的数据

---PIC0007

---pic0008-1,为45,1为49

为什么会无限循环的?? 因为没有关闭输入流,可以一直输入

 

课堂练习 获取用户键盘录入的数据

并将数据变成大写,输入的over,结束

 

---PIC0009因为要判断,要大写,所以强转成char

---PIC0010用break结束方法

---PIC0011要判断,不能录入/n

---PIC00012无法结束

---PIC0013 BULIDER清空是delete,0到length,集合轻松是clear

 

PIC0014想用bufferedReader中的readline来读取键盘输入的一行

 

---PIC0015InputStreamReader 字符流的子类对象,字节字符之间的桥梁   字节流通向字符流的桥梁,转换流

考虑重要因数之一编码,带编解码,字符流+编码表封装成的对象就是InputStreamReader对象

 

---PIC0016成功转换

 

字节流,读取中文要读两次

转成字符流,一个中文只读一次

 

---PIC0017读了两次,一个中文,

本来是负数,补零了就是很大的负数

 

---PIC0018强转,表里面查数据

 

OutputStreamWriter

字符流转向字节流

简体中文版windows gbk

 

----PIC0019

PutputStreamout = System.out

控制台得到的应该是字节数据

 

---PIC0020

---PIC0021写入到了缓冲区

 

---PIC0022PIC0023

 

OutputStreamWriter的子类FileWriter

 

---pic0024三合一

 

--pic0025

 

课堂练习 将键盘录入的数据写入到一个文件中

讲一个文本文件内容显示在控制台上

将一个文件中的内容复制到另一个文件中

 

 

---PIC0026 OUTPUTSTREAMWriter 操作的是字节流数据,创建fileOutputStream对象

 

---PIC0027需求2

 

流的操作规律:

之所以要弄清楚这个规律,是因为流对象太多,开发时不知道用哪个对象合适

 

数据汇

四个明确:

1,明确源和目的(汇)

     源:inputStream reader

     目的:Outputstream writer

2,明确数据时否是纯文件数据

     源:是纯文本:Reader

              否:InputStream

     目的:是纯文本Writer

              否 OutputStream

     到这里,就可以明确需求中具体要使用哪个体系。

3,明确具体的设备。

源设备:

       硬盘:File

       键盘:System.in

       内存:数组

       网络:Socket流

目的设备:

       硬盘:File

       控制台:System.out

       内存:数组

       网络:Socket流

4,是否需要其他额外功能。

     1,是否需要高效(缓冲区);

              是,就加上buffer

    

需求1:复制一个文本文件。

 

操作字符串,字符串也是源,只是不用去关联

 

需求2: 读取键盘录入信息,并写入到一个文件中。

---PIC0028 如果不转换 行不行??

 

需求3:将一个文本文件数据显示在控制台上

---PIC0030System.out 是printStram对象,多态

 

需求4:读取键盘录入的数据,显示在控制台上。

 

一次读一样字符流有,字节流没有

 

 

5,将一个中文字符串数据按照指定的编码表写入到一个文本文件中

 

涉及字符串,肯定涉及码表

 

---PIC00314字节,2个中文汉字

Java虚拟机用unicode,FileWriter操作String用到gbk

Unicode中a前面加零,所以在不同码表中的值是不同的

 

转换流,可以指定的charset 字符集,将要写入流中的字符编码

---PIC0032关联一个字节流

----PIC0033fileWriter其实就是封装了 OutputStreamWriter,因为OutputStream将字节流加上编码表

---PIC0034加不加gbk都一样

FileWriter:其实就是转换流指定了本机默认码表的体现。而且这个转换流的子类对象方便操作文本文件

操作文件的字节流+本机默认的编码表

这时按照默认码表来操作文件的便捷类

如果要明确具体的编码,必须用转换流

---PIC0035UTF-8码表

 

---PIC00362个字节 3个字节

繁体乱码一般是其它码表,用gbk查出来

---PIC0037用??,位置区域

编码表在哪??

 

什么时候使用转换流

1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁,提高对文本操作的便捷。

2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流。

FileINPUTsTREAM不需要flush

---PIC0038缓冲流是删选流的子类

 

流只能操作数据,对于文件夹,与属性之类的就不能操作

 

File

将文件或者文件夹封装成对象

方便对文件与文件夹的属性进行操作

将文件封装成对象,流可以操作

 

File在创建的时候必须明确文件或者文件夹的名称

 

---PIC0039可以将一个已存在的,或者不存在的文件或者目录封装成file对象

 

---PIC0040两个参数

---PIC0041将目录变成file,可以使用file的方法来操作

---PIC004226 如果放法unix中就不行

---PIC0043使用系统

---PIC00044用file自带的

静态数据看一看

1,获取。

     1.1获取文件名称

     1.2获取文件路径

     1.3获取文件大小。

     1.4获取文件修改时间

---PIC0035使用String接受

---PIC0046如果获取相对路径怎么样??

---PIC0047剩余容量

---PIC0048path里面写什么拿什么

如果写入的相对目录,parent就没有

 

正在运行中的文件,读取一个文件,文件一旦有改写就重新读数据

单独开一个线程,用于监控最后修改时间

2,创建与删除

         Boolean b = file.createNewFile()

和输出流不一样,如果文件不存在,则创建,如果文件存在,则不创建

---PIC0050

文件的创建和删除

 

---PIC0051创建目录

Dir.mkdir()创建单级目录

Dir.mkdirs()创建多层目录

---PIC0052封装的s文件夹,s被删除了

这个文件夹被流操作不能删除

 

3,判断

     F.EXISTS()

----PIC0053不是文件也不是目录

---PIC0054文件是未知情况先判断是否存在,在判断是文件还是目录

---PIC0055创建了txt文件夹

--PIC0056创建没有扩展名的文件

RenameTo()剪切 创建两个FILE对象

 

ListRoots

File[]files file.listRoots()

找出系统中最大空闲容量的盘

 

List()能获取当前目录下的文件及文件夹名称,包含隐藏

 

---PIC0057如果是一个文件,数组都不能创建成功异常

调用list方法的file对象中封装的必须是目录,

否则会发生空指针异常

如果访问的系统级目录,也会发生空指针异常

 

如果目录存在没有内容,会返回一个数组,长度为零。

 

---PIC0060String的 endWith

过滤器自定义

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看: http://edu.youkuaiyun.com/heima
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值