博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java——基本IO流
阅读量:3920 次
发布时间:2019-05-23

本文共 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/

你可能感兴趣的文章
如何使用 C# 扩展方法
查看>>
C#如何回到主线程,如何在委托指定线程执行
查看>>
服务器重新部署踩坑记
查看>>
.NET应用程序安全操作概述
查看>>
C# WPF:把文件给我拖进来!!!
查看>>
生态和能力是国内自研操作系统发展的关键
查看>>
银河麒麟V10入选2020中国十大科技新闻
查看>>
Amazing 2020
查看>>
代码改变世界,也改变了我
查看>>
2021,未来可期
查看>>
阿星Plus:基于abp vNext开源一个博客网站
查看>>
写给自己,2020的年终总结
查看>>
Flash 生命终止,HTML5能否完美替代?
查看>>
ML.NET生成器带来了许多错误修复和增强功能以及新功能
查看>>
微信适配国产操作系统:原生支持 Linux
查看>>
我的2020年终总结:新的角色,新的开始
查看>>
C# 9 新特性 —— 增强的模式匹配
查看>>
ASP.NET Core Controller与IOC的羁绊
查看>>
如何实现 ASP.NET Core WebApi 的版本化
查看>>
探索 .Net Core 的 SourceLink
查看>>