IO流(一)

IO流:输入输出的流动

IO流用来处理设备之间的数据传输

Java对数据的操作是通过流的方式

Java用于操作流的对象都在IO包中

流按操作数据分为两种:字节流与字符流 。

流按流向分为:输入流,输出流。

输入流和输出流相对于内存设备而言.

将外设中的数据读取到内存中:输入(做的动作就是读)

将内存的数据写入到外设中:输出。(写)

字节流:用于处理字节类型的数据的流对象,就成为字节流

分为字节读取流和字节输出流

字符流:为了处理文字数据方便而出现的对象。

其实这些对象的内部使用的还是字节流(因为文字最终也是字节数据),只不过,通过字节流读取了相对应的字节数,没有对这些字节直接操作。而是去查了指定的(本机默认的)编码表,获取到了对应的文字。

简单说:字符流就是 : 字节流+编码表。

字符流分为字符读取流,字符输出流

字节流的两个顶层父类

InputStream OutputStream

字符流的两个顶层父类

Reader Writer

Reader中的一些方法:

read() 读取单个字符。

read(char[] cbuf) 将字符读入数组。返回读取的字符数

read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。

读取方法都是阻塞式的方法

close() 关闭该流。

Writer中的一些方法:

write(String str)  写入字符串。

write(String str, int off, int len) 写入字符串的某一部分。

write(char[] cbuf)  写入字符数组。

write(char[] cbuf, int off, int len) 写入字符数组的某一部分。

write(int c)  写入单个字符。

都是将数据写到临时存储缓冲去中

flush() 刷新此流。将数据直接刷新到目的地中

close() 关闭资源,在关闭前,会先调用flush()方法刷新。

由这四个类派生出来的子类名称都是 以其父类名作为子类名的后缀。

注:

定义文件路径时,可以用“/”或者“\\”。??

在创建一个文件时,如果目录下有同名文 件将被覆盖。

在读取文件时,必须保证该文件已存在, 否则出异常。

FileWriter:可以往文件中写入字符数据的字符输出类流

既然是往一个文件中写入文字数据,那么在创建时,就必须指定该文件的名称,若文件不存在,则会自动创建,文件存在,则会被覆盖,如果构造函数中,假如true,可以实现,对文件的续写

将一些文字存储到硬盘一个文件内

package IO;import java.io.FileWriter;
import java.io.IOException;public class WriterDemo {public static void main(String[]args) throws IOException{//创建一个可以往文件中写入字符数据的字符输出流对象。并明确目的地FileWriter fw = new FileWriter("F:\\WriteDemo.txt");//将数据写到临时缓冲区中fw.write("abcde");//将数据刷新到目的地中fw.flush();//关闭流fw.close();}
}

FileReader:用于读取字符文件的便捷类

创建读取字符流对象时,必须明确被读取的文件,一定要确定该文件是存在的

读取硬盘中的文件,将其打印在控制台上

package IO;import java.io.FileReader;
import java.io.IOException;public class ReaderDemo {public static void main(String[] args) throws IOException {// 用读取流关联一个已经存在的文件FileReader fr = new FileReader("F://WriteDemo.txt");//创建一个临时存放数据的数组。char[] ch = new char[1024];//调用流对象的读取方法将流中的数据读入到数组中。int len = 0;while((len=fr.read(ch))!=-1){//将数据打印在控制台上System.out.println(new String(ch,0,len));}}}

缓冲区:对要操作的内容进行临时缓存

作用:可以提高效率

IO流缓冲区的出现,提高了流对数据的读写效率,所以创建缓冲区之前必须先有流。要结合流才可以使用,在流的基础上对流的功能进行了增强

缓冲区的基本思想:其实就是定义容器将数据进行临时存储。

对于缓冲区对象,其实就是将这个容器进行了封装,并提供了更多高效的操作方法。

字符流缓冲区

BufferedReader BufferedWriter

BufferWriter的出现增强了Writer中的write方法。

但是增强过后,BufferWriter对外提供的还是write方法。只不过是高效的。所以写的实质没有变,那么BufferWriter也是Writer中的一员。

BufferedReader中的特有方法:

readLine():读一行,当没有读到时,返回null,其实,它使用了读取缓冲区的read方法,将读取的字符进行了缓冲并判断断行标记,将标记前的缓冲数据变成了字符串返回

BufferedWriter中的特有方法:

newLine():换行

用缓冲区复制文本

package IO;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class BufferedDemo {public static void main(String[] args) throws IOException {// TODO Auto-generated method stub//创建字符读取流缓冲区,关联指定文件BufferedReader br = new BufferedReader(new FileReader("F://Buffered.txt"));//创建字符输出流缓冲区,并指定目的地BufferedWriter bw = new BufferedWriter(new FileWriter("G://buffered.txt"));//读取文件内容,并将其写到目的地中String s = null;while((s=br.readLine())!=null){bw.write(s);bw.newLine();bw.flush();}//关闭流br.close();bw.close();}}

自定义的读取缓冲区:其实就是模拟一个BufferedReader

package IO;import java.io.IOException;
import java.io.Reader;/*** 自定义的读取缓冲区。其实就是模拟一个BufferedReader.* * 分析:* 缓冲区中无非就是封装了一个数组,* 并对外提供了更多的方法对数组进行访问。* 其实这些方法最终操作的都是数组的角标。* * 缓冲的原理:* 其实就是从源中获取一批数据装进缓冲区中。(用的使其父类的read(buf)方法)* 在从缓冲区中不断的取出一个一个数据。* * 在此次取完后,在从源中继续取一批数据进缓冲区。* 当源中的数据取光时,用-1作为结束标记。 * * * @author Administrator**/
public class MyBufferedReader extends Reader {private Reader r;//定义一个数组作为缓冲区。private char[] buf = new char[1024];//定义一个指针用于操作这个数组中的元素。当操作到最后一个元素后,指针应该归零。   private int pos = 0;   //定义一个计数器用于记录缓冲区中的数据个数。 当该数据减到0,就从源中继续获取数据到缓冲区中。private int count = 0;MyBufferedReader(Reader r){this.r = r;}/*** 该方法从缓冲区中一次取一个字符。 * @return* @throws IOException*/public int myRead() throws IOException{if(count==0){count = r.read(buf);pos = 0;}if(count<0)return -1;char ch = buf[pos++];count--;return ch;}//读取一行public String myReadLine() throws IOException{StringBuilder sb = new StringBuilder();int ch = 0;while((ch = myRead())!=-1){if(ch=='\r')continue;if(ch=='\n')return sb.toString();//将从缓冲区中读到的字符,存储到缓存行数据的缓冲区中。sb.append((char)ch);}       if(sb.length()!=0)return sb.toString();return null;}public void myClose() throws IOException {r.close();}@Overridepublic int read(char[] cbuf, int off, int len) throws IOException {return 0;}@Overridepublic void close() throws IOException {}
}

字节流

InputStream OutputStream

字节读取流一个方法available():返回读取文件的字节数,数据很大不建议使用这个,容易造成内存溢出

子类:

FileInputStream FileOutputStream

带有缓冲区的

BufferedInpuStream BufferedOutputStream

用字节流复制一个mp3文件

package IO;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class InputStreamDemo {public static void main(String[] args) throws IOException {//为了高效,用缓冲区,确定源复制文件BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F://Avril Lavigne - 滑板少年.mp3"));//确定复制的目的,为了高效,用缓冲BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("F://1.mp3"));//方式一//不建议使用,效率太慢/*int len =0;while((len=bis.read())!=-1){bos.write(len);}*///方式二,建议使用这种/*int len =0;byte[]buf = new byte[1024];while((len=bis.read(buf))!=-1){bos.write(buf,0,len);}*///方式三,数据太大容易造成内存溢出byte[]buf = new byte[bis.available()];bis.read(buf);bos.write(buf);bis.close();bos.close();}}

Java基础之IO流(一)相关推荐

  1. 【Java基础】· IO流习题详解

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  2. Java基础学习—— IO流

    Java基础学习-- IO流 1 文件 1.1 文件的创建 1.2 文件常用的方法 2 IO流 2.1 FileInputStream 2.2 FileOutputStream 2.3 文件的拷贝 2 ...

  3. Java基础进阶IO流概述

    1.IO流,什么是IO? I : Input O : Output 通过IO可以完成硬盘文件的读和写. 2.IO流的分类? 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物 往内存 ...

  4. Java基础之IO流

    IO流用来处理设备间数据传输,java对数据的操作是通过流的方式,而这些操作流的对象被封装在IO包中.流可以分为字符流和字节流.字符流可以设置编码方式,这就使得处理文本更加方便. IO常用基类 字节流 ...

  5. Java基础知识——IO流

    简介 IO是指Input/Output,即输入和输出.以内存为中心: Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等等 Output指把数据从内存输出到外部,例 ...

  6. 【java基础】IO流是啥?有啥用?(上)

    今天我们说说java代码中对文件的操作,比如新建删除文件,读取文件内容等. File类 File类用于操作文件和目录,可对文件或目录进行新建,删除和重命名等操作.但是如果要访问文件内容本身,就需要用到 ...

  7. Java基础:IO 流中的 flush

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点 这里 可以跳转到教程. 内容概要 Java IO ...

  8. java基础之 IO流

    javaIO流 IO流 : (input  output) 输入输出流 :输入 :将文件读到内存中 输出:将文件从内存输出到其他地方. IO技术的作用:主要就是解决设备和设备之间的数据传输问题.比如: ...

  9. Java基础之IO流操作

    第14章 File类与IO流 主要内容 File类 字节流 字符流 文件流 缓冲流 转换流 数据流 对象流 打印流 Scanner与System与IO流 教学目标 使用File类对象表示文件或目录 能 ...

最新文章

  1. zookeeper3.4.6配置实现自动清理日志
  2. 口碑扑街光环不在,2018将是苹果手机最难熬的年头!
  3. Ubnutu虚拟机怎么修改开机密码?(在已知旧密码的情况下,开机后设置新的密码的方法)
  4. (chap8 确认访问用户身份的认证) BASIC认证(基本认证)
  5. 【AI产品】一键去除杂物,Photo Eraser助你拍出美丽照片
  6. 反三角函数怎么表示_交流电的功率因数怎么算(里面有例子)
  7. java 崩溃日志_Android收集程序崩溃日志的方法
  8. 这不是特效也不是魔术!
  9. java中值传递和引用传递
  10. 关于范围for语句的使用
  11. 一个想法照进现实-《IT连》创业项目:万事开头难
  12. Java中static的作用详解_详解java中static关键词的作用
  13. 乐视超级电视再创辉煌?超5 X55全面屏电视上手体验
  14. Linux下安装Nginx详细图解教程
  15. 最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)
  16. python使用正则验证电子邮件_在Python中使用正则表达式提取电子邮件地址
  17. 账龄分析表excel模板_经理都头疼的财务分析表!新手会计用10套模板半时搞定,厉害...
  18. 地铁供电系统原理图_地铁供电系统的运行方式及特点分析吴迪原稿(图文高清版)...
  19. ssm基于java的线上阅读平台的设计与实现毕业设计源码291023
  20. 联想笔记本G510升级固态硬盘(SSD)血泪教程!!!

热门文章

  1. 阻容感基础05:电容器原理(2)-电容器参数
  2. 气象地图gis php代码,基于百度地图API实现自动气象站点信息显示
  3. SQL 中判断条件的先后顺序,会引起索引失效么?
  4. cmake命令之foreach
  5. L1-016. 查验身份证
  6. 解决png图片在IE6下的透明问题
  7. MT25QL128/MTQL256_FLASH驱动——基于华大单片机
  8. 突然不能从主机向虚拟机上拷贝文件了
  9. IEEE帐号的创建和ORCid
  10. [转载]Android实现更换皮肤功能