----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
I O流(二)
(一)File类
1,我们知道IO流这个流对象只能操作数据,不能创建文件夹,也不能操作文件的属性(包括创建的时间、修改时间、是只读啊,还是只能写啊),对于类似的文件属性操作,IO包中给我们提供了一个特殊的对象来完成,该对象就是File类
2,特点:
(1) 用来将文件或者文件夹封装成对象
(2) 方便对文件与文件夹的属性信息进行操作。
(3) File对象可以作为参数传递给流的构造函数。
(二)File的常见使用
(1) File f1 = newFile("c:\\a.txt");//可以将一个已存在的,或者不存在的文件或者目录封装成file对象。
(2) 获取:我们可以利用对象调用相对应的方法获取相对应的参数(如:文件名、相对路径、绝对路径、剩余空间)
(3) lastModified():最后修改的时间(我们可以根据这个方法去监测一个文件是否被修改,一旦时间发生变化,那么需要重新读取数据并加载)
(4) 创建
boolean createNewFile():创建一个文件(如果没有则创建;如果有则不创建)
boolean dir.mkdir():创建一个文件夹(make directory)
boolean dir.mkdirs():创建多个文件夹
(5) 删除文件
boolean delete():删除一个文件
友情提示:
1,java的删除是不走回收站的,所以使用的时候需要注意,因为删除之后就无法进行恢复文件了
2,如果正在往一个文件中使用流输入数据的时候,此时,使用delete是删除不了文件的,因为删除使用的是windows方法
(6) 判断
boolean exists():判断文件是否存在
boolean isFile():判断是否是文件
boolean isDirectory():判断是否是目录
友情提示:一般情况下,要先判断文件是否存在,如果存在就在判断是文件还是目录(文件不存在则返回的结果全部都是false)。
(7) 重命名
boolean renameTo(filename):重命名
友情提示:将需要更改的文件名的文件进行修改文件的时候,如果不是在同一个盘符下修改,那么,就相当于将需要修改的文件复制、黏贴到指定的路径下并更改成了filename。
(8) 系统根目录
File[] listRoots():系统根目录(实际上就是打开我的电脑下的窗口相关的信息)
(9) 容量获取
long getFreeSpace():获取可用的空间大小(如:迅雷下载,会有一个默认的下载目录,一般情况下,它会选择的是可用空间比较大的目录)
long getTotalSpace():返回此抽象路径名指定的分区大小。
longgetUsableSpace():已用空间大小
(10) 获取目录内容
String[] list():获取当前目录下的文件以及文件夹的名称,包含隐藏文件。
友情提示:
(1)调用list方法的File对象中封装的必须是目录,否则会发生NullPointerException
(2)如果访问的系统级目录也会发生空指针异常
(3)如果目录存在但是没有内容,会返回一个数组,但是长度为0
(11)过滤器
String[] list(FilenameFilter filter):先获取当前目录下的所有的内容,然后,在根据后面的条件过滤掉不符合条件的内容。如:获取到文件名相同的文件。比方说:想要获取c盘下所有的 .java文件。
(三)递归的使用
1,递归:函数自身直接或者间接的调用到了自身。
2,什么时候使用递归?
一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关,这时可以用递归来解决问题。
3,案例:利用递归求出100的和
public class day01{
publicstatic void main(String[] args){
intsum=getSum(100);//注意一下递归的次数(次数过多导致栈溢出)
System.out.println("sum="+sum);
}
publicstatic int getSum(int i) {
if(i==1)
return1;
returni+getSum(i-1);
}
}
使用递归需要注意:
1, 递归一定明确条件。否则容易栈溢出。
2,注意一下递归的次数。
(四)Properties集合
1,特点:
(1)该集合中的键和值都是字符串类型。
(2)集合中的数据可以保存到流中,或者从流获取。
(3)通常该集合用于操作以键值对形式存在的配置文件
友情提示:
(1)配置文件:其实就是存储信息的文件,只不过这些文件的信息是用于配置某些应用程序的
(2)配置文件一般有:键值对,xml文件,数据库
2,将Properties集合中的字符串键值信息持久化存储到文件中。
void store(OutputStream out, String comments):字节流
void store(Writer writer, String comments):字符流,后面的String是对前面的参数用于描述
友情提示:
(1)store方法使用 ISO 8859-1字符编码写入该流,注释中不是 Latin-1 的字符针对其适
当的十六进制值
(2)持久化:就是将数据保存在硬盘上,保留的时间相对而言比较长。
3,load方法原理
Properties集合中的数据来自于一个文件。
FileInputStreamfis = new FileInputStream("info.txt");//需要使用到读取流,关联一个文件
prop.load(fis); //使用load方法,加载数据
prop.list(System.out);//输出到指定的输出流
友情提示:必须要保证该文件中的数据是键值对。
4,对已有的配置文件中的信息进行修改
思路:
(1)读取这个文件。
(2)并将这个文件中的键值数据存储到集合中。
(3)在通过集合对数据进行修改。
(4)在通过流将修改后的数据存储到文件中。
关键代码:FileReaderfr = new FileReader(file); //读取这个文件。
Propertiesprop = new Properties();//创建集合存储配置信息。
prop.load(fr);//将流中信息存储到集合中。
prop.setProperty("wangwu","16");//修改信息
FileWriterfw = new FileWriter(file);//将信息写入文件
友情提示:一创建输出流对象,这个文件重新建立一次,然后写入修改的数据(所有的
信息全部重新写入进去)
(五)打印流-- PrintStream:
1,特点:(1)提供了打印方法可以对多种数据类型值进行打印。并保持数据的表示形式。
(2)它不抛IOException.
2,构造函数,接收三种类型的值:
(1)字符串路径。
(2)File对象。
(3)字节输出流。
3,print方法:如果打印一个数字,那么先变成字符保持原样将数据打印到目的地。
write方法:如果打印一个数字,只写最低8位(高位全部舍弃)
(六)字符打印流--PrintWriter
1,构造函数参数:
(1)字符串路径。
(2)File对象。
(3)字节输出流。
(4)字符输出流。
友情提示:
(1)PrintWriter:字节、字符都能输出,该方法较为常用
(2)public PrintWriter(OutputStreamout,boolean autoFlush):autoFlush - boolean变量;如果为 true,则 println、printf或 format 方法将刷新输出缓冲区
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------