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

探索文件与流的世界:File、InputStream 和 OutputStream 的奇妙之旅

目录

一、File 类——文件管理的小能手

1. 创建和删除文件

2. 检查文件属性  

3. 路径操作  

二、InputStream——读取数据的管道

1. 读取单个字节  

2. 批量读取字节

3. 关闭流  

三、OutputStream——写入数据的通道

1. 写入单个字节

2. 批量写入字节  

3. 刷新和关闭流  

总结:文件与流的协作之美

注:

在编程的世界里,文件和数据流就像一位位勤劳的邮递员,负责将信息从一个地方传递到另一个地方。今天,我们将一起踏上一场生动的旅程,揭开 Java 中 File 类以及 InputStream 和 OutputStream 的神秘面纱。

File 类——文件管理的小能手

想象一下,你正在整理自己的书桌。你需要知道哪些文件夹里有笔记,哪些文件是重要的,哪些文件需要删除。这就是 File 类的作用!它是一个多功能的“文件管家”,帮助我们管理和操作文件和目录。

核心功能:

1. 创建和删除文件

createNewFile():新建一个文件,就像给你的书桌增加一本新书。

delete():删除文件或目录,像清理掉不再需要的旧纸张。

2. 检查文件属性  

exists():检查文件是否存在,像是确认某个文件是否还在书桌上。

isFile() 和 isDirectory():判断是文件还是文件夹,就像区分书本和文件夹。

length():获取文件大小,相当于称一称书本有多重。

3. 路径操作  

getPath() 和 getAbsolutePath():获取文件的路径,就像找到一本书在书桌上的具体位置。

listFiles():列出目录中的所有文件,像是清点书桌上的所有物品。

代码示例:

import java.io.File;public class FileDemo {public static void main(String[] args) {// 创建一个 File 对象File file = new File("example.txt");// 检查文件是否存在if (!file.exists()) {try {// 如果不存在,创建新文件file.createNewFile();System.out.println("文件已创建!");} catch (Exception e) {e.printStackTrace();}}// 输出文件信息System.out.println("文件名:" + file.getName());System.out.println("文件大小:" + file.length() + " 字节");System.out.println("绝对路径:" + file.getAbsolutePath());}}

InputStream——读取数据的管道

接下来,我们进入数据流动的世界。InputStream 是一个抽象类,它是所有字节输入流的父类,专门用于从文件或其他来源中读取数据。你可以把它想象成一根吸管,通过它可以从水杯(文件)中吸出水(数据)。

核心方法:

1. 读取单个字节  

int read():一次读取一个字节,适合小规模数据处理。

2. 批量读取字节

int read(byte[] b):一次读取多个字节,效率更高。

3. 关闭流  

close():用完后记得关闭流,避免资源浪费。

代码示例:

import java.io.FileInputStream;import java.io.InputStream;public class InputStreamDemo {public static void main(String[] args) {try (InputStream inputStream = new FileInputStream("example.txt")) {int data;while ((data = inputStream.read()) != -1) {System.out.print((char) data);  // 将字节转换为字符输出}} catch (Exception e) {e.printStackTrace();}}}

OutputStream——写入数据的通道

如果说 InputStream 是吸管,那么 OutputStream 就是注射器,它可以将数据注入到文件或其他目标中。它同样是抽象类,所有字节输出流的父类。

核心方法:

1. 写入单个字节

void write(int b):写入一个字节,适合小规模数据写入。

2. 批量写入字节  

void write(byte[] b):写入多个字节,效率更高。

3. 刷新和关闭流  

flush():确保数据被完全写入目标。

close():完成写入后关闭流。

代码示例:

import java.io.FileOutputStream;import java.io.OutputStream;public class OutputStreamDemo {public static void main(String[] args) {String content = "Hello, World!";try (OutputStream outputStream = new FileOutputStream("output.txt")) {byte[] bytes = content.getBytes();  // 将字符串转换为字节数组outputStream.write(bytes);          // 写入文件System.out.println("数据写入成功!");} catch (Exception e) {e.printStackTrace();}}}

总结:文件与流的协作之美

File 类 是我们的“文件管理员”,负责创建、删除、检查文件和目录。

InputStream 是“吸管”,用来从文件或其他来源中读取数据。

OutputStream 是“注射器”,用来将数据写入文件或其他目标。

这三者配合起来,就像一支默契的团队,共同完成了数据存储和传输的任务。无论是简单的文本文件,还是复杂的二进制数据,它们都能轻松应对。

希望这篇博客能让你对 File、InputStream 和 OutputStream 有更深刻的理解!

注:

在实际开发中,记得始终使用 try-with-resources 或手动关闭流,以避免资源泄漏问题。

相关文章:

探索文件与流的世界:File、InputStream 和 OutputStream 的奇妙之旅

目录 一、File 类——文件管理的小能手 1. 创建和删除文件 2. 检查文件属性 3. 路径操作 二、InputStream——读取数据的管道 1. 读取单个字节 2. 批量读取字节 3. 关闭流 三、OutputStream——写入数据的通道 1. 写入单个字节 2. 批量写入字节 3. 刷新和…...

nginx镜像创建docker容器,及其可能遇到的问题

一、基本流程 1、目录准备 我喜欢把文件放在/data下。 # 进入根目录的data目录 cd /data# 创建nginx目录 mkdir nginx# 进入nginx目录 cd nginx# 创建conf目录 mkdir conf# 进入conf目录 cd conf# 创建conf.d目录 mkdir conf.d 2、文件准备 (1)nginx…...

测试用例 [软件测试 基础]

目录 测试用例 1. 概念 1.1 什么是测试用例 1.2 什么是要素 1.3 为什么需要测试用例 2. 设计测试用例的万能公式 2.1 常规思维 逆向思维 发散性思维 2.2 万能公式 3. 设计测试用例的方法 3.1 基于需求的设计方法 3.2 具体的设计方法 3.3 更多用例练习 测试用例 …...

树的直径 (dp或贪心)

B4016 树的直径 - 洛谷 题目大意: 给定一棵 n 个结点的树,树没有边权。请求出树的直径是多少,即树上的最长路径长度是多少。 思路: 树形 d p dp dp 求树的直径 定义 d [ x ] d[x] d[x] 表示以 x x x 节点出发走向 x x x 的…...

C++ 入门二:C++ 编程预备知识

一、使用 Qt Creator 创建 C 工程 1.1 打开软件 在计算机中找到 Qt Creator 的应用程序图标并双击打开它。如果是首次打开,可能需要进行一些初始化设置,如选择默认的开发环境等。 1.2 选择 C 工程 打开 Qt Creator 后,在欢迎界面中点击 “…...

IT管理思路

甲方CIO和IT管理者-如何做好组织级IT能力提升_哔哩哔哩_bilibili...

C++17模板编程与if constexpr深度解析

一、原理深化 1.1 模板编程 1.1.1 编译器如何处理模板(补充) 模板的实例化机制存在两种模式: 隐式实例化:编译器在遇到模板具体使用时自动生成代码,可能导致多翻译单元重复实例化,增加编译时间。显式实…...

指令层级:训练大型语言模型优先处理特权指令

指令层级:训练大型语言模型优先处理特权指令 The Instruction Hierarchy: Training LLMs to Prioritize Privileged Instructions关键要点:快速浏览:1. 引言(Introduction)2. 指令层级(The Instruction Hie…...

高效人脸关键点检测算法HRNet-Facial-Landmark-Detection

高效人脸关键点检测算法HRNet-Facial-Landmark-Detection 300 W data 数据标注格式 helen/trainset/1271089376_2.jpg,2.105,642.5,643.5,453.88947199999996,562.431791,457.882374,607.338625,471.39681399999995,655.136824,489.458724,702.023327,508.36972599999996,743.…...

LeetCode 3375 题解

题解 如题所示,允许暴力,虽然是暴力,但复杂度也就O(n) 还是如昨天的题目一样,使用Set.add的方法去判断即可 分三种情况 因为是set集合的原因,所以可以排除值相同的原因 当遍历数组有值小于k就return -1 当遍历数组遇…...

leetcode_数组 189. 轮转数组

189. 轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3输出: [5,6,7,1,2,3,4] 示例 2: 输入:nums [-1,-100,3,99], k 2输出:[3,99,-1,-100] 思…...

MySQL | 三大日志文件

Undo Log(回滚日志) 实现原理与分类 原理:Undo Log 记录的是数据修改前的旧值,通过这些旧值可以将数据恢复到修改之前的状态。它采用的是逻辑日志,即记录的是如何撤销操作,而不是物理数据的实际值。 分类…...

GIS-AI 融合引擎架构:智慧景区导览系统的毫秒级响应与千级并发优化实战

本文面向 文旅行业技术决策者、GIS 开发者、AI 算法工程师,旨在解决传统景区导览系统 定位精度低、交互体验差、运营成本高 的核心痛点,提供从技术选型到落地部署的全链路解决方案。 如需获取智慧景区导览系统解决方案请前往文章最下方获取,如…...

WSA(Windows 安卓子系统)过检测教程

windows安卓子系统WSA的root和magisk的安装教程 安卓子系统WSLWSA的rootmagisk安装 WSA(Windows 安卓子系统)过检测的方法与思路 一、引言 Windows 安卓子系统(WSA)为 Windows 用户提供了在电脑上运行安卓应用的便利。然而&…...

Spark原理及代码

一、 Spark运行架构 运行架构 Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。 Spark 框架有两个核心组件: 1、Driver Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实…...

esp32cam -> 服务器 | 手机 -> 服务器 直接服务器传输图片

服务器先下载python : 一、Python环境搭建(CentOS/Ubuntu通用) 一条一条执行 安装基础依赖 # CentOS sudo yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel # Ubuntu sudo apt update && sudo apt install b…...

RHCSA Linux系统 数据流和重定向 tee 命令

一.数据流和重定向 1. 数据流 (1) 标准输入(stdin,代码 0):默认从键盘获取输入,只读。 (2) 标准输出(stdout,代码 1):命令执行正确信息默认输出到屏幕,只写…...

libev实现Io复用及定时器事件服务器

客户端和服务器都绑定在了enp2s0网卡&#xff0c;需要SERVER_IP和SERVER_PORT改为其ip&#xff0c;注意不能是127.0.0.1&#xff0c;因为这个是lo虚拟网口。 安装libev sudo apt-get install libev-dev客户端&#xff1a; #include <iostream> #include <string>…...

【项目实训项目博客】prompt初版实践

通过对camel技术的理解&#xff0c;我们向其中添加了市场营销角色的prompt 初版设计如下&#xff1a; chatchainconfig.json { "chain": [ { "phase": "DemandAnalysis", "phaseType": "SimplePhase", "max_turn_step…...

底盘---全向轮(Omni Wheel)

一、基本定义与起源 定义&#xff1a; 全向轮是一种通过在主轮外周安装多个 垂直于主轮轴线的横向小滚轮 实现多向移动的轮式结构。小滚轮可自由转动&#xff0c;允许设备在纵向&#xff08;主轮驱动方向&#xff09;和横向&#xff08;小滚轮滚动方向&#xff09;同时受力&…...

Python标准库json完全指南:高效处理JSON数据

一、json库概述 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;Python的json模块提供了JSON数据的编码和解码功能。该模块可以将Python对象转换为JSON字符串&#xff08;序列化&#xff09;&#xff0c;也可以将JSON字符串转换为Python对象&#xf…...

用一个实际例子快速理解MCP应用的工作步骤

已经有很多的文章介绍MCP server&#xff0c;MCP Client工作原理&#xff0c;这里不做太多介绍。但是很多介绍都只是侧重介绍概念&#xff0c;实际的工作原理理解起来对初学者还是不太友好。本文以一个智能旅游咨询系统为例&#xff0c;详细说明在利用 Model Context Protocol&…...

Element Plus 图标使用方式整理

Element Plus 图标使用方式整理 以下是 Element Plus 图标的所有使用方式&#xff0c;包含完整代码示例和总结表格&#xff1a; 1. 按需引入图标组件 适用场景&#xff1a;仅需少量图标时&#xff0c;按需导入减少打包体积 示例代码&#xff1a; <template><div>…...

力扣题解:142. 环形链表 II

在链表学习中&#xff0c;我们已经了解了单链表和双链表&#xff0c;两者的最后一个结点都会指向NULL&#xff1b;今天我们介绍的循环列表则不同&#xff0c;其末尾结点指向的这是链表中的一个结点。 循环链表是一种特殊类型的链表&#xff0c;其尾节点的指针指向头节点&#…...

图灵逆向——题七-千山鸟飞绝

目录列表 过程分析headers头部M参数分析载荷x参数分析响应数据解密分析 代码实现 一进来还是一个无限debugger&#xff0c;前面有讲怎么过&#xff0c;这里直接过掉~ 老规矩&#xff0c;养成习惯&#xff0c;先看请求头里有没有加密参数发现好像是有个M&#xff0c;它是个32位…...

双相机结合halcon的条码检测

以下是针对提供的C#代码的详细注释和解释&#xff0c;结合Halcon库的功能和代码结构进行说明&#xff1a; --- ### **代码整体结构** 该代码是一个基于Halcon库的条码扫描类GeneralBarcodeScan&#xff0c;支持单台或双台相机的条码检测&#xff0c;并通过回调接口返回结果。…...

Transformer Decoder Block的几个优化方案

写在前面 在大型语言模型(LLM)的演进浪潮中,Transformer 架构凭借其强大的并行计算能力和对长距离依赖的出色捕捉,奠定了核心地位。然而,标准的 Transformer Decoder Block 遵循着一种相对固定的模式:先进行自注意力(Self-Attention)捕捉上下文信息,再通过前馈神经网…...

工业科学级天文相机:跨界融合的高精密成像解决方案

随着国内科技的快速发展&#xff0c;工业相机领域正悄然兴起一场"天文级"的技术革命。这类兼具工业设备可靠性与天文观测精度的特殊相机&#xff0c;正在半导体制造、天文观测、空间探测等领域开辟新的应用疆域。其核心技术突破不仅体现在传感器性能的提升&#xff0…...

颠覆传统!复旦微软联合研发MagicMotion,重新定义图生视频可能性

导读简介&#xff1a; 尽管基于DiT的模型在生成高质量和长视频方面表现出色&#xff0c;但许多文本到视频的方法在精确控制物体运动和相机运动等属性方面存在不足。因此&#xff0c;细粒度轨迹可控的视频生成技术应运而生&#xff0c;这对于在现实场景中生成可控视频至关重要。…...

华为数字芯片机考2025合集5已校正

1. 题目内容 下列选项中&#xff08;&#xff09;不是 Verilog HDL 的关键字。&#xff08;&#xff09; A. tri B. for C. force D. edge 解析 1. Verilog 关键字分类 Verilog 关键字是语言预定义的保留字&#xff0c;用于语法结构或特定功能。 2. 选项分析 选项类型说明…...

QML Loader:延迟加载与动态切换

目录 引言相关阅读工程结构LoaderDelay.qml - 延迟加载实现完整代码HeavyComponent.qml代码解析运行效果 LoaderSwitch.qml - 动态切换组件完整代码代码解析运行效果 Main.qml - 主界面实现完整代码主界面结构代码解析 总结下载链接 引言 QML的Loader组件提供了一种强大的机制…...

C语言--常用的链表操作

利用C语言实现链表&#xff0c;并定义一些常用的操作 文章目录 链表定义新建一个链表结点打印链表插入结点头插法&#xff08;常用&#xff09;运行 尾插法&#xff08;使用较少&#xff09;运行 返回链表长度链表转置运行 合并两个有序的链表运行 删除最小结点运行 打印倒数第…...

ngx_conf_param

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_param-CSDN博客 定义在 src\core\ngx_conf_file.c char * ngx_conf_param(ngx_conf_t *cf) {char *rv;ngx_str_t *param;ngx_buf_t b;ngx_conf_file_t conf_file;param &cf->cycle->conf…...

C++day9

思维导图 牛客练习 练习&#xff1a; 将我们写的 myList 迭代器里面 operator[] 和 operator 配合异常再写一遍 #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector>…...

算法题:两数相加

题目&#xff1a;2. 两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&a…...

SCI科学论文的重要组成部分

科学论文的核心结构 科学论文通常遵循IMRAD结构&#xff0c;即&#xff1a; 引言(Introduction)方法(Methods)结果(Results)讨论(Discussion) 除此之外&#xff0c;还包括其他几个关键部分。让我为您详细介绍每个部分的作用和重要性&#xff1a; 1. 标题(Title) 标题是论文…...

Go 微服务框架 | 路由实现

文章目录 不用框架实现web接口实现简单的路由实现分组路由支持不同的请求方式支持同一个路径的不同请求方式前缀树应用前缀树完善路由代码 不用框架实现web接口 // blog main.go 文件 package mainimport ("fmt""log""net/http" )func main() {…...

2025年AI开发学习路线

目录 一、基础阶段&#xff08;2-3个月&#xff09; 1. 数学与编程基础 2. 机器学习入门 二、核心技能&#xff08;3-4个月&#xff09; 1. 深度学习与框架 2. 大模型开发&#xff08;重点&#xff09; 三、进阶方向&#xff08;3-6个月&#xff09; 1. 多模态与智能体…...

TimescaleDB 2.19.2 发布

TimescaleDB 2.19.2 已于 2025 年 4 月 7 日发布2。此次发布是基于 PostgreSQL 的开源时序数据库 TimescaleDB 的一次更新。 从 GitHub 上的 Pull Request 信息可知,此次发布主要是将相关更改合并到 2.19.x 分支,涉及到一系列的测试和构建配置,包括不同版本 PostgreSQL(如 …...

「Unity3D」TextMeshPro中的TMP_InputField,用来实现输入框的几个小问题

第一&#xff0c;正确设置Scrollbar。 设置Scrollbar之后&#xff0c;不能设置Text Component的Font Size为Auto Size&#xff0c;否则Scrollbar无法正确计算显示。 那么&#xff0c;要想自动适配字体大小&#xff0c;可以让Placeholder中的Font Size设置为Auto&#xff0c;这…...

HTML 是什么?网页创建的核心标记语言

原文&#xff1a;HTML 是什么&#xff1f;网页创建的核心标记语言 | w3cschool笔记 HTML 是什么&#xff1f; HTML 是一种标记语言&#xff0c;用于创建网页。简单来说&#xff0c;HTML 就像一本魔法书&#xff0c;它告诉电脑如何展示网页上的内容&#xff0c;比如文字、图片…...

考研单词笔记 2025.04.09

act v表现&#xff0c;行动&#xff0c;做事&#xff0c;扮演&#xff0c;充当&#xff0c;担任&#xff0c;起作用n行为&#xff0c;行动&#xff0c;法案&#xff0c;法令 action n行为&#xff0c;行动 behave v表现&#xff0c;行事&#xff0c;守规矩&#xff0c;举止端…...

map/multimap

1.概念 map中所有元素都是pair<key,value>&#xff0c;key 是map的键&#xff0c;value 是map的值 所有元素都会根据key自动排序 map/multimap属于关联式容器&#xff0c;底层结构是用二叉树实现。 map和multimap区别&#xff1a; map不允许容器中有重复key值元素 m…...

CSS 定位属性的生动比喻:以排队为例理解 relative 与 absolute

目录 一、理解标准流与队伍的类比 二、relative 定位&#xff1a;队伍中 “小范围活动” 的人 三、absolute 定位&#xff1a;队伍中 “彻底离队” 的人 在学习 CSS 的过程中&#xff0c;定位属性relative和absolute常常让初学者感到困惑。它们的行为方式和对页面布局的影响较…...

基于二叉堆实现的 PriorityQueue

基于二叉堆实现的 PriorityQueue 是一种常见的数据结构&#xff0c;广泛用于任务调度、路径搜索、事件模拟等场景。下面我将用 Java 语言实现一个简单的基于最小堆的 PriorityQueue&#xff0c;即优先级最小的元素先出队。 ✅ 实现目标 使用数组实现二叉最小堆&#xff08;即父…...

大模型分布式推理和量化部署

一、小常识 1、计算大模型占用多少显存 对于一个7B&#xff08;70亿&#xff09;参数的模型&#xff0c;每个参数使用16位浮点数&#xff08;等于 2个 Byte&#xff09;表示&#xff0c;则模型的权重大小约为&#xff1a; 7010^9 parameters2 Bytes/parameter14GB 70亿个参数…...

循环神经网络 - 长程依赖问题及改进方案

循环神经网络在学习过程中的主要问题是由于梯度消失或爆炸问题&#xff0c;很难建模长时间间隔(Long Range)的状态之间的依赖关系。 本文我们来学习长程依赖问题及其对应的改进方案&#xff0c;在这部分知识的学习过程中&#xff0c;我建议大家着重理解&#xff0c;对于数学公…...

点击抽奖功能总结

首先用户打开网页&#xff0c;映入眼帘的是一个输入框和一个提交按钮。当用户在输入框中输入自己的年龄并点击提交后&#xff0c;系统会根据输入的年龄给出相应提示。若年龄达到 60 岁&#xff0c;页面将显示一个新的抽奖区域&#xff0c;用户可以点击 “抽奖” 按钮开始抽奖。…...

AWS Bedrock生成视频详解:AI视频创作新时代已来临

💡 TL;DR: AWS Bedrock现已支持AI视频生成功能,让企业无需深厚AI专业知识即可创建高质量视频内容。本文详解Bedrock视频生成能力的工作原理、应用场景和实操指南,助你快速掌握这一革命性技术。 🎬 AWS Bedrock视频生成:改变内容创作的游戏规则 还记得几年前,制作一个专…...

理解 TOGAF®标准中的架构原则

原则是帮助组织实现其使命的基本规则和指南。它们旨在长期稳定且很少修改&#xff0c;在各个领域中充当决策和行动的指南针。在企业架构&#xff08;EA&#xff09;的背景下&#xff0c;原则在指导架构框架的开发和应用方面发挥着至关重要的作用。本文将探讨企业原则和架构原则…...