File类
用于将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作 File对象可以作为参数传递给流的构造函数
File类的出现弥补(mibu)流对象的不足
流对象只能操作文件的数据
但是不能操作文件的属性,以及文件夹。
创建File对象
1. File f = new File(“a.txt”);
//将a.txt封装成File对象。
a.txt有可能不存在,故File可以将已有或者未有的文件和文件夹封装成对象
2. File f = new File(“D:\\demo”,”a.txt”);
将D盘demo文件夹中的a.txt文件封装成File对象
3. File d = new File(“D:\\demo”);
File f = new File(d,“a.txt”);
类似第二种方法,现将文件路径封装成File对象后,再将a.txt与其封装在一个对象中。
\\符号Linux下不识别,不能很好的跨平台,这时可使用”separator”
File f = new File(“D:\\demo”,”a.txt”)
可改写成: File f = new File(“D:”+File.separator+”demo”+File.separator+”a.txt”);
File类常见方法:
创建:
在指定位置创建文件,如果该文件已经存在,则不创建,返回false。和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
createNewFile()是在硬盘上创建文件,即调用了底层资源,这就可能发生异常。
创建文件夹:2中方法能创建多级文件夹
1. 删除
1中的delete(),若一无待删除文件,返回false。
若程序有错误,有的 时候不能执行到delete,如果一定要删除可以用finally,但是被删文件正被使用,也删除不了。
这时可使用2中deleteOnExit()方法。就是在虚拟机结束前,使用的文件也被释放,然后删除。此方法一般用于处理临时文件
1. 判断
可以判断封装的对象是文件还是文件夹[不要单纯的看名字,也有a.txt名的文件夹]
记住在判断是否是文件或目的时,须先通过exists判断是否存在。[因若不存在会返回FALSE]
获取
getAbsolutePath()返回绝对路径 返回类型String
getAbsoluteFile()也返回绝对路径,并把该路径封装成对象 返回类型File
二者可以转换。String可以new一下变成File。File也可以toString
getPath()返回的结果和封装时的路径一致。若封装为相对路径,返回就相对,若绝对,返回绝对。而getAbsolutePath()就是返回绝对路径
注意:File指定的文件可以不再硬盘上。只要指定路径。就能getpath。类似于。
getParent()
该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。
如果相对路径中有上一层目录那么该目录就是返回结果
File f = new File(“a.txt”); f.getParent(); null
File f = new File(“d:\\demo\\a.txt”); f.getParent(); d:\demo[显示是为一个”\”]
File f = new File(“demo\\a.txt”); f.getParent(); demo
lastModified()表示文件最后一次被修改过的时间
length()返回指定文件的长度 二者返回都为long类型
较特殊:renameTo() 就是原文件改名之后,被“新名字”的文件替换,内容不变。从而达到从命名的作用。
若把c盘中a.txt rename到d盘b.txt。则会自动把c盘的删除掉
modify:被修改,修改[mad fai]
File对象功能—文件列表
File[] a = File.listRoots(); listRoots()方法。返回值问File类型的数组
list()方法:打印指定目录下所有文件及文件夹的名称(包含隐藏文件)
调用list方法的File封装的为目录。若是文件,返回值为空。
File f = new File(“c:\\windows”);
String[] names = f.list();
for(String name : names)
{
System.out.println(name);
}
list()的过滤
list()与listFiles()区别:list()返回值类型为String的数组,只是文件的名字
listFile()返回值类型为File的数组,文件的属性信息全部在其中,可以通过getName,length等方法获得信息。
列出目录下所有内容-递归
类似windows中的的高级搜索,查找包含子目录
递归法就二进制
本质递归无他。就再创建一个toBin方法,然后该方法与本方法一样就直接使用。
递归要注意
1限定条件:不能无限递归下去
2注意递归次数。每递归一次就创建一次方法,如果次数足够多,会内存溢出
层次清晰的list()
09删除”带内容的目录”
删除原理:
在window中,删除目录从里面往外删除的。
既然是从里往外删除。就需要用到递归。
注意:若是返回FALSE一般是把一个文件重复删除两次
java删除不走回收站
C盘删不了,1,隐藏目录java无法访问,就不能删除。返回File[]数据为空,就会空指针异常,还有一些文件没有后缀名,与目录相互混淆。
故遍历的时在判断isDirectory前,要判断是否isHidden().文件可以删除,文件夹不能,只有空目录才能删除
创建java文件列表
把java文件及对应路径封装到一个文件中,易于查找
(类似自己创建一个播放列表。下回听歌直接听列表里的不用再上总文件中查找)
思路:
1,对指定的目录进行递归。
2,获取递归过程所以的java文件的路径。
3,将这些路径存储到集合中。
4,将集合中的数据写入到一个文件中。
Properties是hashtable的子类。
也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。
是集合和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。
(打开软件,在内存开辟空间,可以自己调软件配置,字体颜色,大小。软件一关,内存释放,但是再次打开,配置不变)
把配置信息进行持久化存储,每次打开软件,都会加载配置文件
那么在加载数据时,需要数据有固定格式:键=值
Day20-13:
//演示,如何将流中的数据存储到集合中。
//想要将info.txt中键值数据存到集合中进行操作。
思路:
1,用一个流和info.txt文件关联。
2,读取一行数据,将该行数据用"="进行切割。
3,等号左边作为键,右边作为值。存入到Properties集合中即可。
如果使用次数已到,那么给出注册提示。
很容易想到的是:计数器。
可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。
可是随着该应用程序的退出,该计数器也在内存中消失了。
下一次在启动该程序,又重新开始从0计数。
这样不是我们想要的。
程序即使结束,该计数器的值也存在。
下次程序启动在会先加载该计数器的值并加1后在重新存储起来。
所以要建立一个配置文件。用于记录该软件的使用次数。
该配置文件使用键值对的形式。
这样便于阅读数据,并操作数据。
键值对数据是map集合。
数据是以文件形式存储,使用io技术。
那么map+io -->properties.
配置文件可以实现应用程序数据的共享
Day20-14:Properties练习
用于记录应用程序运行次数。
如果使用次数已到,那么给出注册提示。(付费软件前期的免费使用次数)
配置文件:要不是Properties形式要不就是XML形式
dom4j==dom for java
牛人为xml开发的工具
PrintWriter(打印流)
一对:PrintWriter字符打印流 PrintStream字节打印流
打印流:该流提供打印方法,可以将各种数据类型的数据都原样打印。
合并流
Sequence:
Vector中有Enumeration.Enumeration中有方法elements()
17切割文件
一般文件太大,只能添加多个附件。日常用WinRAR分卷压缩,java也有方法切割文件
原理:一个源,多个目的输出。系统没有提供的方法