Java 之 字符输出流[writer]
一、字符输出流
java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。
它定义了字节输出流的基本共性功能方法。
void write(int c) 写入单个字符。写入0 到 65535 之间的Unicode码。
void write(char[] cbuf) 把整个字符数组的内容写进去。
abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
void write(String str) 写入字符串。
void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
void flush() 刷新该流的缓冲,则立即将它们写入预期目标。
void close() 关闭此输出流并释放与该流关联的所有系统资源
Writer 抽象类下面的子类结构:

图中深色的为节点流,浅色的为处理流。
二、FileWriter 类
java.io.FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区 。
作用:把内存中字符数据写入到文件中。
1、构造方法
FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象。
FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称。
参数:写入数据的目的地。
File file:文件对象
String fileName:文件的路径。
构造方法作用:
① 会创建一个 FileWriter 对象
② 会根据构造方法中传递的文件 / 文件的路径,创建对象
③ 会把 FileWriter 对象指向创建好的文件。
字符输出流的使用步骤【重要】:
① 创建FileWriter对象,构造方法中绑定要写入数据的目的地
② 使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
③ 使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
④ 释放资源(会先把内存缓冲区中的数据刷新到文件中)
2、基本写入数据
(1)写出字符:write(int b) 方法,每次可以写出一个字符数据,代码使用演示:
public static void main(String[] args) throws IOException {
//1.创建FileWriter对象,构造方法中绑定要写入数据的目的地
FileWriter fw = new FileWriter("E:\\d.txt");
//2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
//void write(int c) 写入单个字符。
fw.write(97);
//3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
fw.flush();
//4.释放资源(会先把内存缓冲区中的数据刷新到文件中)
fw.close();
}
注意:如果未调用 close 方法,数据只是保存到了缓冲区,并未写出到文件中。
(2)关闭与刷新
区别:
flush :刷新缓冲区,流对象可以继续使用。
close : 先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
Demo:
public static void main(String[] args) throws IOException {
//1.创建FileWriter对象,构造方法中绑定要写入数据的目的地
FileWriter fw = new FileWriter("E:\\e.txt");
//2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
//void write(int c) 写入单个字符。
fw.write(97);
//3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
fw.flush();
//刷新之后流可以继续使用
fw.write(98);
//4.释放资源(会先把内存缓冲区中的数据刷新到文件中)
fw.close();
//close方法之后流已经关闭了,已经从内存中消失了,流就不能再使用了
fw.write(99);//IOException: Stream closed
}
注意:即便是flush方法写出了数据,操作的最后还是要调用close方法,释放系统资源。
3、写出其他数据
(1)写出字符数组:write(char[] cbuf) 和 write(char[] cbuf, int off, int len) ,每次可以写出字符数组中的数据,用法类似FileOutputStream,代码使用演示:
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("E:\\f.txt");
char[] cs = {'a','b','c','d','e'};
//void write(char[] cbuf)写入字符数组。
fw.write(cs);//abcde
//void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
fw.write(cs,1,3);//bcd
fw.close();
}
(2)写出字符串:: write(String str) 和 write(String str, int off, int len) ,每次可以写出字符串中的数据,更为方便,代码使用演示:
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("E:\\f.txt");
//void write(String str)写入字符串。
fw.write("博客园");//博客园
//void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
fw.write("天道酬勤啊",2,3);//酬勤啊
fw.close();
}
(3)续写和换行
续写,追加写:使用两个参数的构造方法
FileWriter(String fileName, boolean append)
FileWriter(File file, boolean append)
参数:
String fileName,File file:写入数据的目的地。
boolean append:续写开关 true:不会创建新的文件覆盖源文件,可以续写; false:创建新的文件覆盖源文件。
换行:换行符号
windows:\r\n
Linux / Unix:\n
mac:\r
Demo :
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("E:\\g.txt",true);
for (int i = 0; i <10 ; i++) {
fw.write("HelloWorld"+i+"\r\n");
}
fw.close();
}
注意:字符流,只能操作文本文件,不能操作图片,视频等非文本文件。单纯读或者写文本文件时,使用字符流,其他情况使用字节流。
Java 之 字符输出流[writer]的更多相关文章
- 字符输出流Writer简要概括
偷个懒,直接参考上篇字符输入流Reader的形式,其实Reader和Writer本来就大同小异: 字符输出流Writer 本篇将对JAVA I/O流中的字符输出流Writer做个简单的概括: 总得来说 ...
- 00092_字符输出流Writer
1.字符输出流Writer (1)既然有专门用于读取字符的流对象,那么肯定也有写的字符流对象: (2)查阅API,发现有一个Writer类,Writer是写入字符流的抽象类.其中描述了相应的写的动作. ...
- [19/03/31-星期日] IO技术_四大抽象类_字符流( 字符输入流 Reader、 字符输出流 Writer )(含字符缓冲类)
一.概念 Reader Reader用于读取的字符流抽象类,数据单位为字符. int read(): 读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值,即Unicode ...
- JAVA I/O 字符输出流简要概括
偷个懒,直接参考上篇字符输入流Reader的形式,其实Reader和Writer本来就大同小异: 字符输出流Writer 本篇将对JAVA I/O流中的字符输出流Writer做个简单的概括: 总得来说 ...
- Java IO: 字符流的Piped和CharArray
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader.Pip ...
- java 字节→字符转换流
OutputStreamWriter:把字节输出流对象转成字符输出流对象 InputStreamReader:把字节输入流对象转成字符输入流对象 FileWriter和FileReader分别是Out ...
- java IO输入输出流中的各种字节流,字符流类
字节流字节流主要是操作byte类型数据,也byte数组为准,主要操作类就是·字节输出流:OutputStream·字节输入流:InputStream字符流在程序中一个字符等于2个字节,那么java提供 ...
- Java将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
java.io 类 BufferedWriter java.lang.Object java.io.Writer java.io.BufferedWriter BufferedWriter publi ...
- Java读写文件,字符输入流FileReader 和 字符输出流FileWriter
一个流被定义为一个数据序列.输入流用于从源文件读取数据,输出流用于向目标写数据. 字符输入流FileReader三种读文件方式 package com.shuzf.fileio; import jav ...
随机推荐
- Objective-C轻量级泛型
在Apple发布Xcode7的时候,不仅把Swift编程语言升级到了2.0版本,而且还对Objective-C做了许多提升,包括引入__nonnull/__nullable.其中,对于Objectiv ...
- Apache2.4+PHP7.2配置站点访问变下载
问题描述:Apache正常工作,php-fpm正常工作,访问网址就变下载,显然是站点无法正常解析php造成的.php-fpm与apache的通信出现了问题. 解决方案: 如果php-fpm使用的是TC ...
- 【物联网】传感器+wifi传输+回复+显示
https://www.jianshu.com/p/cb0274d612b5 https://timgsa.baidu.com/timg?image&quality=80&size=b ...
- Codeforces Round #556 (Div. 2) D. Three Religions 题解 动态规划
题目链接:http://codeforces.com/contest/1150/problem/D 题目大意: 你有一个参考串 s 和三个装载字符串的容器 vec[0..2] ,然后还有 q 次操作, ...
- 《MySQL必知必会》学习笔记——第30章 改善性能
本章将付息与MySQL性能有关的某些要点. 30.1 改善性能 数据库管理员把他们生命中的相当一部分时间花在了调整.试验以改善DBMS性能之上.在诊断英勇的滞缓现象和性能问题时,性能不良的数据库(以及 ...
- bootstrap-table和bootstrap-switch
{% load staticfiles %} <!DOCTYPE html> <html lang="en"> <head> <meta ...
- 修改centos的源, 使其能访问阿里云服务器
1. 从拷贝以下文件到/etc/yum.repos.d/ 下; Centos-7.repo # CentOS-Base.repo # # The mirror system uses the conn ...
- Linux 线程实现机制分析(转载)
自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads ...
- 死锁造成oom的排错
1.死锁的查看步骤 jps -l jstack xxxx(xxxx为java进程的进程号) ------ 2:查看java进程的参数: jps -l jinfo -flag printGcDetial ...
- 【转】那些年用过的Redis集群架构(含面试解析)
引言 今天是2019年2月12号,也就是大年初八,我接到了高中同学刘有码面试失利的消息. 他面试的时候,身份是某知名公司的小码农一枚,却因为不懂自己生产上Redis是如何部署的,导致面试失败! 人间惨 ...