当前位置: 首页 > news >正文

Java IO流

Java IO流

文章目录

  • Java IO流
    • 什么是IO流
    • InputStream
    • FlieInputStream
        • 示例
    • OutputStream
      • 示例
    • 字符的读取与写入
      • READER方法
      • WRITER方法
    • 利用Scanner和PrintWriter简化字符的读写
      • Scanner
      • PrintWriter

什么是IO流

前面我们介绍了Java中对文件的操作以及file类的了解,但是file类只能对文件信息进行操作,创建,获取,删除,列表,重命名。无法进行文件的读取和写入。

在Java中I/O操作是指对文件进行输入Input/输出Output操作。 Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。

Java中针对InputOutput提供了2个抽象类

InputStream :输入流,把文件数据读取到内存

OutputStream:输出流,把数据从内存输出到文件中

在系统中有很多种的文件类型一般分为 文本文件二进制文件

Java分别对这两种文件类型提供了相应的方法对文件进行读写。

image-20230307001104511

InputStream

常见的方法

intread()读取一个字节的数据,读完返回-1
intread(byte[] b)最多读取b.length个字节的数据
intread(byte[] b,int off,int len)最多读取len-off个字节数据
voidclose()关闭字节流

InputStream只是一个抽象类,要使用还需要具体的实现类。关于InputStream的实现类很多,这里简单的介绍一下FileInputStream

FlieInputStream

FileInputStream(File file)利用File文件构造文件输入流
FileInputStream(File file)利用文件路径创建输入流

示例

利用文件路径读文件内容

public static void main(String[] args) throws IOException {// 创建一个输入流,读取文件内容FileInputStream inputStream=new FileInputStream("d:/JAVA/temp/test/aaa.txt");//用一个byte数组,来接收每次读取的内容,扩大缓冲区容量byte[] bytes=new byte[1024];//读取文件中的数据while (true){//获取每次读取的长度int len=inputStream.read(bytes);if (len==-1){break;}//打印读取到的内容for (int i = 0; i < len; i++) {System.out.println((char) bytes[i]);}//关闭流inputStream.close();}
}

OutputStream

voidwrite(int b)写入要给字节的数据
voidwrite(byte[]b)将b 这个字符数组的全部数据写到os中
intwrite(byte[]b,int off,int len)将b数组中从off开始把数据写到os中,一个写len个
voidclose()关闭流
voidflush()刷新缓冲区,将数据从缓冲区写入文件

在计算机系统中,硬件之间的传输速度是很慢的,大量的OutputStream操作会使操作时间大大加长,因此,在写入数据时,会将写入数据暂时存放在内存的一个指定的区域里,一般称为缓冲区,直到缓冲区满了或者其他条件时,才将缓冲区的数据写入到目标文件中。但有可能会造成一部分数据遗留到缓冲区里,因此调用flush方法,将数据刷到文件中。

示例

public static void main(String[] args) throws IOException {FileOutputStream outputStream=new FileOutputStream("d:/JAVA/temp/test/aaa.txt");outputStream.write(97);outputStream.write(98);outputStream.write(99);//刷新缓冲区outputStream.flush();outputStream.close();
}

字符的读取与写入

READER方法

public static void main(String[] args) throws IOException {FileReader reader=new FileReader("d:/JAVA/temp/test/aaa.txt");while (true){int data=reader.read();//返回-1表示读取结束if (data==-1){break;}System.out.println(data);}reader.close();
}

WRITER方法

public static void main(String[] args) throws IOException {FileWriter writer=new FileWriter("d:/JAVA/temp/test/aaa.txt");writer.write("123\n");writer.write("哈喽");//刷新缓冲区writer.flush();//关闭流writer.close();
}

利用Scanner和PrintWriter简化字符的读写

上述例子中,InputStream、OutputStream对字符类型文件进行读取是非常麻烦的,所以用Scanner类和PrintWriter类进行简化

Scanner

public static void main(String[] args) throws IOException {FileInputStream inputStream=new FileInputStream("d:/JAVA/temp/test/aaa.txt");//借助Scanner简化字符的读操作Scanner scanner=new Scanner(inputStream,"UTF-8");while (true){if (!scanner.hasNextLine()){break;}//获取数据String nest=scanner.nextLine();System.out.println(nest);}scanner.close();inputStream.close();
}

PrintWriter

public static void main(String[] args) throws IOException {FileOutputStream outputStream=new FileOutputStream("d:/JAVA/temp/test/aaa.txt");PrintWriter writer=new PrintWriter(outputStream);writer.println("你好世界!!!");writer.println("哈哈");writer.println("hello world!!!");writer.printf("%s:%d\n","单价",5);//强制刷新缓存writer.flush();writer.close();outputStream.close();
}

相关文章:

Java IO流

Java IO流 文章目录Java IO流什么是IO流InputStreamFlieInputStream示例OutputStream示例字符的读取与写入READER方法WRITER方法利用Scanner和PrintWriter简化字符的读写ScannerPrintWriter什么是IO流 前面我们介绍了Java中对文件的操作以及file类的了解&#xff0c;但是file类…...

LeetCode - 1653 使字符串平衡的最少删除次数

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 1653. 使字符串平衡的最少删除次数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个字符串 s &#xff0c;它仅包含字符 a 和 b​​​​ 。 你可以删除 s 中任意数目的字符&#xff0c;使得 …...

【微信小程序】-- 页面事件 - 上拉触底 - 案例(二十七)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…...

《超导电子技术及其应用》学习日志(二)

约瑟夫森效应 约瑟夫森理论 约瑟夫森方程 &#xff08;1&#xff09;每一个库柏对都可视为质量为2m、电量为2e的复合载流子&#xff0c;定向运动速度v就是库柏相对质心的速度。处于超导态的库柏对凝聚于同一量子态&#xff0c;运载电流时具有完全相同的动量P。用微观波函数来…...

微信小程序this指向问题

前言 最近在开发微信小程序时不时会遇到一个很奇怪的问题&#xff0c;有些情况下用 this.setData 可以改变视图显示&#xff0c;有些情况下使用 this.setData 无效&#xff0c;这又是为什么呢&#xff1f; 问题描述 在解释这个问题前&#xff0c;我们先来看两段代码&#xff1…...

【报错】paddle相关报错和处理方法

1 报错 😱😱😱 ModuleNotFoundError: No module named paddle 2 解决方法 💉💉💉 pip --default-timeout=100 install paddlepaddle -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 🎉🎉🎉🎉🎉🎉 1 报错 😱😱😱 from paddl…...

unity的安装配置和第一个游戏-unity开学第一课

许多的小伙伴学编程语言其实是因为玩游戏&#xff0c;玩着玩着就想写游戏了&#xff0c;于是开始学习c学习C#学习java&#xff0c;但相比之下C#的操作会更加容易&#xff0c;所以就开始学习unity来编游戏了。这里就就算是unity开学第一课啦-unity的安装配置和第一个游戏。 文章…...

Elsevier上传LaTeX 修改稿踩坑

背景 千辛万苦修改完论文&#xff0c;结果发现要求上传可编辑文件&#xff0c;tex上传真的太难了&#xff0c;一堆坑&#xff0c;尤其是编译错误&#xff0c;要等系统创建pdf后才能找到。中间还打了北京的客服电话&#xff0c;结果他们那边并不懂相关的东西。说latex是第三方公…...

秒懂算法 | 搜索基础

本篇介绍了BFS和DFS的概念、性质、模板代码。 01、搜索简介 搜索,就是查找解空间,它是“暴力法”算法思想的具体实现。 暴力法(Brute force,又译为蛮力法):把所有可能的情况都罗列出来,然后逐一检查,从中找到答案。这种方法简单、直接,不玩花样,利用了计算机强大的…...

Flutter 自定义今日头条版本的组件,及底部按钮切换静态样式

这里写目录标题1. 左右滑动实现标题切换&#xff0c;点击标题也可实现切换&#xff1b;2. 自定义KeepAliveWrapper 缓存页面&#xff1b;2.2 使用3. 底部导航切换&#xff1b;4. 自定义中间大导航&#xff1b;5.AppBar自定义顶部按钮图标、颜色6. Tabbar TabBarView实现类似头条…...

SpringBoot学习笔记(二)配置文件

1、配置文件SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff1b;application.propertiesapplication.yml配置文件的作用&#xff1a;修改SpringBoot自动配置的默认值&#xff1b;SpringBoot在底层都给我们自动配置好&#xff1b;YAML&#xff1a;以数…...

09说说乐观锁和悲观锁

乐观锁和悲观锁是在并发编程中经常用到的两种锁机制。悲观锁是指在访问共享资源之前&#xff0c;会先加锁&#xff0c;以防止其他线程修改该资源&#xff0c;从而保证数据的一致性和完整性。在使用悲观锁时&#xff0c;如果一个线程已经占用了该资源&#xff0c;那么其他线程只…...

【C++】vector的模拟实现

文章目录1.查看STL源码2.vector的模拟实现1. 构造函数无参构造构造n个 val迭代器模板2. reserve3. 迭代器4.pop_back 尾删5.resize6.push_back7.insert迭代器失效—— pos为野指针迭代器失效——修改迭代器位置8. erase对于VS和Linux环境测试3.深浅拷贝问题4. 整体代码实现1.查…...

THUPC-2023 游记

清华校赛&#xff0c;战火重燃 原文链接 宣传图 上周四同学在洛谷无意间看到了宣传图&#xff0c;当时很有感触。不知觉间&#xff0c;又是一年春&#xff0c;又是一场触动心弦的 THUPC 了。 周五的团建过于有趣&#xff0c;致使我完全将 THUPC 抛之脑后了。 周日上午被省选…...

Linux - 磁盘I/O性能评估

文章目录概述RAID文件系统与裸设备的对比磁盘I/O性能评判标准常用命令“sar –d”命令组合“iostat –d”命令组合“iostat –x”单独统计某个磁盘的I/O“vmstat –d”命令组合小结概述 RAID 可以根据应用的不同&#xff0c;选择不同的RAID方式 如果一个应用经常有大量的读操…...

计算机网络--网络基础

目录 一.互联网的组成 ​编辑 1.互联网的边缘部分 1.1客户-服务器方式 1.2对等连接方式 ​编辑 2.互联网的核心部分 2.1电路交换 2.2分组交换 2.3报文交换 二.计算机网络的类别 1.按网络的作用范围进行分类 2.按网络的使用者进行分类 3.用来把用户接入互联…...

Gin 接口超时控制

文章目录1.Gin 的 Middleware2.gin-contrib/timeout3.小结参考文献API 是现代应用程序中的重要组成部分&#xff0c;可以用于提供数据和功能&#xff0c;供客户端应用程序访问。由于网络不稳定、服务器负载、网络拥堵等因素&#xff0c;API 请求可能会花费较长时间。这可能导致…...

1.C#与.NET简介

目录 一、C#语言及其特点 二、C#与.NET Framework/.NET Core关系 三、C#应用开发 四、案例展示 五、学习环境 一、C#语言及其特点 C#是美国微软公司发布的一种面向对象的&#xff0c;运行于 .NET Framework 和 .NET Core &#xff08;完全开源&#xff0c;跨平台&#xff…...

OpenAI CTO、吴恩达夫人……AI 领域值得关注的「她」力量,个个都是女强人

内容一览&#xff1a; 「她时代」来临&#xff0c;一些有着强大信念与热情的女性&#xff0c;纷纷投身至 AI 领域&#xff0c;成为不可或缺的存在与力量。值此国际妇女节到来之际&#xff0c;HyperAI超神经盘点了领域内令人印象深刻的杰出的女性代表。 关键词&#xff1a;国际妇…...

[ 网络 ] 应用层协议 —— HTTP协议

目录 1.HTTP协议 1.1URL urlencode和urldecode 2. HTTP协议格式 HTTP请求 HTTP响应 3.告知服务器意图的HTTP方法 GET&#xff1a;获取资源 POST&#xff1a;传输实体主体 GET和POST的区别 使用Cookie的状态管理 4.返回结果的HTTP状态码 状态码告知从服务器端返回的…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...