Day20-3
1 IO流关流的方式总结
JDK1.7之前的关流正确方式
package demos6;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo03 {
public static void main(String[] args) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("day20/a.txt");
fos = new FileOutputStream("day20/a2.txt");
int i;
while((i = fis.read()) != -1){
fos.write(i);
}
}finally{
try{
if(fis != null){
fis.close();
}
}finally {
if(fos != null){
fos.close();
}
}
}
}
}
JDK1.7之后的关流方式
package demos6;
import java.io.*;
public class Demo04 {
public static void main(String[] args) throws IOException {
try(
FileReader fis = new FileReader("day20/a.txt");
FileWriter fos = new FileWriter("day20/a2.txt");
){
int i;
while((i = fis.read()) != -1){
fos.write(i);
}
}
}
}
2 IO流总结
- IO:输入和输出
数据从其他设备进入运行内存就是输入
数据从运行内存到其他设备就是输出 - 字节流
字节输入流:InputStream 抽象类
read();
read(byte[] bs);
read(byte[] bs,int off,int len);
close();
子类:FileInputStream
字节输出流:OutputStream 抽象类
write(int i)
write(byte[] bs)
write(byte[] bs,int off,int len);
close();
子类:FileOutputStream
BufferedInputStream
BufferedOutputStream - 字符流
字符输入流:Reader抽象类
FileReader
字符输出流:Writer抽象类
FileWriter
使用字符流拷贝纯文本文件
不能使用字符流拷贝非纯文本文件
BufferedReader
readLine();
BufferedWriter
newLine(); - 转换流
输入:InputStreamReader
输出:OutputStreamWriter
都是字符流 在创建对象是需要字节流
既然都是字符流,所以,字符流的方法都可以使用
单独的特点:可以指定编码读取和写出信息 - 标准输入输出流
System.in:字节输入流
System.out:字节输出流
单独的特点:
System.in默认读取录入的数据
System.out:默认将数据写出到控制台 - 打印流
PrintStream:打印字节流 属于字节输出流
PrintWriter:打印字符流 属于字符输出流
单独的特点:
两个类型中有一些特殊的方法:
print 和ptintln 可以输出任何类型的数据 - 对象序列化流和反序列流
ObjectOutputStream:对象序列化流
writeObject(Object o)
ObjectInputStream:对象反序列化流
readObject(); - Properties
是一个双列集合
有一些和IO结合的方法:
store(Writer w,String str):将双列集合中的键值对数据写出到目标文件中保存
load(Reader r):将文件中的键值对数据,读取到集合中存储