Java 超详细讲解IO操作字节流与字符流


Posted in Java/Android onMarch 25, 2022

IO操作

Java 超详细讲解IO操作字节流与字符流

字节流

  • java.io.InputStream 输入流,主要是用来读取文件内容的。
  • java.io.OutputStream 输出流,主要是用来将内容字节写入文件的。

FileInputStream

该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

有多种构造方法可用来创建对象。

可以使用字符串类型的文件名来创建一个输入流对象来读取文件

InputStream f = new FileInputStream("D:/hello");

也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:

File f = new File("D:/hello");
InputStream in = new FileInputStream(f);

FileOutputStream

该类用来创建一个文件并向文件中写数据。

如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。

有两个构造方法可以用来创建 FileOutputStream 对象。

使用字符串类型的文件名来创建一个输出流对象:

OutputStream f = new FileOutputStream("D:/hello");

也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:

File f = new File("D:/hello");
OutputStream fOut = new FileOutputStream(f);

字节流读写案例

读取D:/hello.txt文件中的内容再输入到文件D:/test.txt中

public class Mk {
        public static void main(String[] args) throws IOException {
            File file=new File("D://hello.txt");
            File file1= new File("D://test.txt");
            InputStream is=new FileInputStream(file);
            OutputStream out=new FileOutputStream(file1);
            //定义byte数组用来暂存数据
            byte[] buf = new byte[1024];
            //读取Is中的内容存到buf
            is.read(buf);
            //将buf中的内容写入out
            out.write(buf);
            is.close();
            out.close();
        }
        }

字符流

FileReader

写入文件实例

public class A {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("user.txt", true);
        fw.write("你好中国1");
        fw.write("你好中国2");
        fw.write("你好中国3");
        fw.close();
    }
}

Java 超详细讲解IO操作字节流与字符流

Java 超详细讲解IO操作字节流与字符流

FileWriter

读取文件实例

这里我把内容换行了

Java 超详细讲解IO操作字节流与字符流

br.ready()是判断这一行流是否为空

br.readLine()是输出一行,然后自动光标指到下一行。

public class A {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("user.txt"));
        while (br.ready()) {
            System.out.println(br.readLine());
        }
        br.close();
    }
}

Java 超详细讲解IO操作字节流与字符流

字节流与字符流的区别

字节流和字符流使用是非常相似的,那么除了操作代码的不同之外,还有哪些不同呢?

字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的 字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

那开发中究竟用字节流好还是用字符流好呢?

在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。 如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。

到此这篇关于Java 超详细讲解IO操作字节流与字符流的文章就介绍到这了,更多相关Java IO操作内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
总结一些Java常用的加密算法
Jun 11 Java/Android
SpringCloud Alibaba 基本开发框架搭建过程
Jun 13 Java/Android
解决SpringCloud Feign传对象参数调用失败的问题
Jun 23 Java/Android
Java基础之this关键字的使用
Jun 30 Java/Android
Spring Cloud Gateway去掉url前缀
Jul 15 Java/Android
java设计模式--七大原则详解
Jul 21 Java/Android
一篇文章带你学习Mybatis-Plus(新手入门)
Aug 02 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
Dec 06 Java/Android
MyBatis配置文件解析与MyBatis实例演示
Apr 07 Java/Android
Qt数据库应用之实现图片转pdf
Jun 01 Java/Android
Netty分布式客户端接入流程初始化源码分析
Mar 25 #Java/Android
java后台调用接口及处理跨域问题的解决
Mar 24 #Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 #Java/Android
java项目构建Gradle的使用教程
Mar 24 #Java/Android
SpringBoot2零基础到精通之数据与页面响应
MybatisPlus EntityWrapper如何自定义SQL
Mar 22 #Java/Android
SpringBoot2零基础到精通之数据库专项精讲
Mar 22 #Java/Android
You might like
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
行政助理岗位职责
2013/11/10 职场文书
承认错误的检讨书
2014/01/30 职场文书
小学一年级评语大全
2014/04/22 职场文书
师范毕业生求职信
2014/07/11 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
单位接收证明格式
2015/06/18 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL