java学习笔记23

1、深度遍历,不仅遍历指定路径下的文件名,还遍历文件里的子文件名,即所有的文件都遍历一边,别遍历系统文件,会发生空指针异常,有些系统文件不让遍历。


2、递归的使用:直接或间接被重复调用

直接show() {show()}, 间接调用如下图所示

递归示意图:从左向右一直进栈,等最后进栈的函数满足条件结束后,从右向左一直出栈。



windows的删除机制是从里往外删,所以想删除一个文件夹,必须先进到最里面删除最内部的文件,这个思想就和递归调用的思想一样,先完成最里面的,再从里向外一层一层出来

syso(file)时,调用File类对象的toString方法,打印的是File对象的绝对路径,下图中s文件夹当时窗口打开,所以没有删掉。




3、list输出流



list()显示出集合里面的内容。

4、Properties集合的store方法,一般情况下Properties集合的键值对都存在内存中,如果想将其保存下来到硬盘的文件,就必须借助月store()方法


其中store(fos,"name+age")的name+age是注释信息。


5、加载硬盘文件里的键值对信息用load方法,加载的原理是把键值对的两端以等号分开,分别转换为字符串,赋给Properties集合的键和值。


下面模拟load方法,自己写一个myLoad()方法,需要注意的是文件里的注释信息只是方便阅读才有的,并不是有用的信息,所以不能也不用存入到Properties集合中去。


注意用一句line.startWith("#")来判断。集合用来修改操作数据,而流获取存储数据。流可以直接操作对象的。以前是new一个输出输出流去操作路径文件,现在直接将那个路径文件封装成File对象,有更多的方法可以使用了。也方便流直接操作。


注意在输出流时,new FileWriter(file),此时会创建一个新的同名文件覆盖以前的那个。所以写成下面的形式是不对的,因为信息都还没有读进去就已经被空白的同名文件重新覆盖了。


6、简单属性用Properties保存,复杂信息用xml标签的形式来解决

7、综合练习—文件清单列表





8、打印字节流—PrintStream


PrintStream是为数不多的永远不抛IOException的流对象。PrintStream的构造函数也可以操作文件file


9、打印字符流-PrintWriter

BufferedWriter才有newLine()换行的,PrintWiter里面没有newLine()方法,但是它有println()打印并换行的功能。




想保证数据原样性,直接用print就ok。


当构造函数里有true,而刚好用了下面3个方法时,由于会自动刷新,所以不再需要写玩一行手动添加一句flush。



如果输出到文件先自动刷新,那将文件封装到字节流中,因为只有字节流才可以刷新。


PrintWriter可以保持写出数据的原样性(因为转为字符串输出了),但是不能保证输出的大小,就像前面的97变成2个字节

10、SequenceInputStream序列流,就是把几个流按顺序合并在一起,一个一个一次输入,可以理解为将几个文件合并为1个文件。


由构造函数可知:当想合并3个及以上的流时,必须用枚举,而我们要把各种流放在容器中,能存储枚举的容器有Vector。这里自己做的固定长度缓冲器,因为要合并的还可以是多媒体文件,所以用的是字节流。



但是Vector的效率太低了,用ArrayList来代替,但ArrayList不支持获取枚举对象。只能自己获取,但是枚举的功能和迭代器相同重复

注意:内部类在访问内部类外的局部变量的时候,局部变量要加上final。

一般情况下没有找到,现在Collections工具类中找,实在找不到才考虑自己写 。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值