io流

概念

把不同的输入输出源(键盘,盘符文件,网络)抽象为流,通过流的方式去访问数据,也叫数据流

流的特点

1)流是有序的
2)流是先进先出的
3)流可以控制数据的流动方向
4)流是可以关闭的
5)流的作用主要是用来读取数据和写入数据的

2流的分类

根据流动方向: 输入流 输出流
根据数据单位: 字节流 字符流
根据功能 : 节点流 处理流

2.1 java封装了4个流的基类

输入流 inputStream Reader
输出流 OutputStream Writer
字节流 字符流

3字节流

1)字节流可以处理所有的数据文件: 图片,视频文件 纯文本文件

3.1inputStream

1)字节输入流,主要用来读取字节数据
2)英文在不同的字符编码集中都是一个字节,在gdk中占两个字节,utf—8中中文占三个字节
3)inputStream是个抽象类,如果想用流去处理文件,可以使用它直接子类FileinputStream

###3.1.2方法

package test.io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;public class IoTest {public static void main(String[] args) throws IOException {InputStream inputStream=new FileInputStream(new File("a.txt"));//创建一个缓存区对象byte[] buf=new byte[2];int len;//长度//read(buf)方法会将一次性读取到的多个字符,//存储在参数数组中,并且返回读取到的个数while((len=inputStream.read(buf))!=-1){String string=new String(buf,0,len);System.out.print(string);}//关闭流inputStream.close();
}
//关闭流close()所有的流一旦创建成功
//,就相当于开启了就,在使用流结束后,需要关闭流,否怎会资源浪费
}

3.2OutputStream

  1. 字节输出流,可以写任何文件的数据
    2)通常如果操作的是文件,使用它的子类FileOutputStream来创建对象
package test.io;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class IoTest2 {public static void main(String[] args) throws IOException {//如果没有该文件,会自动创建该文件//OutputStream outputStream=new FileOutputStream(new File("b.txt));OutputStream outputStream=new FileOutputStream("b.txt",true);//ture是用来决定每一次是覆盖写入还是在后面加着写入//写outputStream.write('a');//outoutStream.write('中');byte[]bs={'a','b','c'};byte[] bs1="我爱中国".getBytes();outputStream.write(bs1);outputStream.write(bs1,0,8);//关闭outputStream.close();}
}

案例:
将a文件中的数据复制到b文件中去

package test.io;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;public class Test3 {public static void main(String[] args) throws IOException {//创建读取的流和写入的流InputStream reader=new FileInputStream("a.txt");OutputStream wirter=new FileOutputStream("b.txt");//读取byte[] bs=new byte[12];int len;while((len=reader.read(bs))!=-1){wirter.write(bs,0,len);}reader.close();wirter.close();}
}

4 字符流

1)可以操作字符的流,比如纯文本的文件
2)ReaderWeiter都是抽象类

4.1Reader

package test.io;import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class Test4 {public static void main(String[] args) throws IOException {Reader reader=new FileReader("a.txt");//将一次性读取多个字符,存储在缓冲区char[] buf=new char[7];int len;while((len= reader.read(buf))!=-1){System.out.println(new String(buf,0,len));}//关闭reader.close();}
}

4.2 writer

package test.io;import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class Test5 {public static void main(String[] args) throws IOException {Writer writer=new FileWriter("c.txt");//关闭writer.write("a");writer.write("中");writer.write("天气不错".toCharArray());//存入换行writer.write("\n臧村花");writer.write("asdfs".toCharArray(),0,3);writer.write("absf",0,3);//将缓存区中的数据刷新到文件中,尽量不要用的太频繁writer.flush();//关闭流之前,会将所有缓存区中数据全部刷新到文件中,即close之前会执行fluse操作writer.close();
}
}

5 缓冲流

作用:提高读写效率
字节流缓冲区:BufferedInputStream BufferedOutputStream
字节流缓冲流: BufferedReader BufferedWriter
是可以处理流的流,也叫包装流,高级流 处理流

5.1 BufferedInputStream

package test.io;import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;public class Test6 {public static void main(String[] args) throws IOException {InputStream in=new FileInputStream("a.txt");BufferedInputStream inputStream=new BufferedInputStream(in);byte[] buf=new byte[1024];int len;while((len=inputStream.read(buf))!=-1){System.out.println(new String(buf,0,len));}inputStream.close();
}
}

5,2 BufferedOutputStream

BufferedOutputStream outputStream = new BufferedOutputStream(new
FileOutputStream("d.txt"));
outputStream.write("我爱中国".getBytes());
outputStream.close();

5.3BufferedReader

BufferedReader reader = new BufferedReader(new FileReader("a.txt"));
String data;
// readLine()方法能一次性读取一行,即他会自行判断换行符,如果有换行符,则将前面的数据进行
返回
while ((data = reader.readLine()) != null) {System.out.println(data);
}
reader.close();

5.4 BufferedWriter

BufferedWriter writer = new BufferedWriter(new FileWriter("e.txt"));
writer.write("千里冰封,万里雪飘");
// 换行符
writer.newLine();
writer.write("望长城内外,位于茫茫");
writer.flush();
writer.close();

案例:

package com.buffered;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Copy {public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new FileReader("a.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("e.txt"));
String lineStr;while ((lineStr = reader.readLine()) != null) {System.out.println(lineStr);writer.write(lineStr);writer.newLine();// 刷新writer.flush();
}reader.close();writer.close();
}
}

6 转换流

1)将不好操作的字节流转变成好操作的字符流,即转换流是个字符流
2)没有将字符流转换成字节流的流
3)InputStreamReader OutputStreamWriter
4)作用:1)好操作 2)可以设置读取或者写的字符编码集

用法

InputStreamReader reader = new InputStreamReader(new
FileInputStream("a.txt"));
char[] cbuf = new char[1024];
int len;
while ((len = reader.read(cbuf)) != -1) {System.out.println(new String(cbuf, 0, len));
}
reader.close();
案例
InputStreamReader reader = new InputStreamReader(new FileInputStream("a.txt"),
"gbk");
OutputStreamWriter writer = new OutputStreamWriter(new
FileOutputStream("f.txt"), "gbk");
char[] cbuf = new char[1024];
int len;
while ((len = reader.read(cbuf)) != -1) {System.out.println(new String(cbuf, 0, len));
writer.write(cbuf, 0, len);
writer.flush();
}
reader.close();
writer.close();
InputStreamReader reader = new InputStreamReader(new FileInputStream("a.txt"),
"gbk");
BufferedReader reader2 = new BufferedReader(reader);
OutputStreamWriter writer = new OutputStreamWriter(new
FileOutputStream("f.txt"), "gbk");
BufferedWriter writer2 = new BufferedWriter(writer);
String lineStr;
while ((lineStr = reader2.readLine()) != null) {writer2.write(lineStr);
writer2.newLine();
writer2.flush();
}
reader.close();
writer.close();
writer2.close();
reader2.close();
BufferedReader reader2 = new BufferedReader(new InputStreamReader(new
FileInputStream("a.txt"), "gbk"));
BufferedWriter writer2 = new BufferedWriter(new OutputStreamWriter(new
FileOutputStream("f.txt"), "gbk"));
String lineStr;
while ((lineStr = reader2.readLine()) != null) {writer2.write(lineStr);
writer2.newLine();
writer2.flush();
}
writer2.close();
reader2.close();

案例

键盘录入一些话,将这些话存储到文件中
public static void main(String[] args) throws IOException {// 读取键盘录入的信息(字节信息)
InputStreamReader reader = new InputStreamReader(System.in);
7 流的标准格式
BufferedReader reader2 = new BufferedReader(reader);
// 写的流
BufferedWriter writer = new BufferedWriter(new FileWriter("g.txt"));
String lineStr;
// 每次调用readline方法,键盘录入的一行信息就存储到lineStr中了
// reader2.readLine()相当于一个阻塞方法
while ((lineStr = reader2.readLine()) != null) {if (lineStr.equalsIgnoreCase("over")) {break;
}
writer.write(lineStr);
writer.newLine();
writer.flush();
}
reader.close();
reader2.close();
writer.close();

7 流的标准格式

package com.buffered;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {public static void main(String[] args) {// 读取键盘录入的信息(字节信息)
BufferedReader reader2 = null;
FileReader reader = null;
// 写的流
BufferedWriter writer = null;
try {reader = new FileReader("h.txt");
reader2 = new BufferedReader(new InputStreamReader(System.in));
writer = new BufferedWriter(new FileWriter("g.txt"));
String lineStr;
// 每次调用readline方法,键盘录入的一行信息就存储到lineStr中了
// reader2.readLine()相当于一个阻塞方法
while ((lineStr = reader2.readLine()) != null) {if (lineStr.equalsIgnoreCase("over")) {break;
}
writer.write(lineStr);
writer.newLine();
writer.flush();
}
} catch (IOException e) {1)在try上方定义流
2)在try中创建流对象和逻辑处理
3)在finally中关闭流,关闭流之前需要判断流是否是null
// TODO Auto-generated catch block
e.printStackTrace();
} finally {try {if (reader2 != null) {reader2.close();
}
if (writer != null) {writer.close();
}
if (reader != null) {reader.close();
}
} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("over");
}
}

1)在try上方定义流
2)在try中创建流对象和逻辑处理
3)在finally中关闭流,关闭流之前需要判断流是否是null

day16:io流的相关概念及其应用相关推荐

  1. 字符流的相关概念和相关方法的使用、IO异常的处理以及Properties属性集

    一.字符流 当使用字节流读取文本文件时,可能会有一个小问题.就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以Java提供一些字符流类,以字符为单位读写数据,专 ...

  2. 总是记不住java的IO流用法?用N个问题教你掌握java IO流

    本文分享自华为云社区<总是记不住java的IO流用法?用N个问题教你掌握java IO流>,原文作者:breakDraw . Java IO 体系看起来类很多,感觉很复杂,但其实是 IO ...

  3. IO流,多线程,网络编程(4)JavaSE

    1 IO流 Java如何操作电脑上的文件和文件夹?通过File类对它们进行操作 因为Java是面向对象的,所以最擅长的就是操作对象,将盘符上的文件/目录的各种信息进行了封装,封装为一个对象,我们程序就 ...

  4. 2021年大数据Flink(十):流处理相关概念

    目录 流处理相关概念 数据的时效性 ​​​​​​​流处理和批处理 ​​​​​​​流批一体API DataStream API 支持批执行模式 API 编程模型 ​​​​​​​流处理相关概念 数据的时效 ...

  5. Java IO 流 学习 总结

    I/O  主要是对文件进行处理, 其主要包含3个方面的内容 1 input 输入 2 out 出入 3 File 文件 Java 流的概念 流是一组有序的数据序列,流提供了一条通道程序,可以是这条通道 ...

  6. Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter

    Java IO流学习总结四:缓冲流-BufferedReader.BufferedWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/det ...

  7. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

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

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

  9. Java基础知识回顾之六 ----- IO流

    前言 在上一篇文章中,回顾了Java的多线程.而在本篇文章中主要介绍Java IO的相关知识. IO的介绍 什么是IO? IO的名称又来是Input与Output的缩写,也就是输入流和输出流.输入流用 ...

最新文章

  1. 实现接口与显示实现接口的区别
  2. JavaScript实现levenshteinDistance字符串编辑距离算法(附完整源码)
  3. linux shell 切割文件,linux shell 将文件按照行数以及顺序拆分成多个文件
  4. GoLang学习笔记——data_type
  5. windows远程桌面_如何使用Windows远程桌面连接Ubuntu 干货
  6. loss function
  7. HTML div 滚动条样式设计
  8. Shell命令-磁盘与文件系统之dumpe2fs、dump
  9. Gprinter Android SDK V2.1.4 使用说明
  10. 格式化输出的函数printf()用法
  11. 超过 C++、压制 Java 与 C,Python 拔得 TIOBE 年度编程语言!
  12. [已解决]Eclipse 插件Maven在使用 add dependency,找不到包,解决办法
  13. 关于SPSS16的安装及教程
  14. Lua AES加解密
  15. DIY制作修改替换PPC手机短信背景图片的技巧
  16. 《Python和Pygame游戏开发指南》——导读
  17. Swiper的种种踩坑与解决方案
  18. 笔记本电脑无法进入睡眠状态_电脑进入睡眠模式后打不开屏幕怎么办
  19. docker swarm英文文档学习-7-在集群中管理节点
  20. linux下安装MySQL5.7及遇到的问题总结

热门文章

  1. 工作与生活之平衡(4)微博病患者
  2. 计算机整机配置单,小编教你电脑主机配置清单推荐
  3. 【支付】uniapp之app中的支付宝、微信支付的实现及orderInfo的说明
  4. 前端匹配服务器地址修改文件,修改服务器的监听地址
  5. sqlserver 添加字段说明
  6. QTabWidget的详细使用
  7. 开源HTML5拓扑图绘制工具
  8. 智慧农业解决方案-全套完整合集
  9. SCSI硬盘跳线设主从盘(强烈推荐此文)
  10. 火车票能不能选座_买火车票可以选座位吗