黑马程序员技术交流社区

标题: 分享-总结IO流的操作(File,properties、打印流和序列流) [打印本页]

作者: viliv715    时间: 2014-9-9 17:35
标题: 分享-总结IO流的操作(File,properties、打印流和序列流)

File类

1、用来将文件或者文件夹封装成对象
2、方便文件与文件夹的操作

3、File对象可以作为参数传递给流的构造函数


File类常见方法:
1、创建
boolean createNewFile():指定位置创建文件,如果文件存在,则不创建,返回false。参照method_1方法。
static File createTempFile(String prefix, String suffix):指定前缀名和后缀名创建临时文件。
boolean mkdir():创建文件夹,只能创建一级目录,不能创建多级目录。mkdirs方法可创建多级目录。参照method_1方法。
2、删除
boolean delete():删除指定文件,删除失败返回false。参照method_1方法。
void deleteOnExit():在程序退出是删除指定文件。常用于对临时文件的操作。
3、判断
boolean canExecute():
boolean exists():文件是否存在。参照method_2方法
在判断文件是否是文件或者目录时,必须先判断该文件对象是否存在。通过exists方法判断。
boolean isFile():是否是文件
boolean isDirectory():是否是目录
boolean isHidden():是否是隐藏文件
boolean isAbsolute():是否是绝对路径
4、获取。参考method_3方法
String getName():文件名称
String getPath():相对路径
String getParent():父目录
String getAbsolutePath():绝对路径
long lastModified():文件最后修改时间
long length():得到文件大小
static File[] listRoots():获得电脑有效盘符.参照listRoot方法
String[] list():获得指定目录中的文件和目录,包含隐藏文件。调用list方法的file对象必须是封装了一个目录,且目录存在。参照list方法
File[] listFiles():想对与上面的方法,该方法获得的是对象,可以调用对象的方法。建议使用该方法。

递归:

就是函数自身调用自身。

什么时候用递归呢?
当一个功能被重复使用,而每一次使用该功能时的参数不确定,都由上次的功能元素结果来确定。
简单说:功能内部又用到该功能,但是传递的参数值不确定。(每次功能参与运算的未知内容不确定)。
递归的注意事项:
1:一定要定义递归的条件。
2:递归的次数不要过多。容易出现 StackOverflowError 栈内存溢出错误。其实递归就是在栈内存中不断的加载同一个函数。

Properties:Hashtable的子类。

1:可以持久化存储数据。

2:键值都是字符串。

3:一般用于配置文件。

方法:

load():将流中的数据加载进集合。
原理:其实就是将读取流和指定文件相关联,并读取一行数据,因为数据是规则的key=value,所以获取一行后,通过 = 对该行数据进行切割,左边就是键,右边就是值,将键、值存储到properties集合中。
store():写入各个项后,刷新输出流。
list():将集合的键值数据列出到指定的目的地。

打印流

1、提供了更多的功能,比如打印方法。可以直接打印任意类型的数据。
2、它有一个自动刷新机制,创建该对象,指定参数,对于指定方法可以自动刷新。
3、它使用的本机默认的字符编码.
4、该流的print方法不抛出IOException。

字节打印流 PrintStream
构造函数可以接受的参数类型:
  1、File对象。File
  2、字符串路径。String
  3、字节输出流。OutputStream

注意:当目的是一个字节输出流时,如果使用的println方法,可以在printStream对象上加入一个true参数。这样对于println方法可以进行自动的刷新,而不是 等待缓冲区满了再刷新。最终print方法都将具体的数据转成字符串,而且都对IO异常进行了内部处理。
字符打印流 PrintWriter
构造函数可以接受的参数类型:
  1、File对象。File
  2、字符串路径。String
  3、字节输出流。OutputStream
4、字符输出流。Writer

开发时尽量使用PrintWriter。
SequenceInputStream:
序列流,作用就是将多个读取流合并成一个读取流。实现数据合并。
表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
这样做,可以更方便的操作多个读取流,其实这个序列流内部会有一个有序的集合容器,用于存储多个读取流对象。
该对象的构造函数参数是枚举,想要获取枚举,需要有Vector集合,但不高效。需用ArrayList,但ArrayList中没有枚举,只有自己去创建枚举对象。
但是方法怎么实现呢?因为枚举操作的是具体集合中的元素,所以无法具体实现,但是枚举和迭代器是功能一样的,所以,可以用迭代替代枚举。
合并原理:多个读取流对应一个输出流。

切割原理:一个读取流对应多个输出流。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2