java学习笔记22

23、System.in是一个InputStream类型的对象,System静态属性,就相当于一个输入管子对准了输入设备:键盘之类的。window中回车换行是2个字节:\r\n.'\r'是13,‘\n’是10

在System.in中输入遇到换车换行就结束了。从系统获取的流对象in或者out不用关,in或out只能打开一次,close关掉后就不能在程序中打开了。而且in或out会随着系统的结束而自动结束,所以就不用手动close来结束。InputStream.read读到的数据都是int的,毕竟在计算机内部都是0101的数据存储的。例如读到a显示的就是97,敲入回车,相当于输入\r\n。同时注意read是阻塞式方法,也即你要是不输入,它就一直等着不往下执行。


24、练习:将从键盘数组的字符串在控制台上以大写字母的形式显示,当(单独)输入over时结束。控制台中绿色的是输入,黑色的是打印的输出。


将容器由StringBuilder换成字符数组再一次实现,用StringBuilder还是好一些,毕竟是可变长度的。


25、字节流与字符流的转换

字节类转为字符流发生在输入时用的是一个转换管子InputStreamReader,他是FileReader的父类,也即FileReader实现了字节转字符的输入功能,FileWriter也是同样的道理。三个管子相互套,BufferedReader上面套一个InputStreamReader(字节转字符管子)它上面在套一个System.in字节管子


26、实现下图的3种需求其实只需改一下输入或输出的目标地址即可


注意:InputStream,OutputStream(字节流中的父类)和Reader,Writer(字符流中的父类),他们都是抽象类,具体在使用的过程中,都是针对不同的情况运用它们的子类

字节流常用的子类有FileInputStream(读取字节文件),字符流常用的子类有FileReader,BufferedReader,InputStreamReader(字节转字符的流)。下图中说明两句效果一样,因为都是操作的文本文件,不像上面的多媒体文件,有所区别。


27、流操作的基本规律


28、控制台上输出或显示的字符都可以理解为文本文件,在内存中操作的时候都可以用Reader或者Writer。但是多媒体文件就必须用InputStream,OutputStream的子类去操作了。同时注意OutputStream是PrintStream的父类,System.out就是PrintStream类,也就是说OutputStream out = System.out就是父类引用指向子类对象。

再次强调InputStream 是操作字节,一次读一个字节(也能操作中文),Reader是操作字符,一次2字节,碰见中文(2字节)更方便,所以文本基本考虑用Reader。

常见需求如下:


30、字节流加上本地码表+字节转字符流就等价于字符流(默认使用本地码表),因为字节要想转为字符是需要对应的码表的。


虽然都能操作字符,但是FileWriter只能用本地码表,上面的可以指定别的码表。


FileWriter只能操作文本文件,但转换流还可以操作别的多媒体。

UTF-8码表中使用3个字节来表示中文的,毕竟把全球的文字都收集进来了


下图中”你好“两个字是以UTF-8的形式来存的,在硬盘上就是6个字节,但是在读取的时候用的是FileReader也就是用的GBK的码表标准来读的(两个字节算一个字符,对应查表),这样就读出3个字符,由于第5,6个字节在GBK码表中找不到对应的字符,所以查出的字符并不认识。读出的并不是“你好”。


想读出“你好”,必须用UTF-8的格式来读

   

同样道理,GBK文件用UTF-8码表去读,也不能正确解读。


31、把文件封装成对象后不仅能操作它内部的数据,也能操作别的属性等等。


31、File.separator是文件分隔符,之前讲过Line.separator是行分隔符,Linux下是/,window下是\\


:和;也是分隔符,;用在设置环境变量的路径哪里,不同的路径之间是;

相对路径就是在哪里所属于哪里,某一个文件下a.txt,(相对嘛,C盘里可以有,D盘也可以有,不唯一)

绝对路径就是直接写明哪个盘,哪个文件下G:\毕向东java\JavaSE基础视频22\IO流(文件唯一)


lastModify()方法返回最后的修改时间,可以监视修改时间获得新文件。

注意你可以通过new File("file.txt")把一个文件打包成对象,file.txt相当于就是这个文件的名字对象,这个文件可以不存在,也可以存在。不存在可以通过createNewFile()来创建,但是存在就不会创建。而输出流不管你存不存在,都是直接在搞一个新的,重名的就删去旧的重建一个新的。createNewFile()成功创建文件时返回真。


下面将如何创建文件夹

File dir = new File("abc");

boolean b =dir.mkdir();

删除文件和删除文件夹一样都是delete,注意windows文件夹中有文件时不能删除,只能先删掉里面的文件才可以删掉文件夹,从里往外删。这里的删除不经回收站的。

创建多级目录请用mkdirs(),下图中dir.delete()只能删掉被封装成对象的s文件夹。也就是说那么长的路径,其实最里面的s文件夹被封装成了File对象。

34、 


35、renameTo(File xxx)如果传进来File 对象的和自身File对象是同一路径的就相当于重命名了,不同路径下的就相当于剪切到传进来的File路径处。


1语句相当于把01.avi文件重命名,2语句相当于将01.avi剪切到d盘

36、getFreeSpace()得到当前盘符的可用剩余空间,和getUsableSpqce()返回的结果相同,都是一个意思。



高级for,其中的file就相当于是变量i,写法固定。listRoots()返回各个盘符构成的字符串数组。



38、过滤器FilterName原理:过滤器是个接口,每次指定确定的规则实现这个接口 

首先获得的是list全部文件,最后把以java结尾的文件存到集合容器中并返回。


下面2个图是自定义过滤器的写法。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值