每一次写流,都要看一边io的api,不是叔不会,只是记不住....希望这是最后一次
File类 在我映像里我一直通过File来创建文件...作为面向对象的程序猿,我认为File代表文件,而还有个FilePath之类的生物代表File的路径
1.File与FilePath
稍微看下api我就知道我错了,but why?难道我面向错了?迷茫的时候上度娘(java File),第一篇看见如下栗子
次奥,你逗我,叔赖好知道后缀只是给人看的,程序是靠协议/解析来决定读取的生物种族的,比如:
这或是图片(至少博客园的上传不是通过后缀来判断的)这货是快捷方式这货是pdf
或许到这个时候你就跟叔一样,秒懂,来个简单的测试
原来如此,所以我们可以假设本身操作系统就没法再路径上区分文件,那File类与FilePath类就很难或者没有必要再进行区分了,一个Path既可以代表File也可以代表FilePath--
2.创建File与api
看到创建的时候,我又秒懂了,他们在构造函数中区分File+FilePath或者相对什么路径+其他路径(就是这么个意思),只有3点有意思
1.File提供的parent路径名字符串和child非常爽,下次使用的时候可以吓小伙伴们一跳,要知道,他们还是new File(parent+path),来实现的
2.File使用parent路径名字符串和child来构造,那么这个File的getParent() 是什么呢? 试试吧,简单的名字重复而已,没太大歧义,跟其他的一样
3.isAbsolute很有意思,根据判断方式比较独特,其他的类似,这些东西可以拿来虐菜
new File("F:").isAbsolute():false new File("F:\").isAbsolute():true
3.特殊字符
叔在window下创建文件的时候多次被提醒特殊字符不可作为文件名...不过通过程序的话,说不定就可以,反射什么的跟这个不是很像吗?(破坏封装)而且双引号,转意符的存在应该也不会再有歧义什么的了,但是我失败了,你都不用操心绕过判断什么的,直接不让创建....
首先假设可视化操作系统还是得靠命令执行,或许通过cmd创建几个文件基本上就确定这些特殊字符
1. :路径分割符...不是转义符,如果真能转移,我觉得就能加入特殊字符了
2./ :同上...传说中的容错写法
3.* ? :通配符,window右上角的搜索就可以用这个,无解
4.<>| :重定向输入和输出数据流的可以开头的操作符...叔一天毛都没干,光在cmd上玩这个,弄完感觉智商被压制了....
5.: :window下盘符关键字(前面说有意思就在这,window下绝对为毛路径不用:来决定?反正不咋用的方法,以后慢慢理解,至于linux,你懂得)
6." :允许空格命名的后遗症,换句话说,空格和上面的特殊服都可以阻止/改变命令,但我们需要空格不能时...
这些应该算操作系统的解析,或许搞个操作系统就可以完全无视这些逗比了