Java中文件的相关知识及文件IO操作

在我们日常生活中,会把许多东西都称之为文件。比如,一份纸质报告,或u盘中的一些文档,都会把它们称为文件。那么,这里说的文件是以操作系统的角度出发的。在操作系统中,会把许多硬件设备软件资源都抽象成“文件”,并进行统一管理。大部分所说的文件一般都指的是 硬盘中的文件。文件就相当于是“硬盘”数据的一种抽象

1.文件的组织

一台计算机上有很多的文件,操作系统对这些文件都是通过“文件系统”来组织的。

操作系统 通过目录”(树形结构)来组织管理文件。

例如,我们通过“此电脑”(根节点)来找到电脑的C盘(分支)和D盘(分支),每个分支又可以继续分支,这样的组织管理方式就是“目录”结构(树形结构)。

2.文件路径

操作系统通过“目录”这种的层次结构来描述某个文件的所在位置,最终找到目标文件的过程所经过的路径称之为 文件路径。

文件路径分为两种:相对路径绝对路径

(1)相对路径

需要先指定一个目录作为基准目录,从基准目录出发,通过某一路径找到指定文件,这里的某一路径就是相对路径。比如,我从C:/Java(基准目录)出发,找一个文件名为memo2的文本文件 

因此,要描述文件memo2的相对路径就可以描述为:./memo2.txt (通过./来 省略基准目录)。

 (2) 绝对路径

从C:或者D:出发,找到指定文件的路径称之为 绝对路径。比如,我找到memo2.txt文件的绝对路径就是 C:/Java/memo2.txt.

3. 文件类型

文件类型分为 文本文件二进制文件

文本文件:文件中保存的数据 都是 字符串,且内容都是合法字符(字符集/字符编码 中有记载)。

二进制文件:文件中保存的数据 仅仅是 二进制数据,内容不要求是 合法字符

【区分二进制文件和文本文件】

以记事本方式打开一个文件,打开之后,若发现文件内容是乱码,说明该文件就是二进制文件,否则就是文本文件。

4.文件内容的读写

文件的内容,称之为 “数据流”。一般每个文件都保存了许多数据,每次对文件内容读或写的时候,有许多方式,可能读完文件内容要分很多次读,也可能一次读完。因此,把文件的内容比喻成“流”,每次读写操作称之为 输入流输出流

【区分输入和输出】

读和写,到底哪个是输入,哪个是输出呢。

在Java中,都是以CPU的角度来定义的。

站在CPU的角度,读文件,文件内容 从硬盘-->内存-->CPU,是一个输入的过程

写文件,写的内容从CPU-->内存-->硬盘,是一个输出过程

因此,读操作称之为 输入流写操作称之为 输出流

针对不同的文件,读写操作的方式也有一定的区别。

(1)对于文本文件

输入流需要用到Reader类,输出流需要用到Writer类

输入操作,有多种方式,一次读一个字符,一次读多个字符。

【一次读一个字符】

用法如下:

实例化Reader对象,通过构造方法将要操作文件的路径传入,Reader对象会打开这个文件

调用Reader类的read()方法,会一个字符一个字符的读取文件内容,且会返回一个int型的数据,

若返回的是-1说明文件内容已经读完了

【一次读取多个字符】

用法如下:

一次读取多个字符,用到的read()方法 与一次读一个字符用到的read()方法不一样。 这个read()方法传入的参数得是一个字符型的数组。每次从文件中读取数据时,都尽可能的将数组填满。每次读取也会返回一个int型数据,代表此次读取的字符个数。

如上述代码,我指定字符数组容量为500,文件中内容字符不及500字节,因此一次就可以将文件内容读取完,并放入数组中。

如果数组容量小于文件内容字符个数,则会多轮读取,直至读完。 

【写操作】

(2)对于二进制文件

输入流 和 输出流 分别用到的类 是 InputStream OutputStream类,同样是借助该类的read()方法

与文本文件操作类似。区别在于,二进制文件中数据单位是字节文本文件的数据单位是字符。因此,二进制文件的输入流用到的数组是字节类型

【输入流操作】

针对二进制文件,也是可以一次读入一个或多个字节,与文本文件操作类似。

演示一次读多个字节的代码:

【输出流操作】

 

5.文件IO操作要重视的问题

在对文件IO操作的过程中,难免会不断打开文件

每个进程都有一个PCB块,PCB中有一个属性--“文件描述符表”,描述当前进程所持有的文件资源。若该进程一直在打开文件,则文件描述符表中的内容会越来越多,若我们只打开文件,没有关闭文件的话,会导致该进程的文件描述符表装满。当后续再打开文件时,会造成文件资源泄露,这是非常严重的问题。

因此,使用完文件之后一定要记得关闭文件。 为了防止遗忘关闭文件,可以在涉及到文件操作的代码中,使用try(){}来写代码,如上述代码。这种方式可以在try代码执行结束之后自动关闭文件。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka | SpringBoot集成Kafka

SpringBoot集成Kafka 一、前言二、项目1. pom2. application.properties4. 消息生产者-测试5. 消息消费者 三、启动测试四、有总结的不对的地方/或者问题 请指正, 我在努力中 一、前言 该文章中主要对SpringBoot 集成Kafka 主要是 application.properties 与 pom坐标就算集成完…

win11系统中nginx简单的代理配置

一.背景 为了公司安排的师带徒任务。 操作系统版本:win11家庭版 nginx版本:1.24.0 二.配置代理 之前文章已经说明了nginx简单的安装,要看阅读这个文章哈。web服务器nginx下载及在win11的安装-CSDN博客 1.配置需求识别 前端服务nginx(80…

【面试题】webpack的五大核心、构建流程、性能优化

【面试题】webpack的五大核心、webpack的构建流程、webpack的性能优化 webpack是什么?webpack的五大核心webpack的构建流程webpack性能优化 webpack是什么? js静态模块打包工具。 功能 将多个文件打包成更小的文件,(压缩)翻译 babal-loader es6进行降级兼容。 …

低代码:数智化助力新农业发展

随着科技的飞速发展和数字化转型的深入推进,低代码开发平台正逐渐成为软件开发的热门话题。尤其在农业领域,低代码技术为传统农业注入了新的活力,助力新农业实现高效、智能的发展。 低代码开发平台的概念与特点 随着科技的飞速发展&#xff0…

猫咪冻干的价格差别为什么那么大?价格实惠的主食冻干分享

随着养猫科学知识的普及,越来越多的铲屎官选择更符合猫咪饮食天性的主食冻干喂养。尽管有些铲屎官因价格犹豫,但像我这样的资深铲屎官深知其益处。尽管其价格稍高于烘焙粮和膨化粮,但主食冻干为猫咪健康带来的实际好处是无法估量的。 对于像我…

代码学习记录11

随想录日记part11 t i m e : time: time: 2024.03.04 主要内容:今天的主要内容是深入了解栈和队列中比较难的题录类型:滑动窗口最大值与前 K K K 个高频元素,最后对于这三天学习的队列和栈的知识进行总结。…

结构体详解

结构体 什么是结构体 结构体是一种用户自定义的数据类型,可以组合多个相关值成为一个单一类型。它是由一批数据组合而成的结构型数据,结构体可以包含多个不同类型的字段,如基本数据类型、其他结构体、枚举类型等。在Rust中,结构…

Ubantu 18.04 配置固定IP

1.首先在终端里输入命令,将你的网关和ip,记下来 ifconfig 2. 执行命令: sudo gedit /etc/network/interfaces 3.在弹出来的框里输入 auto后面的就是网关,address是你虚拟机的ip,gateway是你的网关ip,netmask是你的子…

Python从0到100(二):Python语言介绍及第一个Pyhon程序

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

如何通过抖捧轻松开启AI常态化自动直播间

在如今的互联网时代,短视频和直播已成为大多数企业与实体商家必备的经营技能,不只是全国头部的品牌,他们纷纷加码直播,更有一些已经开启了直播矩阵的体系,包括中小型的商家,他们也在考虑一件事情&#xff0…

前端接收流,并下载到本地

碰到一个大坑&#xff0c;附件文件存在华为云上&#xff0c;查询列表里记录的附件给了一个https开头的url&#xff0c;要求点击附件图标&#xff0c;下载附件到本地&#xff0c; 思路1.直接<a hrefurl downloadfileName >下载</a> 实际效果&#xff1a;跨域下载不…

Java批量修改文件目录名称(树行结构、批量重命名)

Java批量修改文件目录名称(树行结构、批量重命名) 1.读取某个路径的文件目录结构 2.递归批量修改目录文件前缀进行递增 3.结果截图 4.代码 package com.zfi.server.device;import java.io.File; import java.util.Arrays; import java.util.Comparator;public class FileTest…

【ArcPy】游标访问几何数据

访问质心坐标相关数据 结果展示 代码 import arcpy shppath r"C:\Users\admin\Desktop\excelfile\a2.shp" with arcpy.da.SearchCursor(shppath, ["SHAPE","SHAPEXY","SHAPETRUECENTROID","SHAPEX","SHAPEY",&q…

2024抖店全新教程,关于选品和对接达人的流程,细节分享如下

我是王路飞。 对做无货源抖店的商家来说&#xff0c;如何找到一个好的产品&#xff0c;并且把它卖出去&#xff0c;非常重要。 因此&#xff0c;商家的选品能力、达人资源的对接&#xff0c;就很关键了。 今天给你们聊下2024年做抖店&#xff0c;如何选品并且对接到靠谱的带…

MySQL王国:从基础到高级的完整指南【文末送书-28】

文章目录 MySQL从入门到精通第一部分&#xff1a;MySQL基础第二部分&#xff1a;MySQL进阶第三部分&#xff1a;MySQL高级应用 MySQL从入门到精通&#xff08;第3版&#xff09;&#xff08;软件开发视频大讲堂&#xff09;【文末送书-28】 MySQL从入门到精通 MySQL是一种开源…

记录开发过程中遇到的oracle 分页问题

问题: oracle 分页查询,因为是相对来说比较复杂的sql,一直以为是union all 的问题. 结果是相同时间相同,order by 时间之后 、分页查询的每次结果都不能保证与自己直接查询的不分页数据保持一致、导致有些数据看不到 解决方案: order by 条件最后添加一个表中不会重复的字段比如…

复合机器人上下料方案:从设计到实施的全过程

随着智能制造和工业自动化的快速发展&#xff0c;复合机器人上下料方案已成为提高生产效率、降低人力成本的关键技术。 方案设计 1、需求分析&#xff1a;首先&#xff0c;需要对生产线的上下料需求进行深入分析&#xff0c;包括物料种类、尺寸、重量、上下料频率等&#xff…

八大技术架构演进之路【小林优选,呕心沥血】

概述 在进行技术学习过程中&#xff0c;由于大部分读者没有经历过一些中大型系统的实际经验&#xff0c; 导致无法从全局理解一些概念&#xff0c;所以本文以一个 "电子商务" 应用为例&#xff0c;介绍从一百个 到千万级并发情况下服务端的架构的演进过程&#xff0c…

三级分销数据库设计

一&#xff0c;数据结构 二&#xff0c;查询方法 1.mysql递归查询 获取id9的所有上级 r : 9 设置自己所要搜索子节点的id SELECTT2.* FROM(SELECTr AS _id,( SELECT r : pid FROM sj_user WHERE id _id ) AS 2v2,l : l 1 AS lvl FROM( SELECT r : 9 ) vars, -- 查询id为…

MS2351M——RF 检测器/控制器

产品简述 MS2351M 是一款对数放大器芯片&#xff0c;主要用于接收信号强度 指示 RSSI 与功率放大器控制&#xff0c;工作频率范围是 50M  3000MHz &#xff0c; 因频率与温度不同&#xff0c;动态范围达 35dB 到 45dB 。 MS2351M 是电压响应器件&#xff0c; 50M…