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 Nio使用NioSocket客户端与服务端交互实现方式
Jun 15 Java/Android
ConstraintValidator类如何实现自定义注解校验前端传参
Jun 18 Java/Android
详解Java实践之建造者模式
Jun 18 Java/Android
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
Jun 26 Java/Android
解决SpringBoot跨域的三种方式
Jun 26 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
SpringBoot快速入门详解
Jul 21 Java/Android
一篇文章带你学习Mybatis-Plus(新手入门)
Aug 02 Java/Android
浅谈sql_@SelectProvider及使用注意说明
Aug 04 Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 Java/Android
正则表达式拆分url实例代码
Feb 24 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 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
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
jQuery语法总结和注意事项小结
2012/11/11 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
Python3学习urllib的使用方法示例
2017/11/29 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
Python中optparser库用法实例详解
2018/01/26 Python
python实现AES加密与解密
2019/03/28 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
python类中super() 的使用解析
2019/12/19 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
Python extract及contains方法代码实例
2020/09/11 Python
Python 求向量的余弦值操作
2021/03/04 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
求职导师推荐信范文
2015/03/27 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA