1、复制功能(copy):
package IO;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
/*需求:将asd.txt文件中的内容复制到f.txt中
* 分析:优先采用字符流;
* 1)源文件:asd.txt----->Reader---->InputStreamReader----->FileReader
* 2)目的地文件:f.txt----->Writer---->OutputStreamWriter------>FileWriter
* 3)Reader:用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。
* 4)InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符
5) FileReader(File file) :在给定从中读取数据的 File 的情况下创建一个新 FileReader。
* 6)Writer() : 创建一个新的字符流 writer,其关键部分将同步 writer 自身。
* 7)OutputStreamWriter :字符流通向字节流的桥梁
* 8)FileWriter 用于写入字符流。要写入原始字节流,请考虑使用 FileOutputStream。
* */
public class CopyFile_method {
public static void main(String[] args) throws Exception {
//封装源文件和目的地文件
FileReader fr = new FileReader("asd.txt");
FileWriter fw = new FileWriter("f.txt");
//一次读取一个字符数组
char[]ch = new char[1024];
int len = 0;
//判断
while ((len = fr.read(ch)) != -1) {
//向f.txt文件中写数据
fw.write(ch, 0, len);
}
//释放数据
fr.close();
fw.close();
}
}
2、读取功能(Reader):
Reader : 用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。
子类:字符转换输入流:InputStreamReader
子类InputStreamReader构造方法:
1)InputStreamReader(InputStream in) :构造一个字符转换输入流,默认编码
2)public InputStreamReader(InputStream in,Charset cs) 构造一个字符转换输入流,指定编码
3)字符转换输入流=字节流+编码格式
package Reader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
/*需求:输出当前项目下asd.txt文件下的内容,输出在控制台
* 字符转换输入流=字节流+编码格式
* 分析:1)创建InputStreamReader读取数据对象
* 2)读取数据
* 3)输出在控制台
* 4)关闭资源
*
* */
public class InputStreamReader_method {
public static void main(String[] args) throws Exception, IOException {
// 创建InputStreamReader对象,指定编码格式格式类型
InputStreamReader in = new InputStreamReader(new FileInputStream("asd.txt"), "gbk");
// 读取数据
// 一次读取一个字符数组
char[] ch1 = new char[1024];
int len = 0;
// 确定有输出
while ((len = in.read(ch1)) != -1) {
// 输出在控制台
System.out.println(new String(ch1, 0, len)); //输出:hello
}
// 关闭资源
in.close();
}
}
3、书写功能(Writer):
Writer : 写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。
字符输入流:Reader
字符输出流:Writer
字符输出流/字符输入流:都是抽象类
使用一个子类:转换流
字符输出流的构造方法
public OutputStreamWriter(OutputStream out):使用默认的编码格式构造一个字符转换输出流对象
public OutputStreamWriter(OutputStream out, Charset cs):使用指定编码格式构造一个字符转换输出流对象
转换流的构成=字节流+编码格式(平台默认/指定)
转换流的对象的创建,格式比较长,非常麻烦,Java--->转换流的便捷类
Reader:抽象类:字符输入流
inputStreamReader(字符转换输入流 :inputStream+编码格式)
便捷类:FileReader,这个类可以直接对文件进行操作
Writer:抽象类:字符输出流
outputStreamWriter(字符转换输出流:outputStream+编码格式)
便捷类:FileWriter,这个类可以直接对文件进行操作