本文共 2716 字,大约阅读时间需要 9 分钟。
最近学习一个项目涉及到了文件操作,那不免用到输入流和输出流了,但自己又很久没使用了,忘的七七八八,等于要重新捡起来。或许是以前也学的不踏实吧,学完后没有认真整理归纳,导致很快就遗忘了,所以我们学习完后一定要找时间把重要的知识整理归纳!
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次1kbbyte[] 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)
转载地址:http://rbern.baihongyu.com/