面向字符的输出流都是类 Writer 的子类,其类层次结构如图 10-5 所示。


图10-5 Writer的类层次结构图

表 10-3 列出了 Writer 的主要子类及说明。

表 10-3 Writer 的主要子类
类名 功能说明
CharArrayWriter 写到字符数组的输出流
BufferedWriter 缓冲输出字符流
PipedWriter 输出管道
OutputStreamWriter 转换字符到字节的输出流
FilterWriter 过滤输出流
StringWriter 输出到字符串的输出流
PrintWriter 包含 print()和 println()的输出流
FileWriter 输出到文件的输出流

Writer 所提供的方法如表 10-4 所示。

表 10-4 Writer 的常用方法
方法 功能描述
void close() 关闭输出流
void flush() 将缓冲区中的数据写到文件中
void writer(int c) 将单一字符 c 输出到流中
void writer(String str) 将字符串 str 输出到流中
void writer(char[] ch) 将字符数组 ch 输出到流
void writer(char[] ch, int offset, int length) 将一个数组内自 offset 起到 length 长的字符输出到流

使用 FileWriter 类写入文件

FileWriter 类是 Writer 子类 OutputStreamWriter 类的子类,因此 FileWriter 类既可以使用 Writer类的方法也可以使用 OutputStreamWriter 类的方法来创建对象。

在使用 FileWriter 类写入文件时,必须先调用 FileWriter()构造方法创建 FileWriter 类的对象,再调用 writer()方法。FileWriter 构造方法的格式为:
    public FileWriter(String name);  //根据文件名创建一个可写入的输出流对象
    public FileWriter(String name,Boolean a);  //a 为真,数据将追加在文件后面

【例 10-3】利用 FileWriter 类将 ASCⅡ字符写入到文件中

 1 import java.io.*;
 2 class ep10_3{
 3     public static void main(String args[]){
 4         try{
 5             FileWriter a=new FileWriter("ep10_3.txt");
 6             for(int i=32;i<126;i++){
 7                 a.write(i);
 8             }
 9             a.close();
10         }
11         catch(IOException e){}
12     }
13 }

运行后程序后,打开 ep10_3.txt 文件,显示内容为:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}

使用 BufferedWriter 类写入文件

BufferedWriter 类是用来将数据写入到缓冲区。使用时必须创建 FileWriter 类对象,再以该对象为参数创建 BufferedWriter 类的对象,最后需要用 flush()方法将缓冲区清空。BufferedWriter类有两个构造方法,其格式为:
    public BufferedWriter(Writer out);  //创建缓冲区字符输出流
    public BufferedWriter(Writer out,int size);  //创建输出流并设置缓冲区大小

【例 10-4】利用 BufferedWriter 类进行文件复制

 1 import java.io.*;
 2 class ep10_4{
 3     public static void main(String args[]){
 4         String str=new String();
 5         try{
 6             BufferedReader in=new
 7             BufferedReader(new FileReader("ep10_4_a.txt"));
 8             BufferedWriter out=new
 9             BufferedWriter(new FileWriter("ep10_4_b.txt"));
10             while((str=in.readLine())!=null){
11                 System.out.println(str);
12                 out.write(str);  //将读取到的 1 行数据写入输出流
13                 out.newLine();  //写入换行符
14             }
15             out.flush();
16             in.close();
17             out.close();
18         }
19         catch(IOException e){
20             System.out.println("出现错误"+e);
21         }
22     }
23 }

需要注意的是,调用 out 对象的 write()方法写入数据时,不会写入回车,因此需要使用newLine()方法在每行数据后加入回车,以保证目标文件与源文件相一致。

系列文章:
Java知多少(上)

转载于:https://www.cnblogs.com/Coda/p/4516250.html

Java知多少(68)面向字符的输出流相关推荐

  1. 八. 输入输出(IO)操作3.面向字符的输出流

    面向字符的输出流都是类 Writer 的子类,其类层次结构如图 10-5 所示. 图10-5 Writer的类层次结构图 表 10-3 列出了 Writer 的主要子类及说明. 表 10-3 Writ ...

  2. 面向字符的输入输出流

    一:面向符的输入流 父类Reader为抽象类,不能被实例化.面向字符的输入流都是Reader类的子类,其类层次结构下图所示: 下表 列出了 Reader 的主要子类及说明 下表 列出了 Reader ...

  3. Java知多少(中)

    Java知多少(上) Java知多少(39)interface接口 Java知多少(40)接口和抽象类的区别 Java知多少(41)泛型详解 Java知多少(42)泛型通配符和类型参数的范围 Java ...

  4. BufferedWriter_字符缓冲输出流

    package com.learn.demo01.BufferedStream;import java.io.BufferedWriter; import java.io.FileWriter; im ...

  5. java面向字符的输入流_Java编程开发中面向字节的输入输出流

    关于面向字符的输入流和输出流方面教程已经讲解完了,下面要介绍的就是Java编程开发中面向字节的输入输出流,希望本节内容可以帮助大家更好的学习Java. 教程回顾点击查看: 字节流以字节为传输单位,用来 ...

  6. Java I/O流——面向字符输入/输出流(超详细)

    目录 前言 字符编码 面向字符输入/输出流类 转换流 转换输入流(InputStreamReader)类 转换输入流(InputStreamReader)类实例 转换输出流(OutputStreamW ...

  7. Java I/O流——面向字节的输入/输出流(超级详细)

    目录 前言 流的概念 I/O设备与文件 面向字节的输入流 InputStream类 类InputStream的子类的使用 文件输入流(FileInputStream) 文件输入流(FileInputS ...

  8. java面向字符的输入流_详细解读Java编程中面向字符的输入流

    字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件. Reader和Writer是java.io包中所有字符流的父类.由于它们都是抽象类,所以应使用 ...

  9. java字符流输出流_JAVA语言之IO流字符串输入输出流

    本文主要向大家介绍了JAVA语言之IO流字符串输入输出流,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 概述 StringReader 字符输入流 和CharArrayReader类 ...

最新文章

  1. pycharm 基本设置
  2. 无法删除当前已连接的用户处理办法
  3. MySQL基本操作(表,字段)
  4. iptables--静态防火墙实例教程
  5. Centos8安装X11-forwarding图形服务
  6. 深入理解异步I/O+epoll+协程
  7. C# Socket 简易的图片传输
  8. [codeup 5038] 找零钱
  9. MATLAB傅里叶变换后寻找频谱次大值对应的位置
  10. mp4安装Linux,linux centos mp4box 安装教程
  11. EMC与电阻、电容和电感的关系
  12. Matplotlib confusion map显示不全
  13. mp3格式怎么转html格式转换器,flac转mp3格式转换器 如何将flac格式的音频文件转换为MP3格式...
  14. 工作表、工作簿保护密码关闭
  15. 数据解读热门美剧 | 《权力的游戏》花式死亡图鉴
  16. scanner.nextLine()和scanner.next();的区别
  17. html 实现下拉菜单
  18. android 天时分倒计时,Android倒计时(分钟)
  19. pdf合并页面怎么弄?如何把单页pdf合并到一起?
  20. python 文件操作 和 标准库

热门文章

  1. feather 设置坐标刻度_Matlab中将坐标轴放在原点位置
  2. 分计算iv值_快捷、经济、实用的光伏及IV曲线测试仪PVPM 1500X
  3. 322. 零钱兑换 golang 动态规划
  4. makefile内容小结
  5. C++ 拷贝构造函数的使用场景
  6. c++继承父类的子类,如何调用父类的同名函数?
  7. C++中的inline用法
  8. gdb tui的使用
  9. 【数字逻辑】第四章 组合逻辑电路:端口设计 端口拓展的方法
  10. Linux 桌面玩家指南:09. X Window 的奥秘