JAVA-IO流实践操作

news2024/12/25 23:54:18

什么是IO流?

I:Input

O:Output

通过IO可以完成硬盘文件的读和写。

流是一连串连续动态的数据集合。可以理解为是我们在内存和硬盘之间进行文件读写的一个管道。抽象的一个概念。我们可以看成是一个管道,我们输入的数据要从管道的一端留到另一端去,在计算机里就是从内存读取数据到程序

什么时候使用IO流?

当内存需要从硬盘读取文件的时候

谁来操作的输入输出?

计算机

输入和输出分别指的是谁?

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

Java中流在哪个包下?

java.io.*;

有哪些流(分类)?

InputStream

OutputStream

Read

Write

  1. 按照流的方向(以内存作为参照物):
  • Input/Read:往内存中去,输入
  • Output/Write::从内存中出来,输出
  1. 按读取数据方式不同:
  • Stream字节流

一次读取1个字节byte,等同于一次读取8个二进制,什么类型的文件都可以读取。包括:文本文件、图片、声音文件、视频

假设文件file1.txt,采用字节流的话是:

a中国bc张三fe:

第一次读:一个字节,正好读到'a'

第二次读:一个字节,正好读到'中'字符的一半

第三次读:一个字节,正好读到'中'字符的另一半

  • Reader/write字符流

一次读取一个字符,这种流是为了方便读取普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件。只能读取纯文本文件,连word都无法读取

假设文件file1.txt,采用字节流的话是:

第一次读:'a'字符('a'字符在windows系统中占用1个字节)

第二次读:'中'字符('中'字符在windows系统中占用2个字节)

在java中只要“类名”以stream结尾的都是字节流。以“reader/writer”结尾的都是字符流(以谁结尾就是什么流)

方法

close():关闭

内存和硬盘之间的通道,用完之后一定要关闭,不然会耗费(占用)很多资源

flush():刷新

把管道清空,如果管道中剩余一些内容没有输出完毕,则会强制把剩余部分输出完。

注意:如果没有flush()可能会导致丢失数据

具体的流类及使用

InputStream

基本方法

PutputStream

基本方法

Reader

两个字节两个字节读

基本方法

Writer

基本方法

节点流类型

线程和线程之间的通信

import java.io.*;

public class TestFileInputStream {
    public static void main(String[] args){
        int b =0;
        FileInputStream in =null;
        try{
            //已经连接管道
            in = new FileInputStream("C:\\Users\\denglimei\\Desktop\\快捷键.txt");
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定文件");
            System.exit(-1);
        }

        try {
            long num =0;
            //读一个字节放到b这个变量里面,!=-1表示还没有都到结尾,
            while ((b = in.read())!=-1) {
                //强制转换为char类型打印出来
                System.out.print((char)b);
                //计数
                num++;
            }
            in.close();
            System.out.println();
            System.out.println("共读取了"+num+"个字符");
        } catch (Exception e) {
            System.out.println("文件读取错误");
            System.exit(-1);
        }
    }
}
import java .io.*;

public class TestFileOutputStream {
    public static void main(String[] args){
        int b =0;
        FileInputStream in =null;
        FileOutputStream out =null;
        try {
            in = new FileInputStream("C:\\Users\\denglimei\\Desktop\\快捷键.txt");
            out = new FileOutputStream("C:\\Users\\denglimei\\Desktop");
            while((b=in.read())!=-1){
                out.write(b);
            }
            in.close();   //每读取一个文件就关闭
            out.close();
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定文件");
            System.exit(-1);
        } catch (IOException e) {
            System.out.println("文件复制错误");
            System.exit(-1);
        }
        System.out.println("文件已复制");
    }
}
import java.io.*;

public class TestFileReader {
    public static void main(String[] args){
        FileReader fr =null;
        int c =0;
        try {
            fr = new FileReader("C:\\Users\\denglimei\\Desktop\\快捷键.txt");
            int ln =0;
            while((c=fr.read()) !=-1){
                System.out.print((char)c);
            }
            fr.close();
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定文件");
        }catch(IOException e){
            System.out.println("文件读取错误");
        }

    }
}
import java.io.*;

public class TestFileWriter {
    public static void main(String[] args){
        FileWriter fw = null;
        try {
            fw = new FileWriter("C:\\Users\\denglimei\\Desktop\\快捷键.txt");
            for (int c =0; c<=50000; c++) {
                fw.write(c);
            }
        } catch (IOException e1) {
            e1.printStackTrace();
            System.out.println("文件写入错误");
            System.exit(-1);
        }

    }
}

缓冲流

转换流(TransformIO)

数据流(DataStream)

输出流(Print)

Object流

直接将Object写入或流出


思维导图

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

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

相关文章

C语言编程—强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如&#xff0c;如果您想存储一个 long 类型的值到一个简单的整型中&#xff0c;您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型&#xff0c;如下所示&am…

PyTorch 深度学习 || 2. 全连接网络 | Ch2.2 PyTorch 全连接网络分类

PyTorch 全连接网络分类 文章目录 PyTorch 全连接网络分类1. 非线性二分类2. 泰坦尼克号数据分类2.1 数据的准备工作2.2 全连接网络的搭建2.3 结果的可视化 1. 非线性二分类 import sklearn.datasets #数据集 import numpy as np import matplotlib.pyplot as plt from sklear…

从源码角度分析 MyBatis 工作原理

一、MyBatis架构 从 MyBatis 代码实现的角度来看&#xff0c;MyBatis 的主要组件有以下几个&#xff1a; SqlSession - 作为 MyBatis 工作的主要顶层 API&#xff0c;表示和数据库交互的会话&#xff0c;完成必要数据库增删改查功能。 Executor - MyBatis 执行器&#xff0c;…

前端自动化测试的核心概念及思考

本文&#xff0c;将主要结合钉钉中的业务实践和落地&#xff0c;描述笔者对前端自动化测试场景的理解。 本文将主要从“为什么前端要做自动化测试、前端自动化测试分类、业务做自动化测试要抓住的核心点、核心工具推荐“这四个部分做阐述&#xff0c;下面直接进入正文。 大钉…

【嵌入式Linux内核驱动】05_IIC子系统 | 硬件原理与常见面试问题 | 应用编程 | 内核驱动 | 总体框架

硬件原理 IIC协议 IIC 基础 IIC协议简介—学习笔记_iic标准协议_越吃越胖的黄的博客-CSDN博客 简介 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种串行通信协议&#xff0c;用于连接微控制器、传感器、存储器和其他外设。 I2C使用两条线&#xff08;SDA和S…

Spark 1--3章简介,架构体系, 环境搭建

今天开始了新的课程 由我们的星哥带领我们踏入Spark的神秘殿堂 01_SparkCore 1. Spark简介 1.1 什么是Spark Spark是一种快速、通用、可扩展的大数据分析引擎&#xff0c;2009年诞生于加州大学伯克利分校AMPLab&#xff0c;2010年开源&#xff0c;2013年6月成为Apache孵化…

Cisco模拟器配置OSPF

一、前言 1.1 本文为Cisco模拟器配置OSPF操作笔记 (供新手参考&#xff09; 使用Cisco模拟器&#xff0c;配置OSPF协议&#xff0c;并使各台电脑ping通&#xff0c;如下参考图&#xff01; 1.2 思科路由器设置ip设置 在将设备摆放完毕后&#xff0c;需要配置每台设备的IP&…

【科普】干货!带你从0了解移动机器人(四) ——移动机器人导航技术

移动机器人导航是指移动机器人确定自己在地图参考系中的位置后&#xff0c;自动规划出通往地图参考系中某个目标位置路径并沿着该路径到达目标位置点的能力&#xff0c;是移动机器人行动能力的关键。 基于整个智能制造的发展&#xff0c;移动机器人导航技术大致可分为以下几种&…

【MarkDown】CSDN Markdown之思维导图mindmap详解

文章目录 思维导图(Mindmap)一个思维导图的例子语法形状矩形圆角矩形圆形爆炸云朵六边形默认 图标和类图标类 不清晰的缩进Markdown字符串与库或网站资源集成 思维导图(Mindmap) Mindmap现在是一个实验性的图表类型。语法和特性可能会在未来版本中更改&#xff0c;除了图标集成…

【UE 从零开始制作坦克】9-坦克瞄准

效果 步骤 1. 将下载的图片资源导入 2. 再新建一个控件蓝图&#xff0c;命名为“WBP_Aim” 打开“WBP_Aim”&#xff0c;拖入图像控件 选择图像控件的锚点如下 偏移全部置0 图像选择刚导入的“miaozhunjing” 3. 打开骨骼“SKEL_West_Tank_M1A1Abrams” 可以看到在炮管上有一个…

房屋装修选择自装,如何寻找选购系统门窗,比价并施工(门窗阶段)

环境&#xff1a; 地点&#xff1a;杭州 装修类型&#xff1a;自装 面积&#xff1a;建面135平方 进度&#xff1a;选购安装铝合金门窗阶段 问题描述&#xff1a; 房屋装修选择自装&#xff0c;如何寻找选购系统门窗&#xff0c;比价并施工 解决方案&#xff1a; 一、了…

暑期托管班招生海报模板 一键就能完成设计

即将到来的暑期&#xff0c;许多的兴趣班也将迎来暑期招生热&#xff0c;那么兴趣班如何设计一幅招生用的招生易拉宝&#xff1f;可以一键生成内容&#xff0c;自定义填写兴趣班的报名方式&#xff0c;课程内容以及联系方式等内容的招生海报制作工具&#xff01;跟着教程一起使…

Rust之泛型、特性和生命期(三):Traits:定义共同的行为

开发环境 Windows 10Rust 1.70.0 VS Code 1.79.2 项目工程 这里继续沿用上次工程rust-demo Traits&#xff1a;定义共同的行为 Trait定义了一个特定类型所具有的功能&#xff0c;并且可以与其他类型共享。我们可以使用特质以抽象的方式来定义共享行为。我们可以使用特质的界…

低学历又如何?我这样的程序员照样可以逆袭

今天分享的这个主题&#xff0c;很可能会带来争议&#xff0c;因为目前优秀毕业生0年就可以拿到 20K 的待遇&#xff0c;这里暂且抛开硕士&#xff0c;985&#xff0c;211的 Top 前几高学校本科生。 毕竟今天的主题的初衷是地点低的程序员如何才能 2-3 年实现 20K 的目的&…

mysql根据一个表的数据更新另一个表数据的SQL写法

目录 问题描述解决办法&#xff08;推荐第三种&#xff09; 问题描述 概述&#xff1a;用一个表中的字段去更新另外一个表中的字段&#xff0c; MySQL 中有相应的 update 语句来支持&#xff0c;不过这个 update 语法有些特殊。看一个例子就明白了。 解决办法&#xff08;推…

机器学习笔记 - 基于MobileNetV2的迁移学习训练关键点检测器

一、下载数据集 StanfordExtra数据集包含12000张狗的图像以及关键点和分割图图。 GitHub - benjiebob/StanfordExtra:12k标记的野外狗实例,带有2D关键点和分割。我们的 ECCV 2020 论文发布的数据集:谁把狗排除在外?3D 动物重建,循环中期望最大化。https://github.com/benj…

驱动模块和printk函数

目录 1. 驱动模板 1.1. 在源码工程路径下创建.c文件 1.2. 编写驱动模板 1.3. 将模板放到ubuntu上 1.4. 书写Makefile 1.5. 编译和安装 2. printk 2.1. Source Insight查找命令 2.2. printk讲解 2.2.1. 分析函数 2.2.2. 编写代码 2.3. 拓展 2.3.1. 关于printk函数测…

《人工智能.一种现代方法》原版精读思维导读-第一章

目录 书籍 前言部分 封面故事 完整目录 1. Intruduction简介 Whats AI The Foundations of AI The History of AI The State of the Art Risks and Benefits of AI Summary 2. Intelligent Agents 书籍 人工智能.一种现代方法 Artificial Intelligence. The Moder…

ArcGis系列-坐标系转换

Arcgis的工程项目可以添加各种类型的空间资源&#xff0c;比如数据库空间表、shp文件&#xff0c;每张空间表的坐标系可能都会有差异&#xff0c;把他们放到一个工程里时可以统一设置坐标系。 本文将介绍ArcGis三个需要坐标转换的场景&#xff1a; Arcgis Pro设置项目坐标GP分…