暑期自学 Day 04 | File 类 和 IO 流(四)
IO 异常的处理 (try-catch-finally)
代码示例
FileWriter fw = null; // 提高 fw 作用域,使 finally 能够使用 fw. try { fw = new FileWriter("d:\\testfolder\\a.txt"); fw.write('a'); } catch (IOException e) { e.printStackTrace(); } finally { // 如果传递的路径不存在,会抛出空指针异常,所以需要先行判断 fw 是否为 null if (fw != null) { try { fw.close(); } catch (IOException) { e.printStackTrace(); } } }
JDK7 开始的新特性
- try 后面可以加个括号,括号中定义流对象。这样不用写 finally, 流对象使用完后自动释放。
try (FileWriter fw = new FileWriter("d:\\testfolder\\a.txt")) { fw.write('a'); } catch (IOException e) { e.printStackTrace(); }
- try 后面可以加个括号,括号中定义流对象。这样不用写 finally, 流对象使用完后自动释放。
JDK9 的新特性
try 前面定义流对象,try 后面的 () 中可以直接引入流对象名称
由于在 try 前面新建了流对象,我们也需要对流对象中传递的路径进行异常处理: throws FileNotFoundException
FileWriter fw = new FileWriter("d:\\testfolder\\a.txt"); FileReader fr = new FileWriter("d:\\testfolder\\b.txt"); try (fw; fr) { fw.write('a'); } catch (IOException e) { e.printStackTrace(); }
属性集 Propertites
- 持久属性集,可以保存在流中或在流中加载,是继承了 HashTable 的集合
- 唯一和IO流相结合的集合
- 双列集合,因为继承了 HashTable。key, value 都是字符串类型的
- 特有操作字符串的方法:
储存获取方法:Object setProperty(String key, String value)
调用 HashTable 方法 putString getProperty(String key)
用指定键在属性列表中搜索属性,相当于 Map.get()Set<String> stringPropertyNames()
返回此属性列表中的键集,相当于 keySet()方法
public void store(OutputStream out,String comments)
或public void store(Writer w,String comments)
将集合中的临时数据,持久化写入到硬盘中存储public void load(InputStream in)
或public void load(Reader r)
将文件中保存的键值对,取出到集合中使用
缓冲流
- 给流对象创建一个缓冲数组,通过缓冲区读写,减少系统IO次数,从而提高流对象读取效率。
字节缓冲输出输入流
public BufferedOutputStream(OutputStream out)
,public BufferedInputStream(InputStream in)
使用步骤
- 创建流对象,构造方法中传递文件路径
- 创建相应的缓冲流对象,构造方法中传递流对象
- 使用缓冲流对象中的 write() 方法,把数据写入到内部缓冲区
- 使用缓冲流对象中的 flush() 方法,吧缓冲区数据刷新到文件中
- 释放资源(如果选择释放资源,flush() 方法可以省略)
注意:
- 缓冲流构造方法中可以写第二个参数,指定缓冲流内部缓冲区大小。
- 缓冲流写入时如果不释放或者刷新,缓冲区数据无法写入指定文件。
- 缓冲流 write(), read() 方法和之前IO流中使用方法一样。如 read() 可以读取字节数组等等……
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: