Java基础-I/O流

news2024/11/13 23:00:17

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

字节流

定义

说明

InputStream与OutputStream示意图

说明

InputStream的常用方法

说明

OutputStream的常用方法 

说明

InputStream与OutputStream的继承体系

字节流读写文件 

说明

文件的拷贝


字节流

定义

在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,I/O流中针对字节的输入/输出提供了一系列的流,统称为字节流。

说明

字节流是程序中最常用的流。
在JDK中,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。

InputStream与OutputStream示意图

说明

InputStream被看成一个输入管道,OutputStream被看成一个输出管道,
数据通过InputStream从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。 

InputStream的常用方法

说明

前三个read()方法都是用来读数据的,分按字节读取和按字节数组读取。
进行I/O流操作时,应该调用close()方法关闭流,从而释放当前I/O流所占的系统资源。

OutputStream的常用方法 

说明

前三个write()方法都是用来写数据的,分按字节读取和按字节数组写入。
flush()方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新。
close()方法是用来关闭流并释放与当前IO流相关的系统资源。

InputStream与OutputStream的继承体系

字节流读写文件 

说明

针对文件的读写操作,JDK专门提供了两个类,分别是FileInputStream和FileOutputStream。
FileInputStream是InputStream的子类,它是操作文件的字节输入流,专门用于读取文件中的数据。
从文件读取数据是重复的操作,因此需要通过循环语句来实现数据的持续读取

示例(读取包含“hello”内容的txt文件)

FileInputStream in = new FileInputStream("test.txt");
int b = 0;
while((b=in.read()) != -1){
    System.out.println(b); 
}
in.close();

注意: 

在读取文件数据时,必须保证文件在相应目录存在并且是可读的,否则会抛出
FileNotFoundException。

示例(向txt文件写入数据)

FileOutputStream out = new FileOutputStream("out.txt");
String str = "hello";
out.write(str.getBytes());
out.close();

注意:通过FileOutputStream向一个已经存在的文件中写入数据,该文件中的数据首先会被清空,再写入新的数据。若希望在已存在的文件内容之后追加新内容,则可使用构造函数FileOutputStream(String fileName, boolean append)来创建文件输出流对象,并把append参数的值设置为true。

FileOutputStream out = new FileOutputStream("out.txt",true);
String str = " world";
out.write(str.getBytes());
out.close();

注意:I/O流在进行数据读写操作时会出现异常,为了保证I/O流的close()方法一定执行来释放占用的系统资源,通常会将关闭流的操作写在finally代码块中。 

finally{
    try{
        if(in!=null) in.close();
    }catch(Exception e){
        e.printStackTrace();
    }
    try{
        if(out!=null) out.close();
    }catch(Exception e){
        e.printStackTrace();
    }
}

文件的拷贝

说明

l/O流通常都是成对出现的,即输入流和输出流一起使用。例如文件的拷贝就需要通过输入流来读取源文件中的数据,并通过输出流将数据写入新文件。

FilelnputStream in new FilelnputStream("source/src.jpg");
FileOutputStream out new FileOutputStream("target/dest.jpg"):
int len =0;
long beginTime System.currentTimeMillis():
while ((len = in.read() !=-1){
    out.write(len);
}
long endTime System.currentTimeMillis();
System.out.println("花费时间为:"+(endTime-be gin Time)+"毫秒")
in.close();
out.close();

说明:上述示例在拷贝过程中,通过whil循环将字节逐个进行拷贝。在拷贝文件时,由于计算机性能等各方面原因,会导致拷贝文件所消耗的时间不确定,因此每次运行程序的结果并不一定相同。

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

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

相关文章

Qt基础 | Qt Creator的基本介绍与使用 | 在Visual Studio中创建Qt项目

文章目录 一、Qt Creator的基本介绍与使用1.新建一个项目2.项目的文件组成3.项目文件介绍3.1 项目管理文件3.2 界面文件3.3 主函数文件3.4 窗体相关的文件 4.项目的编译、调试与运行 二、在Visual Studio中创建Qt项目 Qt C开发环境的安装,请参考https://liujie.blog…

C1W1.LAB.Preprocessing+Word frequencies+Logistic_regression_model

理论课:C1W1.Sentiment Analysis with Logistic Regression 文章目录 预处理导入包Twitter dataset简介查看原始文本处理原始文本处理超链接、Twitter 标记和样式分词去除标点和停用词词干处理 process_tweet() 词频构建与可视化导入包加载数据集字典字典实例添加或…

cesium 实现地图环境功能 - 雨,雪,雾特效

需求背景解决效果Codeindex.vuefogEffect.tsrain.glslsnow.glslfog.glsl 需求背景 需要实现天气模拟,日照模拟功能,提高三维实景效果 解决效果 Code 注意:我以下glsl文件时基于 webgl1.0,即cesium,创建球的时候&…

ES的使用示例

1.安装 ES的安装对springboot的版本配置要求很高,需要根据如下的目录下载对应的版本。 查看自己项目所使用的springboot和spring的版本,对应下载文件。 下载链接地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-…

微软GraphRAG原理介绍(附带部分源码)

我们前几天写了一篇文章,简单跑了一下GraphRAG看了下效果,没看过这篇文章的可以看下https://www.luxinfeng.top/article/动手实操微软开源的GraphRAG。今天我们介绍一下GraphRAG的实现原理,关于实验对比的内容,我会在下一篇文章中…

48V电源架构解析

48V电源架构解析 48V系统的诞生 汽车在1918年引入蓄电池,到1920年逐渐普及,当时的电池电压是6V。后来,随着内燃机排量的增加以及高压缩比内燃机的出现,6V系统已经不能满足需求,于是在1950年引入了12V系统。大多数汽车…

【python学习】标准库之数学相关math库的定义、功能、使用场景、代码示例和第三方数学相关库NumPy

引言 math模块是Python标准库的一部分,它提供了一系列基本的数学函数和常数。这些函数和常数对于日常的数学运算非常有用,例如计算平方根、计算余弦值等。 文章目录 引言一、math的定义二、math的功能2.1 基本的数学运算2.2 数学常数2.3 随机数 三、math…

八臂-聚乙二醇-生物素;8ARM-PEG-Biotin

一、基本信息 名称:八臂PEG生物素、八臂-聚乙二醇-生物素、Octa-arm PEG Biotin、8ARM-PEG-Biotin 结构:具有八个分支的PEG链,每个分支末端连接生物素分子 状态:固体/粉末/溶液,具体取决于产品规格和存储条件 纯度&…

论文去AI痕秘籍:轻松几步,守护你的学术原创性

如何有效降低AIGC论文的重复率,也就是我们说的aigc如何降重?AIGC疑似度过高确实是个比较愁人的问题。如果你用AI帮忙写了论文,就一定要在交稿之前做一下AIGC降重的检查。一般来说,如果论文的AIGC超过30%,很可能会被判定…

Qt|QTreewidget类下函数qt助手详解说明示例(二)

上篇:Qt|QTreewidget类下函数qt助手详解说明示例(一) 该系列持续更新,喜欢请一键三连,一起学习进步,升职加薪,感谢各位大佬。 QT5.14.2 参考官方QT助手 Kimi辅助说明 文章目录 insertTopLevelI…

浅学三次握手

数据要完成传输,必须要建立连接。由于建立TCP连接的过程需要来回3次,所以,将这个过程形象的叫做三次握手。 结合上面的图来看更清楚。 先说三次握手吧,连接是后续数据传输的基础。就像我们打电话一样,必须保证我和对方…

工作是为了什么

如果经常和总监及以上的领导聊天,就会发现他们与咱们一线程序员的最大不同,并不是编程技能多高深精通,而是分析问题、认知世界的方式。 程序员只关注工作领域的“一亩三分地”,实质上是放弃了自己成长的机会,在工作的…

软件测试——非功能测试

工作职责: 1.负责产品系统测试,包括功能测试、性能测试、稳定性测试、用户场景测试、可靠性测试等。 2.负责测试相关文档的编写,包括测试计划、测试用例、测试报告等。 3.负责自动化测试框架、用例的维护。 岗位要求: 1.熟练…

解决mysql,Navicat for MySQL,IntelliJ IDEA之间中文乱码

使用软件版本 jdk-8u171-windows-x64 ideaIU-2021.1.3 mysql-essential-5.0.87-win32 navicat8_mysql_cs 这个问题我调试了好久,网上的方法基本上都试过了,终于是解决了。 三个地方结果都不一样。 方法一 首先大家可以尝试下面这种方法&#xff1a…

53 传输层

作用:负责数据能够从发送端传输接收端 再谈端口号 端口号(port)标识了一个主机上进行通信的不同的应用程序 在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”&#xff0c…

陶晶驰串口屏与arduino uno通信,远程控制arduino 2560上的LED

一 材料清单 arduino uno 1个 arduino 2560 1个 nrf24l01 2个 陶晶驰串口屏 1个 二 本文目的 通过串口屏触摸按键远程控制arduino 2560上的LED 点亮。 三 硬件接线 3.1 发射端接线 3.1.1uno和发射模块接线 nRF24L01 与Arduino UNO接线如…

你也想做一个Elemen-ui吧!!!——Blueの前端路

目录 前言 diglog组件 准备工作: 在diglog.vue中模仿element-ui搭建diglog框架 该组件需要完成的任务: title diglog.vue代码: App.vue代码: 效果: 自定义dialog的宽度和距离顶部的 App.vue代码:…

Windows 下 VMamba 安装教程(无需更改base环境中的cuda版本且可加速)

导航 Mamba 及 Vim 安装问题参看本人之前博客:Mamba 环境安装踩坑问题汇总及解决方法Windows 下 Mamba 的安装参看本人之前博客:Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)Linux 下VMamba 安…

前端面试题(JS篇三)

一、|| 和 && 操作符的返回值? || 和 && 首先会对第一个操作数执行条件判断,如果其不是布尔值就先进行 ToBoolean 强制类型转换,然后再执行条件判断。 对于 || 来说,如果条件判断结果为 true 就返回第一个操作数的…

磁环编码器原理

目录 概述 1 编码器介绍 2 实现原理介绍 2.1 磁环功能分析 2.2 硬件实现方式 3 编码器参数 3.1 编码器精度 3.2 影响编码器精度的因素 4 角度计算方法 4.1 单对极编码器 4.2 磁游标编码器 4.2.1 游标方案实现原理 4.2.2 一个实例磁环分析 5 磁刻线编码器 概述 本…