文章目录

  • IO流简介
  • IO流原理
  • 流的分类
  • IO 流体系
  • 节点流和处理流
  • 节点流操作

IO流简介

I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。

Java程序中,对于数据的输入/输出操作以“流(stream)” 的方式进行。

java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。


IO流原理

输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。

输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。


流的分类

①按操作数据单位不同分为:字节流(8 bit 一般用于非文本文件),字符流(16 bit 一般用于文本文件)

②按数据流的流向不同分为:输入流,输出流(相对的)

③按流的角色的不同分为:节点流(直接处理文件),处理流(处理被包含的流)


IO 流体系

Java的IO流共涉及40多个类,实际上非常规则,都是从如下4个抽象基类派生的。
由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。


节点流和处理流

节点流:直接从数据源或目的地读写数据


处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。


节点流操作

读入以FileReader为例

import java.io.File;
import java.io.FileReader;
import java.io.IOException;/*** @Author: Yeman* @Date: 2021-09-25-16:30* @Description:*/
public class FileReaderTest {public static void main(String[] args) {FileReader fileReader = null;try { //一定需要try-catch//1、实例化File对象,指明要操作的文件File file = new File("IO\\hello.txt");//2、提供具体的流fileReader = new FileReader(file);//3、读取操作int read = fileReader.read(); //空参为一位一位读取,末尾返回-1while (read != -1){System.out.print((char) read);read = fileReader.read();}} catch (IOException e) {e.printStackTrace();} finally {//4、关闭流try {if (fileReader != null) { //确保不会因具体流未创建而产生空指针异常fileReader.close();}} catch (IOException e) {e.printStackTrace();}}}
}

import java.io.File;
import java.io.FileReader;
import java.io.IOException;/*** @Author: Yeman* @Date: 2021-09-25-16:30* @Description:*/
public class FileReaderTest {public static void main(String[] args) {FileReader fileReader = null;try { //一定需要try-catch//1、实例化File对象,指明要操作的文件File file = new File("IO\\hello.txt");//2、提供具体的流fileReader = new FileReader(file);//3、读取操作char[] chars = new char[5];//char型数组为参数,该数组相当于一个容器,把读取放在里面,返回该次读取的个数,末尾返回-1// 最后若不够,容器后部分仍为上一次取的,前部分则被新的这次取到的覆盖了int length = fileReader.read(chars);while (length != -1){for (int i = 0; i < length; i++) {System.out.print(chars[i]);}length = fileReader.read(chars);}} catch (IOException e) {e.printStackTrace();} finally {//4、关闭流try {if (fileReader != null) {fileReader.close();}} catch (IOException e) {e.printStackTrace();}}}
}

写出以FileWriter为例

import java.io.*;/*** @Author: Yeman* @Date: 2021-09-25-16:30* @Description:*/
public class FileReaderTest {public static void main(String[] args) {FileWriter fw1 = null; //若硬盘中不存在file,创建之;若存在,内容覆盖之try {//1、实例化File对象,指明要写出的文件File file = new File("IO\\hi.txt");//2、创建具体的流fw1 = new FileWriter(file);//FileWriter fw2 = new FileWriter(file,false); //若硬盘中不存在file,创建之;若存在,内容覆盖之//FileWriter fw3 = new FileWriter(file,true); //若硬盘中不存在file,创建之;若存在,内容追加之//3、写出操作fw1.write("Hello World!\n",0,5); //写出“Hello”fw1.write("你好,世界!"); //写出“你好,世界!”} catch (IOException e) {e.printStackTrace();} finally {//4、关闭流try {if (fw1 != null) fw1.close();} catch (IOException e) {e.printStackTrace();}}}
}

实现一个图片复制(读入写出,使用字节流)

import java.io.*;/*** @Author: Yeman* @Date: 2021-09-25-16:30* @Description:*/
public class FileReaderTest {public static void main(String[] args) {FileInputStream fis = null;FileOutputStream fos = null;try {File inFile = new File("IO\\input.jpg");File outFile = new File("IO\\output.png");fis = new FileInputStream(inFile);fos = new FileOutputStream(outFile);byte[] bytes = new byte[1024]; //通常使用1024,2的10次方int length = fis.read(bytes);while (length != -1){fos.write(bytes,0,length);length = fis.read(bytes);}} catch (IOException e) {e.printStackTrace();} finally {try {if (fos != null) fos.close();} catch (IOException e) {e.printStackTrace();}try {if (fis != null) fis.close();} catch (IOException e) {e.printStackTrace();}}}
}

JavaIO流(2)--IO流原理、流的分类及节点流文件流操作相关推荐

  1. 【JavaSE8 高级编程 IO/NIO】IO入门系列①之抽象基类节点流转换流 2019_8_16

    IO输入输出 IO 实现体系概述 [文档级] ①IO基石 四抽象基类 [IS,OS / R,W]抽象基类简述 子类及其实现接口 字节(FIS,OIS)字符(BR,ISR)读 字节(FOS,OOS,PS ...

  2. 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...

    因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...

  3. java 文件流关闭 finally_Java如何正确的使用try catch finally关闭文件流的总结

    上学的时候,也许老师告诉你用完文件流记得要关闭,可能为了省事,他也没仔细的给你示范如何关闭, 实际开发中,要是不能正确关闭流,服务器分分钟炸掉,那是很正常的. 一般都是新人才会有这个问题.当然都是从新 ...

  4. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

  5. c++语言文件流,C++ IO类、文件输入输出、string流详细讲解

    新的C++标准中有三分之二的内容都是描述标准库.接下来重点学习其中几种核心库设施,这些是应该熟练掌握的. 标准库的核心是很多容器类(顺序容器和关联容器等)和一簇泛型算法(该类算法通常在顺序容器一定范围 ...

  6. C++文件操作与文件流

    文件的概念 1.1文件是程序设计中一个重要的概念,所谓"文件",一般指存储在外部介质上数据的集合. 1.2外存文件包括磁盘文件,光盘文件,和U盘文件. 1.3对用户来说常用的文件类 ...

  7. jQuery_Ajax下载服务器文件流的方法

    一般ajax,只能处理xml, json, script, or html类型,对返回的文件流却没办法下载了. 本人编写了一个AJAX插件,实现文件流下载. 然后JAva后台采用往response里写 ...

  8. post方式返回文件流实现前端blob下载,responseType: ‘blob‘无效

    responseType: 'blob' 一般情况下,下载分为好几种,但是常用的是get下载文件流直接下载 post下载文件流是很少见的,但是鉴于参数太多,不能走get 只能走post下载,post下 ...

  9. 淘晶驰串口屏入门(七)数据记录控件、文件浏览器控件、文件流控件

    一.数据记录控件 1.注意data+数字开头的为数据记录控件 2.只有x3和x5系列的串口屏支持数据记录控件,k0,t0和t1系列不支持 3.使用data0.insert方法向数据记录控件添加记录 4 ...

  10. C++学习22:C++文件流

    总结放前面:最后总结一下:用这个东西,不如用C标准库和linux系统调用,如果不是为了让C++知识饱满一点,真不想研究这东西. 文件流是以磁盘中的文件作为输入.输出对象的数据流.输出文件流将数据从内存 ...

最新文章

  1. iOS:切换视图的第三种方式:UITabBarController标签栏控制器
  2. 最有效的创建大数据模型的6个技巧
  3. Linus 在圣诞节想提前放假做了这些解释,哈哈哈
  4. (23)Vue.js组件介绍
  5. 一加9 Pro渲染图曝光:6.55英寸曲面屏 左上角打孔
  6. 任正非给华为代表处CFO定位:能力不够的赶快补
  7. mysql数据库什么情况下会锁表_mysql数据库锁的产生原因及解决办法
  8. Atitit 服务器运维linux常用命令attilax总结.docx 1. 重要命令 1 1.1. 重启系列 1 1.2. 重启nginx 1 1.3. 重启tomcat 1 2. 其他 2 2
  9. c++程序添加资源文件及释放文件
  10. DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努力越幸运
  11. 基于机器学习方法对销售预测的研究
  12. arm mali 天梯图_2018最新CPU天梯图 2018年2月CPU性能天梯图最新版
  13. stack容器—C++笔记
  14. JAVA最佳学习方法
  15. 2017第一届河北省大学生程序设计竞赛题解
  16. MyEclispe发布web项目-遁地龙卷风
  17. 很多事情都由计算机或机器人来完成英语,八年级下册英语作文6篇
  18. Java基本知识——继承与组合
  19. 包头师范学院计算机系,包头师范学院数学科学学院
  20. 百度启动干部轮岗 涉及三位副总裁

热门文章

  1. 在领域驱动的设计,贫乏的领域模型,代码生成,依赖项注入等方面……
  2. python字典_Python 字典
  3. Linux 命令之 unset -- 删除指定的shell变量或函数
  4. 框架下载_25. Scrapy 框架-下载中间件Middleware
  5. matlab表达式,表达式 - MATLAB Simulink - MathWorks 中国
  6. 睡眠 应该用 a加权 c加权_在神经网络中提取知识:学习用较小的模型学得更好...
  7. 为什么写C语言弹不出窗口,居然还有SB说C写不出窗口的..
  8. 在python中字符串可以使用什么来表示_Python 字符串定义
  9. C 多线程的互斥锁应用RAII机制
  10. 荣耀6plus+android5.1,荣耀66Plus EMUI3.0开发版5.5.1版本发布说明