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 相关文章推荐
ObjectMapper 如何忽略字段大小写
Jun 29 Java/Android
Java中多线程下载图片并压缩能提高效率吗
Jul 01 Java/Android
新手初学Java List 接口
Jul 07 Java/Android
关于springboot 配置date字段返回时间戳的问题
Jul 25 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
Spring Bean是如何初始化的详解
Mar 22 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
Apr 03 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
Apr 24 Java/Android
Android 中的类文件和类加载器详情
Jun 05 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 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
document.all还是document.getElementsByName?
2006/07/21 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
详解创建自定义的Angular Schematics
2018/06/06 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
Python计算三角函数之asin()方法的使用
2015/05/15 Python
python实现redis三种cas事务操作
2017/12/19 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
Python魔法方法详解
2019/02/13 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
python画图常规设置方式
2020/03/05 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
上课打牌的检讨书
2014/02/15 职场文书
大学生党员自我评价范文
2014/04/09 职场文书
高三化学教学反思
2016/02/22 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python