我们对于文件中数据的操作无非就有两种:读出与写入
对于Java来说,对数据的操作有字节流(FileOutputStream、FileInputStream)与字符流(FileWriter、FileReader),这两种方法其实差不多,都是从文件中写入数据或读出数据,他俩的区别就是字节流是以字节为单位进行操作的,而字符流是以字符为单位进行操作的。
我们都知道一个英文字母占一个字节,一个中文汉字占两个字节,而一个英文字母与一个中文汉字我们都称之为一个字符,所以说我们要根据文件中所存储的数据内容的不同而选择不同的操作方法。
假如说我们一个文本文档中存储了这样一句话:

321爱就像蓝天白云,晴空万里,突然暴风雨!

这句话中有数字、汉字以及标点符号,
数字:1个字节
中文汉字:2个字节
中文标点符号:2个字节
英文标点符号:1个字节
而他们都属于1个字符

如果我们使用字节流来进行读取文件的操作,部分代码如下

FileInputStream in;
try {in=new FileInputStream(file);byte bytRead[]=new byte[1024];int len=in.read(bytRead);System.out.println("文件中的内容是:"+new String(bytRead,0,4));//注意这里我们只读取了文件中的前四个字节in.close();}catch(IOException e) {e.printStackTrace();}

输出结果为:

文件中的内容是:321?

我们发现前面三个数字可以正常输出,但是文本中的“我”却没有正常输出,而是输出了一个“?”,这就是字节流的特点,它是以字节为单位来进行操作的,他只输出了前4个字节的内容,而“321我”是5个字节,所以“我”没有被正常输出出来

然后我们再来看字符流的操作,部分代码如下

FileReader fr=null;
try {fr=new FileReader(file);char chRead[]=new char[1024];int hasread=-1;try {while((hasread=fr.read(chRead))!=-1) {//hasread表示文本中的字符数System.out.println("文件中的内容是:"+new String(chRead,0,hasread));}} catch (IOException e) {e.printStackTrace();}}catch(FileNotFoundException e) {e.printStackTrace();}finally {try {fr.close();} catch (IOException e) {e.printStackTrace();}}

输出结果:

文件中的内容是:321爱

我们发现在输出的时候,传入的参数同样都是4,而我们此时用字符流进行操作的时候就可以完整把原数据输出出来
字节流:

System.out.println("文件中的内容是:"+new String(bytRead,0,4));

字符流:

System.out.println("文件中的内容是:"+new String(chRead));

以上就是字节流与字符流的主要区别,对于FileOutputStream和FileWriter也是同样的道理,只不过他们两个是对文件进行写入的操作。我们只要清楚他们操作的单位不一样就可以了:
字节流:以字节为单位进行数据操作
字符流:以字符为单位进行数据操作

注:
1、我们用字节流来操作的时候,创建的是字节型的数组来存储读出来的数据

byte bytRead[]=new byte[1024];

我们用字符流来操作的时候,创建的是字符型的数组来存储读出来的数据

char chRead[]=new char[1024];

2、一定要区分开哪一个是写入,哪一个是读出
写入:
FileOutputStream
FileWriter
读出:
FileInputStream
FileReader

Java学习之FileInputStream与FileReader的区别相关推荐

  1. InputStream和Reader,FileInputStream和 FileReader的区别

    一.InputStream和Reader的区别 InputStream和Reader都可以用来读数据(从文件中读取数据或从Socket中读取数据),最主要的区别如下: InputStream用来读取二 ...

  2. Java学习路线,Java SE,EE,ME的区别,SSM框架基本概念

    1.尚硅谷 视频课程:https://www.bilibili.com/read/cv5216534 初学者可按照尚硅谷公开的JAVA视频最快学习路线: JavaSE --> MySQL–> ...

  3. Java学习笔记1:Java中有关print、println、printf的用法和区别

    Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...

  4. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  5. Java学习指南从入门到入土

    Java学习指南从入门到入土 本身其实只是刚刚入门,只是经历了两年时间的风吹雨打,经历了各种bug的折磨和学习各种框架的辛酸,才有得现有的 刚刚入门.有句老话说的好叫做 从入门到放弃,人生不易要及时放 ...

  6. java学习输出文档

    知识地图 一.类设计 1.面向对象的设计思想的理解 面向对象vs面向过程(洗衣服) 封装: ​ 就是把内部的东西保护起来,不被外界所看到. 继承: ​ 就是用于类的扩展 多态: ​ 概念:同一操作作用 ...

  7. Java学习笔记整理-知识梳理+JDK1.8详细文档

    链接:java开发手册 提取码:kes8 链接:JDK1.8详细文档 提取码:n9zo JavaSE 面向对象编程(Object-oriented programming) 封装 类(class) 类 ...

  8. java学习笔记:全部,txt版本

    java学习笔记:全部,txt版本 笔者注: 1.不知道怎么上传附件,所以就把txt文本内容全部贴在这里吧. 2.已经把txt版本的笔记上传到CSDN了,我没有设置索要积分才能下载,但是不知道为什么C ...

  9. java学习笔记---5

    IO流 I〇流概述: lO:输入/输出(Input/Output) 流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的: ...

最新文章

  1. 避免使用aireplay-ng指令时出现AP通道不对的方法
  2. tomcat升级_「shell脚本」懒人运维之自动升级tomcat应用(war包)
  3. JavaScript之事件的绑定与移除
  4. 关于HTML加密混淆、源码保护、代码安全,防止解压直接看源码
  5. 从 MVC 到前后端分离
  6. volatile深入
  7. .net 实现微信公众平台的用户信息获取
  8. 华米OV 万亿 IoT 争夺战
  9. zabbix 安装和基础监控
  10. js 线性最小二乘回归线方程
  11. xpath中的contains多个条件的匹配
  12. Unity资源替换工具,旧模型替换新模型,替换GUID,替换meta文件,文件丢失等问题
  13. 利用Bandzip批量解压缩文件
  14. 计算机网络应用班级口号霸气押韵,跑操口号大全(精选50句)
  15. informix数据库常用的命令
  16. android广告轮播无限
  17. python cookie动态请求_Python请求自动处理cookie
  18. 什么是反射机制?反射机制有什么作用?
  19. 谷歌的“神秘”小纸盒,居然是个人脸检测相机!
  20. 我国2016研发的超级计算机,我国超级计算机研制取得重大突破

热门文章

  1. Ext的组件模型印象
  2. 地方门户网站如何盈利?
  3. 使用fastJson把对象转字符串首字母大小写问题的解决
  4. appiumsend_keys很慢的解决方法
  5. java.io.IOException: Too many open files错误解决方案
  6. 全民K歌推荐系统架构、算法及后台设计实践
  7. 【推荐实践】强化学习算法在京东广告序列推荐场景的应用
  8. 【报告分享】2020年中国金融科技企业领袖观点洞察报告.pdf(附下载链接)
  9. 【报告分享】疫情期间抖音、快手带货趋势分析报告.pdf(附下载链接)
  10. python深度学习第一讲——用python写神经网络