1.java.io.Writer和java.io.OutputStream的区别

OutputStream Writer
字节流,以byte为单位 字符流,以char为单位
写入字节(0-255):void write(int b) 写入字符(0-65535):void write(int c)
写入字节数组 void write(byte[] b) 写入字符数组void wirlte(char[] c)
void write(byte[] b, int off, int len) void write(char[] c, int off, int len)
可以直接写入字符串wirte(String s)

2.Writer

java.io.Writer是所有字符输出流的超类:

  • void write(int c):写入一个字符(0-65535)

    * write方法也是阻塞的。必须等待write方法返回才能执行下一行代码

    * FileWriter可以从文件获取Writer,字符编码是系统默认的UTF-8。修改编码格式参见2.3
    Writer writer = new FileWriter("test.txt");
  • void write(char[] c):写入字符数组的所有字符
  • void write(char[] c, int off, int len):写入字符数组指定范围的字符
  • void write(String s):写入String表示的所有字符
  • void close():关闭Writer流

2.1Writer写入单个字符:

static void writeFile1(String file) throws IOException{
//手动关闭
Writer writer = new FileWriter(file);
writer.write(65);
writer.close();
}
static void writeFile2(String file) throws IOException{
//try..finall关闭Writer流
Writer writer = null;
try{
writer = new FileWriter(file);
writer.write(66);
}finally {
writer.close();
}
}
static void writeFile3(String file) throws IOException{
//使用try(resource)自动关闭Writer流
try(Writer writer = new FileWriter(file)){
writer.write(67);
}
}

2.2Writer一次写入多个字符或字符串

    static void writeFile4(String file) throws IOException{
try(Writer writer = new FileWriter(file)){
writer.write("Hello ".toCharArray());//写入char数组
writer.write("world");//写入字符串
}
}

2.3Writer实际上是基于OutputStream构造的:

  • FileWriter内部持有一个FileOutputStream
  • Writer可以通过OutputStream构造
    OutputStream output = new FileOutputStream(filename);
Writer writer = new OutputStreamWriter(output, "UTF-8");//使用OutputStream写入byte
    public static void main(String[] args) throws IOException,ClassNotFoundException {
String file = "./src/main/java/com/testList/output.txt";
try(Writer writer = new OutputStreamWriter(
new FileOutputStream(file),"utf-8")) {
writer.write("Hello ");
writer.write("你好");
}
}

2.4CharArrayWriter可以在内存中模拟一个Writer

    public static void main(String[] args) throws IOException,ClassNotFoundException {
try(CharArrayWriter writer = new CharArrayWriter()){
writer.write(65);
writer.write(66);
writer.write(67);
char[] data = writer.toCharArray();
System.out.println(data);
}
}


## 3.总结
* Writer定义了所有字符输出流的超类
* FileWriter实现了文件字符流输出
* CharArrayWriter在内存中模拟一个字符流输出
* Writer是基于OutputStream构造的:
* FileWriter使用系统默认编码,无法指定编码
* 可以通过OutputStreamWriter指定编码
* 使用try(resource)保证Writer正确关闭

廖雪峰Java6 IO编程-3Reader和Writer-2Writer的更多相关文章

  1. 廖雪峰Java6 IO编程-3Reader和Writer-1Reader

    1.java.io.Reader和java.io.InputStream的区别 InputStream Reader 字节流,以byte为单位 字符流,以char为单位 读取字节(-1,0-255): ...

  2. 廖雪峰Java6 IO编程-2input和output-4Filter模式

    1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...

  3. 廖雪峰Java6 IO编程-2input和output-7序列化

    1.序列化 序列化是指把一个Java对象变成二进制内容byte[] 序列化后可以把byte[]保存到文件中 序列化后可以把byte[]通过网络传输 一个Java对象要能序列化,必须实现Serializ ...

  4. 廖雪峰Java6 IO编程-2input和output-6classpath资源

    1.从classpath读取文件可以避免不同环境下文件路径不一致的问题. Windows和Linux关于路径的表示不一致 Windows:C:\conf\default.properties Linu ...

  5. 廖雪峰Java6 IO编程-2input和output-5操作zip

    1.ZipInputStream是一种FilterInputStream 可以直接读取zip的内容 InputStream->FilterInputStream->InflateInput ...

  6. 廖雪峰Java13网络编程-1Socket编程-2TCP编程

    1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据 ...

  7. 廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程

    TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通 ...

  8. 廖雪峰Java13网络编程-1Socket编程-5UDP编程

    1. UDP编程: 不需要建立连接 可以直接发送和接收数据 1.1 客户端 DatagramSocket sock = new DatagramSocket(){} sock.connect(addr ...

  9. 廖雪峰Java2面向对象编程-4抽象类和接口-2接口

    1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...

随机推荐

  1. PV、PVC和Storeclass等官方内容翻译

    k8s1.13版本 PV apiVersion: v1 kind: PersistentVolume metadata: name: filesystem-pvc spec: capacity: #未 ...

  2. 数据结构与算法之PHP排序算法(归并排序)

    一.基本思想 归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,使每个子序列有序,再将已有序的子序列合并,得到完全有序的序列.该算法是采用分治法(Divid ...

  3. Vue(七) 组件详解

    组件 (Component) 是 Vue.js 最核心的功能,也是整个框架设计最精彩的部分,当然也是最难掌握的. 组件与复用 组件用法 组件与创建 Vue 实例类似,需要注册后才可以使用.注册有全局注 ...

  4. arguments.callee弃用与webuploader

    使用最近使用ueditor的时候 谷歌浏览器下上传相同图片两次后第三次上传不了 而且取消了后会出现一个错误的图片.使用的ueditor是1.4.3 后来发现 这个是 webuploader插件的问题. ...

  5. 福大软工 · 第十一次作业 - Alpha 事后诸葛亮(团队)

    福大软工·第十一次作业-Alpha事后诸葛亮 组长博客链接 本次作业博客链接 项目Postmortem 模板 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...

  6. eclipse工具类及插件(svn的安装)

    (摘抄原文)https://blog.csdn.net/nzzl54/article/details/80768838

  7. Centos7.5安装Docker

    Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup,namespace,Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装 ...

  8. python发送邮箱的小项目

    import smtplibfrom email.mime.text import MIMEText receiver = input('输入接受者邮箱\n')subject = input('输入标 ...

  9. 将GETDATE()转换为指定日期格式的varchar类型

    CREATE FUNCTION [dbo].[FormatDate] (@date as datetime, ) ) ) AS BEGIN ) set @datestring=@formatstrin ...

  10. Python函数定义、文件操作(读写、修改)

    date:2018421 day3 一.函数定义 def  函数名(首字母大写) 增加程序可读性 #直接写函数名即可调用函数 #参数 ①.形参 ②.实参 ③.缺省参数 如果有默认值,调用的时候没有传递 ...