第一章 IO概述
1、IO思想
A. 输入in 读取 read 文件 -> Java程序
B. 输出out 写出 write Java程序 -> 文件
2、四大父类(将所学类绘制在族谱图中)
InputStream 字节输入(子类代表 FileInputStream)
OutputStream 字节输出(子类代表 FileOutputStream)
Reader 字符输入(子类代表 FileReader) ->(增强 BufferedReader)
Writer 字符输出(子类代表 FileWriter) ->(增强 BufferedWriter)
3、字节文件和字符文件
A.字节文件:
采用windows自带记事本打开全是乱码(图片,音乐,视频,安装文件exe等)
B.字符文件:
采用windows自带记事本打开不是乱码(文本文件...)
C.编码表:
作用: 根据本地语言环境,将字节数字,转换成为对应语言文字符号
理解: 字符文件 = 字节文件 + 编码表
常见编码:
ASCII 美国信息交换标准代码
GBK 汉字内码扩展规范
ISO-8859-1 欧洲编码
UTF-8 万国码
4、IO操作步骤
A.创建对象
B.读写数据
C.释放资源
第二章 四大父类
1、OutputStream方法
A.写数据
public abstract void write(int b) //写入数字,如果写入到文本文件,由于编码表原因,转换为字符
public void write(byte[] b) //写字节数组
public void write(byte[] b, int off, int len) //写入字节数组一部分
B.刷新数据
public void flush() //字节流不刷新可以进入文件,字符流需要刷新才能进入文件(计算机底层是字节)
C.关闭方法(俗称"释放资源")
public void close() //释放资源.包含了刷新功能
2、InputStream方法
A.读数据
public abstract int read() //读取一个字节,返回的是字节
public int read(byte[] b) //读取一个字节,返回的是字节数组的长度
B.关闭方法(俗称"释放资源")
public void close() //释放资源.包含了刷新功能
3、Writer方法
A.基本方法
与 OutputStream 方法类似.(OutputStream有的Writer也有)
B.额外方法
public void write(String str) //写入字符串
public void write(String str, int off, int len) //写入字符串的一部分
4、Reader方法
A.读数据
public int read() //读取一个字符,返回的是字符数组对应的数字
public int read(char[] cbuf) //读取一个字符,返回的是字符数组的长度
B.关闭方法(俗称"释放资源")
public void close() //释放资源.包含了刷新功能
5、注意点
A.换行写入
windows: \r\n
mac: \r
linux: \n
B.追加写入
FileWriter fos = new FileOutputStream("路径", true); //表示追加写入
FileWriter fw = new FileWriter("路径",true); //true表示追加写入
6、文件的复制
//使用字节复制文件,一次复制一个字节(效率慢,但是是"万能"的)
FileInputStream fis = new FileInputStream("D:\\图片.jpg");
FileOutputStream fos = new FileOutputStream("D:\\图片01.png");
int len = 0;
while ((len = fis.read()) != -1){
fos.write(len);
}
fis.close();
fos.close();
//使用字节复制文件,一次复制一个字节数组(效率高,是"万能"的)
FileInputStream fis = new FileInputStream("D:\\图片.jpg");
FileOutputStream fos = new FileOutputStream("D:\\图片01.jpg");
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1){
fos.write(bytes,0,len);
}
fis.close();
fos.close();
//字符流用来复制".txt"等类型的文本文件速度更快,但是如果复制其他类型文件;
//例如:图片、视频文件使用字符流复制可能会出现乱码
//使用字符流复制文件(一次复制一个字符,相较于字节复制文件的方式来说效率更快)
FileReader fr = new FileReader("D:\\a.txt");
FileWriter fw = new FileWriter("D:\\a01.txt");
int len = 0;
while ((len = fr.read()) != -1){
fw.write(len);
}
fr.close();
fw.close();
//使用字符流赋值文件(一次复制一个字符数组,相较于以上三种方式来说效率最高)
FileReader fr = new FileReader("D:\\a.txt");
FileWriter fw = new FileWriter("D:\\a01.txt");
char[] cs = new char[1024];
int len = 0;
while ((len = fr.read(cs)) != -1){
fw.write(cs,0,len);
}
fr.close();
fw.close();
第四章 IO异常处理
try ( FileWriter fw = new FileWriter("fw.txt"); ) {
// 写出数据
fw.write("你好啊"); //你好啊
} catch (IOException e) {
e.printStackTrace();
}