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
  1. 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写入单个字符:

  1. static void writeFile1(String file) throws IOException{
  2. //手动关闭
  3. Writer writer = new FileWriter(file);
  4. writer.write(65);
  5. writer.close();
  6. }
  7. static void writeFile2(String file) throws IOException{
  8. //try..finall关闭Writer流
  9. Writer writer = null;
  10. try{
  11. writer = new FileWriter(file);
  12. writer.write(66);
  13. }finally {
  14. writer.close();
  15. }
  16. }
  17. static void writeFile3(String file) throws IOException{
  18. //使用try(resource)自动关闭Writer流
  19. try(Writer writer = new FileWriter(file)){
  20. writer.write(67);
  21. }
  22. }

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

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

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

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

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

  1. public static void main(String[] args) throws IOException,ClassNotFoundException {
  2. try(CharArrayWriter writer = new CharArrayWriter()){
  3. writer.write(65);
  4. writer.write(66);
  5. writer.write(67);
  6. char[] data = writer.toCharArray();
  7. System.out.println(data);
  8. }
  9. }


## 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. MVC模式和MVP模式的区别

    MVC模式: 1. MVC的所有通信都是单向的. 2. view传送指令到controller(用户也可以直接将指令传到controller). 3. controller完成业务逻辑后要求model ...

  2. coursera-斯坦福-机器学习-吴恩达-笔记week1

    1 Introduction 1.1 概念:一个程序被认为能从经验E中学习,解决任务 T,达到性能度量值P,当且仅当, 有了经验E后,经过P评判, 程序在处理 T 时的性能有所提升. 1.2 机器学习 ...

  3. Spring Boot + Jpa + Thymeleaf 增删改查示例

    快速上手 配置文件 pom 包配置 pom 包里面添加 Jpa 和 Thymeleaf 的相关包引用 <dependency> <groupId>org.springframe ...

  4. react-native 打包apk

    如果你是学习Android的和我一样的话那一定会用一些软件开发,如WebStore 等等 那么这里我就来讲一下在WebStore 开发的App 如何打包成一个手机可以安装的apk软件 1.首先你的Ap ...

  5. unity中将多个图片进行椭圆排序

    //保存需要排序的精灵容器 public GameObject[] Sprites; public Transform centrePoint;//椭圆的中心点 ;//每个方块间的角度偏移 //保存位 ...

  6. leetcode 总结 动态规划问题小结

    动态规划 动态规划对于子问题重叠的情况特别有效,因为它将子问题的解保存在表格,当需要某个子问题的解 时,直接取值即可,从而避免重复计算. 基本思路与策略 基本思想与分治法类似,也是将带求解的问题分解为 ...

  7. 2017-9-3模拟赛T1 卡片(card)

    题目 [题目描述] lrb 喜欢玩卡牌.他手上现在有n张牌,每张牌的颜色为红绿蓝中的一种.现在他有两种操作.一是可以将两张任意位置的不同色的牌换成一张第三种颜色的牌:二是可以将任意位置的两张相同颜色的 ...

  8. centos7 安装python3.6 脚本

    shell 脚本自动安装python3 # /bin/bash cd /opt yum groupinstall "Development tools" -y yum -y ins ...

  9. windows的docker开始支持linux的镜像 ,Version 18.03.0-ce-win59 (16762)

    LCOW containers can now be run next to Windows containers.Use '--platform=linux' in Windows containe ...

  10. 自动化测试-19.selenium定位之通过JS修改html写入日期数据以及从文本读取数据实战

    # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.support.select import ...