序言
最近学习一个项目涉及到了文件操作,那不免用到输入流和输出流了,但自己又很久没使用了,忘的七七八八,等于要重新捡起来。或许是以前也学的不踏实吧,学完后没有认真整理归纳,导致很快就遗忘了,所以我们学习完后一定要找时间把重要的知识整理归纳!
IO流按读取单位类型来分一般分两种:字节流、字符流
1、两者区别就是读取的单位不一样,字节流读取的单位是bit, 字符流是char
2、字节流一般读取字节文件,字符流一般读取文本、字符文件
3、字符流的读取速度比字节流的快
4、形式上区别字节流与字符流的是字节流是Int(Out)Stream, 字符流是Reader(Writer)
一、字节流
1、输入字节流(节点流 —— 直接操作文件)
File file = new File("d:/course.ftl");
//输入字节流
FileInputStream fileInputStream = new FileInputStream(file);
//指定一次读取的文件大小 1次1kb
byte[] b = new byte[1024];
//读取标记数, len = -1时会终止
int len = 0;
while ((len = fileInputStream.read(b))!=-1){
System.out.println(new String(b, 0, len));
}
new String(b, 0, len) 中
1、 b指的是字节数组,其中包含有读取到的内容
2、0是指从该字节数组中第几个下标开始读起
3、len是指从0开始要读的内容的长度
2、输出字节流(节点流 —— 直接操作文件)
File file = new File("f:/huang.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
String s = "你好,世界";
//由于FileOutputStream只能写入字节数据,所以需要将字符串转换成字节数组
byte[] bytes = s.getBytes("utf-8");
fileOutputStream.write(bytes);
3、输入字节缓存流(处理流 —— 间接操作文件)
(使用缓存流一次性读取大部分数据到缓存中,减少访问文件次数,提高读的效率)
FileInputStream in = new FileInputStream(srcFile);
BufferedInputStream bis = new BufferedInputStream(in);
用法和字节流普通用法一样
4、输出字节缓存流(处理流 —— 间接操作文件)
(使用输出缓存流,将写的数据首先全部写到缓存区中,然后调用flush()一次性将其写入文件(除非内容大小大于缓存区的大小则会自动刷新缓存写入文件))
FileOutputStream out = new FileOutputStream(destName);
BufferedOutputStream bos = new BufferedOutputStream(out);
用法和字节流普通用法一样
bos.flush();//刷新缓存区,否则可能不写入内容
二、字符流
1、输入字符流(节点流 —— 直接操作文件)
File file = new File("f:/huang.txt");
//输入字符流
FileReader fileReader = new FileReader(file);
//读取标记
int len = -1;
char[] chars = new char[10];
while((len = fileReader.read(chars))!=-1){
//因为是字符流,所以可以通过强转型将数字变成字符输出,字节流不可以这样做
//System.out.println(new String((char)len));
System.out.println(new String(chars, 0, len));
}
2、输出字符流(节点流 —— 直接操作文件)
File file = new File("f:/huang.txt");
FileWriter fileWriter = new FileWriter(file, true); //true 添加
fileWriter.write("你好,世界");
fileWriter.flush(); //刷新缓存区
3、输入字符缓存流(处理流 —— 间接操作文件)
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String line = null;
while((line = br.readLine())!=null){
System.out.println(line);
}
4、输出字符缓存流(处理流 —— 间接操作文件)
File f = new File("f:test.txt");
FileWriter fw = new FileWriter(f, false);//节点流
BufferedWriter bw = new BufferedWriter(fw); //处理流
PrintWriter pw = new PrintWriter(bw); //处理流
pw.write("你好你好\n");
pw.append("你好\n");
pw.print("你好\n");
pw.write("你好你好\n");
pw.flush();
三、字节流与字符流之间的转换
1、输入字节流转换成输入字符流
FileInputStream in = new FileInputStream(huang.txt);
InputStreamReader isr = new InputStreamReader(in); //中间桥梁
BufferedReader br= new BufferedReader(isr);
2、输出字节流转换成输出字符流
FileOutputStream out = new FileOutputStream(“huang.txt”);
OutputStreamWriter osw = new OutputStreamWriter(out); //中间桥梁
BufferedWriter bw = new BufferedWriter(osw)