黑马程序员--IO流(二)

----------------------- 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():删除一个文件

友情提示:

1java的删除是不走回收站的,所以使用的时候需要注意,因为删除之后就无法进行恢复文件了

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是对前面的参数用于描述

友情提示:

1store方法使用 ISO 8859-1字符编码写入该流,注释中不是 Latin-1 的字符针对其适

          当的十六进制值

2)持久化:就是将数据保存在硬盘上,保留的时间相对而言比较长。

3load方法原理

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)字符串路径。

              2File对象。

              3)字节输出流。

3print方法:如果打印一个数字,那么先变成字符保持原样将数据打印到目的地。

      write方法:如果打印一个数字,只写最低8位(高位全部舍弃)

(六)字符打印流--PrintWriter

1,构造函数参数:

1)字符串路径。

2File对象。

3)字节输出流。

4)字符输出流。

友情提示

1PrintWriter:字节、字符都能输出,该方法较为常用

2public PrintWriter(OutputStreamout,boolean autoFlush)autoFlush - boolean变量;如果为 true,则 printlnprintf format 方法将刷新输出缓冲区

 

----------------------- android培训java培训java学习型技术博客、期待与您交流! ----------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值