Java基础 字节流、字符流( 五 )

基本写出数据
写出字符: write(int b) 方法 , 每次可以写出一个字符数据 , 代码使用演示:
public class FWWrite {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileWriter fw = new FileWriter("fw.txt");// 写出数据fw.write(97); // 写出第1个字符fw.write('b'); // 写出第2个字符fw.write('C'); // 写出第3个字符fw.write(30000); // 写出第4个字符 , 中文编码表中30000对应一个汉字 。/*【注意】关闭资源时,与FileOutputStream不同 。如果不关闭,数据只是保存到缓冲区 , 并未保存到文件 。*/// fw.close();}}输出结果:abC田小贴士:
1.虽然参数为int类型四个字节 , 但是只会保留一个字符的信息写出 。
2.未调用close方法 , 数据只是保存到了缓冲区 , 并未写出到文件中 。
关闭和刷新
因为内置缓冲区的原因 , 如果不关闭输出流 , 无法写出字符到文件中 。但是关闭的流对象 , 是无法继续写出数据 的 。如果我们既想写出数据 , 又想继续使用流 , 就需要 flush 方法了 。
flush :刷新缓冲区 , 流对象可以继续使用 。
close :先刷新缓冲区 , 然后通知系统释放资源 。流对象不可以再被使用了 。
代码使用演示:
public class FWWrite {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileWriter fw = new FileWriter("fw.txt");// 写 出 数 据  ,  通 过 flush fw.write('刷'); // 写出第1个字符fw.flush();fw.write('新'); // 继续写出第2个字符 , 写出成功fw.flush();// 写 出 数 据  ,  通 过 close fw.write('关'); // 写出第1个字符fw.close();fw.write('闭'); // 继续写出第2个字符,【报错】java.io.IOException: Stream closed fw.close();}}小贴士:即便是?ush方法写出了数据 , 操作的最后还是要调用close方法 , 释放系统资源 。
写出其他数据

  1. 写出字符数组 : write(char[] cbuf) 和 write(char[] cbuf, int off, int len)  , 每次可以写出字符数 组中的数据 , 用法类似FileOutputStream , 代码使用演示:
public class FWWrite {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileWriter fw = new FileWriter("fw.txt");// 字符串转换为字节数组char[] chars = "黑马程序员".toCharArray();// 写出字符数组fw.write(chars); // 黑马程序员// 写出从索引2开始 , 2个字节 。索引2是'程' , 两个字节 , 也就是'程序' 。fw.write(b,2,2); // 程 序// 关闭资源fos.close();}}
  1. 写出字符串: write(String str) 和 write(String str, int off, int len)  , 每次可以写出字符串中的 数据 , 更为方便 , 代码使用演示:
public class FWWrite {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileWriter fw = new FileWriter("fw.txt");// 字符串String msg = "字节程序员";// 写出字符数组fw.write(msg); /字节程序员// 写出从索引2开始 , 2个字节 。索引2是'程' , 两个字节 , 也就是'程序' 。fw.write(msg,2,2); // 程 序// 关闭资源fos.close();}}3.续写和换行:操作类似于FileOutputStream 。
public class FWWrite {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象 , 可以续写数据FileWriter fw = new FileWriter("fw.txt" , true);// 写出字符串fw.write("字节");// 写出换行fw.write("");// 写出字符串fw.write("程序员");// 关闭资源fw.close();}}输出结果: 字节程序员小贴士:字符流 , 只能操作文本文件 , 不能操作图片 , 视频等非文本文件 。当我们单纯读或者写文本文件时 使用字符流 其他情况使用字节流
第四章 IO异常的处理JDK7前处理
之前的入门练习 , 我们一直把异常抛出 , 而实际开发中并不能这样处理 , 建议使用 try…catch…finally 代码 块 , 处理异常部分 , 代码使用演示:
public class HandleException1 {public static void main(String[] args) {// 声明变量FileWriter fw = null; try {//创建流对象fw = new FileWriter("fw.txt");// 写出数据fw.write("程序员"); //程序员} catch (IOException e) { e.printStackTrace();} finally { try {if (fw != null) {fw.close();}} catch (IOException e) { e.printStackTrace();}}}}


推荐阅读