- 普通字节流,一次读写一个字节(FileInputStream && FileOutputStream)
- 普通字节流,一次读写一个字节数组
- 高效字节流,一次读取一个字节(BufferedInputStream && BufferedOutputStream)
- 高效字节流,一次读取一个字节数组
- 普通字符流,一次读取一个字符(FileReader && FileWriter)
- 普通字节流,一次读取一个字节数组
- 高效字节流,一次读取一个字节(BufferedReader && BufferedWriter)
- 高效字节流,一次读取一个字节数组
- 高效字节流,一次读一行
BufferedReader#readeLine();读取一行
BufferedWriter#writer(String line)一次写一行
BufferedWriter#newLine()根据操作系统输出换行
读取src下面的文件,需要写入的路径是“src/aaa.text” ,直接写名字默认是项目目录下
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class TestIo {
/*
* 将utf-8.txt(utf-8编码写的)的内容复制到gbk.txt(gbk编码写的)文件中
*/
public static void main(String[] args) throws IOException{
//1、创建输入流对象,封装数据源,传一个参数就是默认编码转换,传两个就是第二个就是指定编码转换
FileInputStream file1 = new FileInputStream("Utf-8.txt");
//把字节流转换为字符流
InputStreamReader isr = new InputStreamReader(file1,"utf-8");
//实际开发中的写法
//InputStreamReader isr = new InputStreamReader(new FileInputStream("Utf-8.txt"),"utf-8");
//2、创建输出流对象,封装目的地文件
FileOutputStream file2 = new FileOutputStream("gbk.txt");
OutputStreamWriter osw = new OutputStreamWriter(file2,"gbk");
//OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("gbk.txt"),"gbk");
//3、定义变量,用来记录读取到的有效字符数
//一次读取一个指定长度的字节数组,并将读取到的内容放到字节数组中,并且返回读取到的有效字节数,读不到返回-1;
int len = 0;
char[] chs = new char[1024];
//4、循环读取文件,只要条件满足,就一直读取下去,并将读取到的有效字符赋给变量
while((len = isr.read(chs)) != -1){
//5、将读取到的内容写入到文件中
osw.write(chs,0,len);
}
//6、关闭,释放资源
isr.close();
osw.close();
System.out.println("复制成功");
}
}
高效流
package io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class IOEffiency {
public static void main(String[] args) throws IOException{
//创建字符流输入对象
FileReader fr = new FileReader("utf-8.txt");
//高效字符输入流,可以一次读取一行数据
BufferedReader br = new BufferedReader(fr);
//创建字符流输出对象
FileWriter fw = new FileWriter("gbk.txt");
//高效字符输出流,可以一次输出一行
BufferedWriter bw = new BufferedWriter(fw);
//用来记录读取的内容,因为是一行,得到的是String类型
String line = "";
//这里得到的不是int,所以要判断是否为null
while((line = br.readLine()) != null){
bw.write(line);
}
//高效流就是对普通流的升级,所以关闭高效流即可。
//高效流就是化了妆的普通流,本质是同一个人。
br.close();
bw.close();
}
}