一、流的分类

1.操作数据的单位:字节流、字符流

2.数据的流向:输入流、输出流

3.流的角色:节点流、处理流

二、流的体系结构

抽象基类 节点流(文件流) 缓冲流(属于处理流)
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedOutputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter

三、使用

 1.FileReader和FileWriter的使用

读入:

        //实例化File类的对象,指明要操作的文件FileReader fr = null;try {File file = new File("hello.txt");//将文件中的数据读入程序(内存)中//提供具体的流fr = new FileReader(file);//读入数据//read: 返回读入的字符 * @return The character read, or -1 if the end of the stream has been reached:返回-1时读完int data =  fr.read();while(data!= -1){System.out.println((char) data);data = fr.read();}//关闭流} catch (IOException e) {e.printStackTrace();}finally {try {fr.close(); //一定要执行关闭操作,放在finally} catch (IOException e) {e.printStackTrace();}}

注:close()方法一定要放在finally里,避免出现异常不再执行finally中的关闭流操作,导致错误。

设置每次读取n个字节,遍历读取:

//一次读n个字符,使用read(cbuf)方法去读。
char[] cbuf = new char[3];
int len;//读到的数组里的元素个数
while ((len = fr.read(cbuf)) != -1) {//每次直接遍历取出cbuf的长度会导致重复读,应该遍历已经读到的数据,读到几个遍历几个for (int i = 0; i < len.length; i++) {System.out.println(cbuf[i]);}
}

写出:

写出时,对应的file是可以不存在的,在写出时会自动创建文件。如果file已存在,可以使用 new FileWriter(file,true)来设置为以下操作是对原来的文本进行追加。为false时,则为覆盖原来的文件并且重新写入。

try {File file = new File("hello1.txt");//提供FileWriter对象,用于数据的写出fw = new FileWriter(file);//写出fw.write("happy hello");
} catch (IOException e) {e.printStackTrace();
}finally {try {fw.close();}
}

写入+写出操作:

try {//创建file对象,指明读入写出的文件File dufile = new File("hello.txt");File xieFile = new File("hello2.txt");//创建输入流和输出流的对象fr = new FileReader(dufile);fw = new FileWriter(xieFile);//读入、写出数据char[] cbuf = new char[5];int len;//每次读到的字符的个数while( (len = fr.read(cbuf))!=-1){      //每次写入Len个字符fw.write(cbuf,0,len);}
}

2.FileInputStream和FileOutputStream

    对于文本文件,使用字符流进行处理;对于非文本文件,使用字节流处理,字节流同时可对文本文件进行直接复制操作。

使用字节流FileInputStream处理非文本文件:

 FileInputStream fis = null;FileOutputStream fos = null;try {File srcFile = new File("1.jpg");File destFile = new File("2.jpg");fis = new FileInputStream(srcFile);fos = new FileOutputStream(destFile);//字节流,操作字节byte[] buffer = new byte[5];int len;while( (len = fis.read(buffer))!=-1){fos.write(buffer,0,len);}} catch (IOException e) {e.printStackTrace();}finally {if(fos != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}if (fis!=null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}

可以据此写一个指定文件的复制,改成copyFile方法

可以看一下花费的时间,后面可与更高效率的缓冲流进行对比:

long start = System.currentTimeMillis();
copyFile("1.jpg","3.jpg");
long end = System.currentTimeMillis();
System.out.println("操作花费的时间为:"+(end - start)+"ms");

先写到这……后面再写

java IO流:字节流、字符流相关推荐

  1. java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类

    目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...

  2. IO流 序列化反序列化 Properties 缓冲流 字节流 字符流

    package com.llb.io;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundE ...

  3. java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流

    一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...

  4. java网课|字节流字符流

    理解一下i和o? i:input输入 o:output输出 流:数据,1字符=2字节,1字节=8个二进制位 输入与输出: 输入–硬盘中的数据读取到内存中使用 输出–内存中的数据写入到硬盘中存储 内存只 ...

  5. java之高级的IO流,字符流与字节流

    IO流 今日内容介绍  标准输入流 & 转换流 & 打印流  对象操作流  Properties集合 第1章标准输入流 & 转换流 & 打印流 1.1标准输入输出 ...

  6. IO流 字符流 字节流 缓冲流 文件的复制

    IO流 IO概述 IO流就是一个管道,是用来在设备之间传输数据 input:相对于内存/程序 往进走输入流 output:相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1.输出流: FileW ...

  7. 01-21 IO流(字符流与字节流)

    IO流(字符流与字节流) 今日内容介绍  标准输入流 & 转换流 & 打印流  对象操作流  Properties集合 第1章标准输入流 & 转换流 & 打印流 ...

  8. java基础练习复习二:递归字节流字符流二

    本篇是基于java基础练习复习一:递归&字节流&字符流一, 如果对您有帮助 ,请多多支持.多少都是您的心意与支持,一分也是爱,再次感谢!!!打开支付宝首页搜"55672346 ...

  9. java byte char io流_吃透Java IO:字节流、字符流、缓冲流

    前言有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身, ...

  10. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

最新文章

  1. [微信小程序]单选框以及多选框实例代码附讲解
  2. matlab面向对象排序,matlab面向对象编程基础
  3. FFmpeg音频编码 ---- pcm转aac(使用新版ffmpeg API,亲测可用)
  4. 让LoadRunner再次走下神坛
  5. 模态对话框的消息循环原理及分析笔记
  6. (转)将cocos2dx项目从VS移植到Eclipse
  7. oracle堆,oracle被一堆insert和update堵死解决方案
  8. ffmpeg libx264_nginx+ffmpeg搭建流媒体服务器(直播流)
  9. Cesium多屏展示
  10. jde多目标_《和平精英》PEL职业联赛S3赛季:DKG战队获第四周周冠军,JDE“逆风翻盘”...
  11. grub2使用详解(官方手册)
  12. 如何单独编译Linux源代码中的驱动模块,比如NVMe驱动?
  13. CorelDRAW 里面如何将文字调整成半透明的颜色
  14. 用tar给linux .rar解压,Linux 下解压 rar 文件的方法
  15. 项目管理要分解目标,明确每个人的任务
  16. 数电篮球电子计分器设计
  17. glove.840B.300d glove词向量词嵌入文件国内服务器下载 出现麻烦阻塞的点时,就要思考google有没有更快捷的方法
  18. 一个很有意思的并查集详解
  19. 从技术角度告诉你,区块链到底有哪些特点和运作机制
  20. python for data analysis 操作usagov_bitly_data示例

热门文章

  1. K60学习笔记(三)——K60各模块概述
  2. AndroidStudio实现在图片上涂鸦并记录涂鸦轨迹
  3. L298N 小车应用(附代码)
  4. 【第8章:常用控件】
  5. 高数 吉米多维奇 785
  6. php mysql网站设计_基于PHP和MySQL的网站设计与实现
  7. 博士德霸道软件_霸道+网络版7.0
  8. 网管员不得不关注的九大热门网络技术
  9. Window驱动开发
  10. DOS-强制结束进程命令(ntsd命令/taskkill命令)使用教程