另附一张 一小部分 不完全 的思维导图
IO流
1.原理以及分类
1.1分类
四个抽象类:
1.2 文件和流
2.文件字节流:FileInputStream
2.1 案例
2.2 关键代码
在此省略了异常之类的代码 非完整代码 只截取关键部分代码
单个字节读取:慢(单个) 汉字乱码(字节)
FileInputSteam fis = new FileInputStream("filePath");
while(int readData = fis.read()!=-1){ sout((char) readData);}
finally{fis.close();}
字节数组读取:快一些 但因不是字符读取 仍有汉字乱码问题
byte[] buf = byte[8];
FileInputSteam fis = new FileInputStream("filePath");
while(readLen = fis.read(buf)!=-1){ sout(new String(buf,0,readLen));}
finally{fis.close();}
3. 文件字节流:FileOutputStream
3.1 案例
3.2 关键代码
FileOutputStream fos = new FileOutputStream(path);
String str = "hello word"
fos.write(str.getBytes());
fos.close();
4. 文件拷贝
4.1关键代码
String path = "D:/output",path1 = "D:/out";
FileInputStream fis = new FileInputStream(path);
FileOutputStream fos = new FileOutputStream(path1);
//定义字节数组
byte[] buf = new byte[1024];
int readLen;//获得buf的真实长度
while((readLen = fis.read(buf))!=-1){
fos.write(buf,0,readLen);//一定要这么写
}
//关闭
if(fis!=null){
fis.close();
}
if(fos!=null){
fos.close();
}
4.2完整代码
public class main {
public static void main(String[] args) {
String path = "D:/output",path1 = "D:/out";
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(path);
fos = new FileOutputStream(path1);
//定义字节数组
byte[] buf = new byte[1024];
int readLen;
while((readLen = fis.read(buf))!=-1){
fos.write(buf,0,readLen);//一定要这么写
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try{
if(fis!=null){
fis.close();
}
if(fos!=null){
fos.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
}
5.文件字符流
5.1FileReader
5.1.1案例
5.1.2关键代码
String path = "";
FileReader fr = new FileReader(path);
//定义字符数组
char[] cbuf = new char[9];
int data;
while((data=fr.read(cbuf)!=-1){
sout(new String(cbuf,0,data));
}
//关闭
fr.close();
5.2FileWriter
5.2.1案例
5.2.2关键代码
String path = "";
FileWriter fw = new FileWriter(path);
String str = "风雨之后 定见彩虹";
fw.write(str);
//必须关闭或者flush() 不然写不进去
fw.close();
6.节点流与处理流
基本概念:
节点流:
处理流:
6.1处理流设计模式
6.2 字符处理流:BufferedReader BufferedWriter
注意:不要用字符处理流来处理一些二进制之之类的字节文件:如视频、音频等
6.2.1案例
6.2.2关键代码
String path = "D:/output";
String path1 = "D:/output1";
BufferedWriter bwriter = new BufferedWriter(new FileWriter(path1));
BufferedReader breader = new BufferedReader(new FileReader(path));
String line ;
while((line = breader.readLine())!=null){
bwriter.write(line);
bwriter.newLine();//换行
}
//关闭处理流即可(因为底层会关闭filewriter/filereader)
bwriter.close();
breader.close();
}
}
6.2.3完整代码
package HomeWork0118.hw4;
import java.io.*;
public class main {
public static void main(String[] args) throws IOException {
String path = "D:/output";
String path1 ="D:/output1";
BufferedWriter bwriter = new BufferedWriter(new FileWriter(path1));
BufferedReader breader = new BufferedReader(new FileReader(path));
String line;
while((line = breader.readLine())!=null){
bwriter.write(line);
bwriter.newLine();
}
breader.close();
bwriter.close();
}
}
6.3 字节处理流 :BufferedInputStream BufferedOutputStream
6.3.1案例
6.3.2关键代码
String path = "D:/output";
String path1 = "D:/output1";
BufferedOutputStream bos = new BufferedWriter(new FileOutputStream(path1));
BufferedInputStream bis = new BufferedReader(new FileInputStream(path));
//定义字节数组
byte[] buf = new byte[1024];
int readLen;
while((readLen = bis.read(buf))!=-1){
bos.write(buf,1,readLen);
}
//关闭处理流即可(因为底层会关闭filewriter/filereader)
bis.close();
bos.close();
}
}
7. 对象流与对象序列化
7.1 基本概念
7.2 案例
ObjectOutputStream:
ObjectInputStream:
8. 转换流
8.1 基本概念
8.2 案例
9. Properties类
9.1 基本概念
9.2 案例
10. 打印流
10.1基本概念
PrintStream & PrintWriter
PrintStream
PrintWriter