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

文章目录

    • 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();}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux权限体系有哪些角色,详解Linux下系统权限

一、权限概述1. 什么是权限权限&#xff1a;在计算机系统中&#xff0c;权限是指某个计算机用户具有使用软件资源的权利。软件资源&#xff1a;Linux系统中&#xff0c;一切皆文件&#xff01;SO&#xff0c;这里的软件资源就是文件资源。所以&#xff0c;我们今天所讲的权限&a…

让你的数据和对象有源有出路,一文打尽,Java常用IO流处理流(处理字节流文件流)缓冲流、转换流、对象流等

文章目录缓冲流转换流标准输入输出流打印流数据流对象流随机存取文件流Java NIO缓冲流 为了提高数据读写的速度&#xff0c;Java API提供了带缓冲功能的流类&#xff0c;在使用这些流类时&#xff0c;会创建一个内部缓冲区数组&#xff0c;缺省使用8192个字节(8Kb)的缓冲区。 …

linux网卡e1000下载,Linux E1000网卡驱动分析

本分析主要针对e1000网卡,驱动源码为7.3.20-k2。本文的目的不是为了讲述如何编写驱动程序,主要是分析网卡驱动内部的实现机制。Linux-千兆网卡驱动实现机制浅析作者: Minit, 出处:博客, 责任编辑: 罗丽艳,2009-03-29 00:001.引言本分析主要针对e1000网卡&#xff0c;驱动源码为…

迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等

文章目录网络编程概述网络通信要素要素一IP和端口号要素二网络协议TCP网络编程UDP网络编程URL网络编程Java网络编程基础网络编程概述 Java是Internet上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序员能够很容易开发常见的网络应用程序。 Java提…

Linux脚本双引号字符去除,shell命令去除字符串里双引号

echo \"refs/changes/84/727284/1\" | sed s/\"//gshell变量内字符替换和变量字符修改a12345123#将${a}里的第一个123替换为321b${a/123/321};echo "echo variable a"echo $aecho "echo variable b"echo $ba12345123#将${a}里的所有123替换…

12000+字Java反射,一起全面了解Java反射机制,为学习框架铺路

文章目录Java反射机制理解Class类获取Class类实例类的加载过程类加载器ClassLoader创建运行时类的对象获取运行时类的结构调用运行时类的指定结构动态代理Java反射机制 Reflection是被视为动态语言的关键&#xff0c;反射机制允许程序在执行期借助于Reflection API取得任何类的…

linux 中 id指令,Linux id 命令

要登入一台计算机&#xff0c;我们需要一个用户名。用户名是一个可以被计算机识别的身份。基于此&#xff0c;计算机会对使用这个用户名的登陆的人应用一系列的规则。在Linux系统下&#xff0c;我们可以使用 id 命令。什么是 id 命令id 命令可以显示真实有效的用户 ID(UID) 和组…

提高Java表达能力!不落伍一起掌握Java8中Lambda表达式、函数式接口及方法构造器数组引用

文章目录函数式接口概述函数式接口示例内置函数式接口Lambda简述Lambda语法方法引用构造器引用数组引用函数式接口概述 只包含一个抽象方法的接口&#xff0c;称为函数式接口。 可以通过 Lambda 表达式来创建该接口的对象。 可以在一个接口上使用 FunctionalInterface 注解&…

一文一起,学习功能强大的Java8新StreamAPI,让集合的操作得心应手

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 文章目录Stream 概述Stream 实例化Stream 中间操作Stream 终止…

java erlang_Java开发人员的Erlang

java erlang您可能没有注意到&#xff0c;但是距离我上次发布博客已经过去了几个星期。 这是由于我的Soleus骨折了&#xff0c;而且我的腿是石膏模型。 不能动弹&#xff0c;我认为调查完全不同的东西是个好主意–要么看那一天&#xff0c;要么看白天的电视&#xff0c;尽管Koj…

新!详细!win10下MySQL数据库干净卸载安装与配置

微信公众号&#xff1a;创享日记 发送&#xff1a;sqlyog 获取SQLyog客户端安装包 文章目录官方下载卸载清除安装变量配置测试SQLyog客户端下载官方下载 链接直达&#xff1a;点击官方下载 1、选择 2、下载&#xff1a;点击download进入下载页面&#xff0c;选择“No thanks,…

linux系统基本使用教程,Linux系统的基本使用入门

终端&#xff1a;用户与主机交互&#xff0c;必然会使用到的设备&#xff0c;在Linux中也使用文件进行标识物理终端:直接接入到本机的显示器和键盘设备&#xff1a;又叫控制台&#xff1a;console物理终端设备文件&#xff1a;/dev/console虚拟终端&#xff1a;附加在物理终端之…

最基础,MySQL基础查询SELECT

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 1、查询表中字段 USE 要操作的数据库名; SELECT 查询的字段 …

rest和rest ful_为什么REST如此重要

rest和rest ful这篇文章致力于REST&#xff0c;一种塑造Web服务的架构风格&#xff0c;以及IT历史上最容易被误解的概念。 这篇文章针对的是正在设计Web服务api的人&#xff0c;他们没有完全了解REST的实际含义。 我想给你个主意。 这篇文章也发给了那些想知道REST意味着什么的…

流利的接口不利于维护

流利的接口 &#xff08;最初由Martin Fowler 创造&#xff09;是一种非常方便的与OOP中的对象进行通信的方式。 它使他们的外墙更易于使用和理解。 但是&#xff0c;它破坏了它们的内部设计&#xff0c;使它们更难以维护。 Marco Pivetta在他的博客文章Fluent Interfaces is E…

减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现

文章目录基本介绍应用实例基本介绍 当一个数组中大部分元素为0&#xff0c;或者为同一个值的数组时&#xff0c;可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: ①记录数组一共有几行几列&#xff0c;有多少个不同的值&#xff08;0除外&#xff09;。 ②把具有不同值…

C语言课程设计报告输出杨辉三角,C语言学习:在屏幕上输出杨辉三角

杨辉三角的规律是&#xff1a;它的两条斜边都是由数字1组成的&#xff0c;而其余的数则是等于它肩上的两个数之和。 代码如下&#xff1a;#include#includeint main(){int i,j,k,arr[10][10]{0};/*arr[11][11]必须初始化&#xff0c;初始化为{0}*/printf("打印出杨辉三角&…

习惯性朴实简单!一起学习MySQL常见单行函数,字符数学日期流程控制

文章目录一、字符函数二、数学函数三、日期函数四、其他函数五、流程控制函数一、字符函数 1、大小写控制函数 ①UPPER()&#xff1a;转换成大写 SELECT UPPER(Hello);②LOWER()&#xff1a;转换成小写 SELECT LOWER(Hello);2、字符控制函数 ①LENGTH()&#xff1a;获取参数…

不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列

文章目录队列简介数组模拟队列&#xff08;无法复用&#xff09;数组模拟环形队列&#xff08;可复用&#xff09;队列简介 队列是一个有序列表&#xff0c;可以用数组或是链表来实现。 遵循先入先出的原则。即先存入队列的数据&#xff0c;先取出&#xff0c;后存入的后取出…

多对一!分组查询!MySQL分组函数,聚合函数,分组查询

文章目录一、简单使用二、搭配DISTINCT去重三、COUNT()详细介绍四、分组查询一、简单使用 SUM&#xff1a;求和&#xff08;一般用于处理数值型&#xff09; AVG&#xff1a;平均&#xff08;一般用于处理数值型&#xff09; MAX&#xff1a;最大&#xff08;也可以用于处理字…