廖雪峰Java6 IO编程-3Reader和Writer-2Writer
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的更多相关文章
- 廖雪峰Java6 IO编程-3Reader和Writer-1Reader
1.java.io.Reader和java.io.InputStream的区别 InputStream Reader 字节流,以byte为单位 字符流,以char为单位 读取字节(-1,0-255): ...
- 廖雪峰Java6 IO编程-2input和output-4Filter模式
1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...
- 廖雪峰Java6 IO编程-2input和output-7序列化
1.序列化 序列化是指把一个Java对象变成二进制内容byte[] 序列化后可以把byte[]保存到文件中 序列化后可以把byte[]通过网络传输 一个Java对象要能序列化,必须实现Serializ ...
- 廖雪峰Java6 IO编程-2input和output-6classpath资源
1.从classpath读取文件可以避免不同环境下文件路径不一致的问题. Windows和Linux关于路径的表示不一致 Windows:C:\conf\default.properties Linu ...
- 廖雪峰Java6 IO编程-2input和output-5操作zip
1.ZipInputStream是一种FilterInputStream 可以直接读取zip的内容 InputStream->FilterInputStream->InflateInput ...
- 廖雪峰Java13网络编程-1Socket编程-2TCP编程
1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据 ...
- 廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程
TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通 ...
- 廖雪峰Java13网络编程-1Socket编程-5UDP编程
1. UDP编程: 不需要建立连接 可以直接发送和接收数据 1.1 客户端 DatagramSocket sock = new DatagramSocket(){} sock.connect(addr ...
- 廖雪峰Java2面向对象编程-4抽象类和接口-2接口
1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...
随机推荐
- python中实现并发的手段之 协程
几种实现并发的手段 进程 启动多个进程 进程之间是由操作系统负责调用线程 启动多个线程 真正被CPU执行的最小单位实际是线程 开启一个线程 创建一个线程 寄存器 堆栈 关闭一个线程协程 本质上是一个线 ...
- pandas中的空值处理
1.空值 1.1 有两种丢失数据: None: Python自带的数据类型 不能参与到任何计算中 np.nan: float类型 能参与计算,但结果总是nan # None+2 # 报错 # np.n ...
- HTML table导出到Excel中的解决办法
第一部分:html+js 1.需要使用的表格数据(先不考虑动态生成的table) <table class="table tableStyles" id="tabl ...
- 一天一点Zynq(1)xilinx-arm-linux交叉编译链 安装总结以及资源更新
结束了对xilinx-arm-linux交叉编译链安装后,总结一下整个过程,方便后来的研究者们,少走点弯路. 关于xilinx-arm-linux交叉编译链的安装,网上一搜一大把,可是有的资料中的资源 ...
- 微服务解决框架--SpringCloud
- gdb pretty printer for STL debug in Linux
Check your gcc version. If it is less than 4.7, you need use another printer.py file. Get the file f ...
- python信号量
同进程的一样 Semaphore管理一个内置的计数器,每当调用acquire()时内置计数器-1:调用release() 时内置计数器+1:计数器不能小于0:当计数器为0时,acquire()将阻塞线 ...
- Charles设置HTTPS抓包
1. 配置 Charles 根证书 点击 Help -> SSL Proxying -> Install Charles Root Certificate 之后会弹出钥匙串,如果不弹出,请 ...
- mysql 在 win 安装 最全攻略(附转载的乱码终极解决方案)以及解决data too long for column 'name' at row 1, 一种可能就是因为编码一致性问题.
[博客园cnblogs笔者m-yb原创,转载请加链接,公众号aandb7, github.com/mayangbo666,QQ群927113708] https://www.cnblogs.com/m ...
- C语言的通用指针类型(void *)
reference: https://blog.csdn.net/cumirror/article/details/4631701 https://blog.csdn.net/Lee_Shuai/ar ...