package com.io.e_character;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.junit.Test;
/*
输出字符流:
-------| Writer:输出字符流的基类,抽象类;
----------| FileWriter:向文件输出数据的输出字符流;
FileWriter的使用步骤:
1、找到目标文件
2、建立数据输出通道
3、输出数据
4、关闭资源
FileWriter注意事项:
1、使用FileWriter写数据的时候,FileWriter内部是维护了一个1024个字符数组的,写数据的时候会先将数据写入字符数组中,
如果需要把数据真正写到硬盘上,需要调用flush()方法或者close()方法,或者填满内部的字符数组;
2、创建FileWriter对象的时候,如果目标文件不存在,那么会自动创建目标文件;
3、创建FileWriter对象的时候,如果目标文件已经存在,那么默认情况会先清空目标文件中的数据;如果需要在目标文件中追加数据,
那么需要使用FileWriter writer = new FileWriter(file, true);true表示在末尾追加;
*/
public class Demo2 {
@Test
public void test1() throws IOException{
// 找到目标文件
File file = new File("D:\\a.txt");
// 建立数据输出通道
FileWriter writer = new FileWriter(file);
// FileWriter writer = new FileWriter(file, true); // true表示追加数据;
// 输出数据
String content = "你好 China";
writer.write(content);
// 刷新字符流
// writer.flush();
// 关闭资源
writer.close();
}
// 使用字符流拷贝文件
@Test
public void copyFile() throws IOException{
// 找到目标文件
File inFile = new File("D:\\myeclipse\\workspace\\IO\\src\\com\\io\\e_character\\Demo2.java");
File outFile = new File("D:\\a.java");
// 建立数据输入输出通道
FileReader reader = new FileReader(inFile);
FileWriter writer = new FileWriter(outFile);
// 边读边写
int len = 0;
char[] buf = new char[1024];
while ((len = reader.read(buf)) != -1){
writer.write(buf, 0, len);
}
// 释放资源
writer.close();
reader.close();
}
/*
* 使用字符流拷贝图片:数据会丢失,拷贝失败;
* FileReader的本质也是从文件数据中读取二进制数据,只是它把读取的每一个数据都会到GBK码表中查找对应的字符,
* 然后返回我们能看懂的字符;但是GBK码表有65536个数值,并没有完全使用完,也就是说有一些数值没有对应的字符;
* 那么当读取图片数据的时候,有可能读取到的数值在GBK码表中没有对应的字符,此时就会返回一个未知字符对应的数字,
* 未知字符占一个字节,而从图片读取的数据占两个字节,这样就会出现数据丢失的情况;
*/
@Test
public void copyImage() throws IOException{
// 找到目标文件
File inFile = new File("D:\\photos\\11.jpg");
File outFile = new File("D:\\a.jpg");
// 建立数据输入输出通道
FileReader reader = new FileReader(inFile);
FileWriter writer = new FileWriter(outFile);
// 边读边写
int len = 0;
char[] buf = new char[1024];
while ((len = reader.read(buf)) != -1){
writer.write(buf, 0, len);
}
// 关闭资源
writer.close();
reader.close();
}
/*
思考:何时使用字节流?何时使用字符流?
字符流:读写字符数据的时候使用字符流;
字节流:读写的数据都不需要转换成字符的时候,使用字节流;
*/
}
Java学习笔记之IO(八):FileWriter输出字符流
最新推荐文章于 2024-01-15 00:05:12 发布