Java文件IO操作知识点

关于文件
        关于IO的定义

I:input输入 O:output输出,这是一套人为规定的规则,下面这个图方便我们理解输入输出的定义,统一以CPU为基准

    在操作系统中其实把很多的资源都抽象成文件,我们在这里所说的文件就是"狭义"文件,平时保存在硬盘上的文件,

        文件夹也是一种文件,我们称之为目录文件,在硬盘上存储着很多文件和目录,目录之间又存在这一套嵌套关系,这整个结构是一个树形结构N叉树,

路径

相对路径:起点可以是任意路径, 一个.表示当前路径的位置,两个..可以回退到上个路径

绝对路径:起点只能是此电脑,以盘符开头      

文本文件和二进制文件  

文本文件是合法的字符串,每个字符都是合法的,文本文件中的"二进制数据"能够构成合法的字符,字符集有GBK,UTF8,都对应一个码表,啥样的数字就对应啥样字符,这个码表只包含了一小部分二进制数据,这些被包含了的字符,并且是有意义的我们称之为文本文件,还有很多没有被包含,没有意义是一堆乱码的我们称之为二进制文件

如何区分一个文件是文本文件(可以看懂)还是二进制文件(乱码我们看不懂):可以将文件用记事本打开即可,对后续代码编写具有重要作用

使用Java进行文件操作
1)对文件系统进行操作

创建文件,删除文件,创建目录,重命名文件 使用标准库中的File

代码演示 

绝对路径的情况

相对路径的情况

创建文件可能会抛出异常,抛出异常的原因:1)非法路径,2)没有权限

可以发现当文件创建好之后会在idea中新增一个文件

2)对文件内容进行操作

读文件,写文件,打开文件,关闭文件

Java中通过"流"这样的一组类,来进行上述的文件内容操作,分为字节流和字符流

字节流:outputStream,inputStream,以字节为单位,处理二进制文件

InputStream是一个抽象类,不能实例化一个对象,我们需要通过子类来实例化,使这个类变成具体的类,

我们可以通过FileInputStream来实例化对象,同时需要抛出异常,因为这个文件可能不存在

read方法有三个,第一个是每一次读取一个字节,但是返回值是int,查看一下文档注释,因为是文字所以是无符号Byte范围从0-255,都是正数,没有负数,所以使用int类型来做为返回值接收,当读取到文件结束时会返回-1作为文件结束标志,

这个方法更高效,能够减少IO次数比起第一个方法,大大提升了效率 

close关闭文件,关闭文件也是一个核心操作,因为我们在打开文件的时候,会在操作系统内核PCB结构体中,给"文件描述符表"中新增一个元素,这个"文件描述符表",有具体大小存在上限 不会自动扩容,如果内存满了再次打开文件就会失败,所以关闭文件是非常重要的,多个线程共用同一份文件描述符表,当然文件描述符表也是可以进行配置的

try with resources,try里面必须是实现Closeable接口的类,自动调用close

OutStream

最重要的操作是写操作write,只要以OutStream的方式打开文件都会把之前文件内容给清空,默认方式打开会清空文件,我们要以追加的方式来打开文件,需在构造方法中把append这个参数设置为true,

字符流:Readr,Writer,以字符为单位,处理文本文件

read,

write

在Java当中内部类型采取的编码方式也会有不同,char是Unicode(2个字节)而String是utf8(3个字节),Java内部会自动转码

核心操作:1)通过构造方法打开文件,2)通过read方法来读取文件,3)通过write方法来写文件,4)通过close方法来关闭文件

关于文件IO操作的具体代码案例
案例一:搜索文件

案例二:复制文件

案例三:在文件中搜索关键字

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

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

相关文章

mysql的数据往hive进行上报时怎么保证数据的准确性和一致性

在将MySQL的数据往Hive进行上报时,确保数据的准确性和一致性可以通过下面一系列步骤来实现 一、准备工作 环境配置: 确保MySQL和Hive环境已经安装并配置好,且都处于可运行状态。检查Hadoop集群(Hive通常运行在Hadoop之上&#x…

「iOS」自定义cell与cell的复用

iOS学习 前言一:TableView协议二:cell的复用Cell的复用原理自定义cell总结 前言 UITableView是iOS开发中不可或缺的一部分,它是苹果iOS SDK提供的一种用于展示数据列表的视图控件。我们对其中的cell进行自定义,即可得到我们需要的…

Python 实现股票指标计算——BBI

BBI (Bull And Bear lndex) - 多空指标 1 公式 3日均价 3日收盘价之和 / 36日均价 6日收盘价之和 / 612日均价 12日收盘价之和 / 1224日均价 24日收盘价之和 / 24BBI (3日均价 6日均价 12日均价 24日均价) / 4 2 数据准备 我们以科创50指数 000688 为例&#xff0c…

Qt 学习第一天:安装VS和Qt

本人更换了一台新的电脑,使用联想电脑管家传输文件后没有安装VS,导致出现了以下问题: 疯狂查资料问人。弄了一个晚上加上午一个多小时之后,还是决定删掉原来的文件夹,重新下载一个 一、安装VS(Visual Stud…

肿瘤病人的护理

一、肿瘤病人的心理护理 肿瘤患者往往面临巨大的心理压力和恐惧,心理护理至关重要。 倾听与理解 耐心倾听患者的倾诉,让他们表达内心的担忧、恐惧和不安。例如,一位肺癌患者可能会担心治疗效果和家庭经济负担,护理人员要给予充分的…

Aurora MySQL 负载突增应对策略与优化方案

在面对 Aurora MySQL 负载突增的情况下,我们需要深入理解其工作原理,并探讨可行的优化方案。本文将详细分析 Aurora MySQL 的负载均衡机制,解读性能监控指标,并提出几种可能的解决方案,包括已实施的措施和未来的优化方向。 1. Aurora MySQL 的负载均衡机制 Aurora MySQL…

简单工厂模式、工厂模式和抽象工厂模式的区别

简单工厂模式、工厂模式和抽象工厂模式都是创建型设计模式,它们之间在目的、实现方式和适用场景上存在显著的区别。以下是对这三种模式的详细比较: 一、定义与目的 简单工厂模式(Simple Factory Pattern) 定义: 简单工…

算法项目报告:物流中的最短路径问题

问题描述 物流问题 有一个物流公司需要从起点A到终点B进行货物运输,在运输过程中,该公司需要途径多个不同的城市,并且在每个城市中都有一个配送站点。为了最大程度地降低运输成本和时间,该公司需要确定经过哪些配送站点&#xff…

Android:requestLayout、invalidate 和 postInvalidate 的区别

提醒:下面源码来自SDK里Android-34版本 一、requestLayout 点击查看requestLayout官网文档 1.1 requestLayout方法源码 /*** Call this when something has changed which has invalidated the* layout of this view. This will schedule a layout pass of the v…

Java:RestTemplate返回值报错LinkedHashMap cannot be cast

问题描述 使用SringBoot提供的RestTemplate发起http请求,类型转换成了LinkedHashMap DataEntity result restTemplate.getForObject(url, DataEntity.class);报错信息如下 java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.demo.…

跟着GPT学设计模式之模板模式

你好,这里是codetrend专栏“跟着GPT学设计模式”。 说明 提示词: 对模板模式进行定义说明,优缺点说明。 模板模式,全称是模板方法设计模式,英文是 Template Method Design Pattern。模板模式是一种行为型设计模式,它定…

watch监听vue2与vue3的写法

watch的属性值 handler:回调函数, 即监听到变化时应该执行的函数,可以是单独的函数或带有 immediate 和 deep 属性的对象watch: {someProperty: function(newVal, oldVal) {// 处理逻辑}}deep: 其值是true或false, 当属性值是对象或数组时,深度观察会监…

C++ :友元类

友元类的概念和使用 (1)将类A声明为B中的friend class后,则A中所有成员函数都成为类B的友元函数了 (2)代码实战:友元类的定义和使用友元类是单向的 (3)友元类是单向的,代码实战验证 互为友元类 (1)2个类可以互为友元类,代码实战…

DP讨论——组合模式

学而时习之,温故而知新。 组合模式 和代理模式相比 和代理模式相比,有点类似。引用类和被引用类都继承于同一个接口类。 但是感觉组合模式是对代理模式的更加丰富化(升级版、超进化),集合化或者说聚合化。 组合模…

高并发小结

高并发是指系统能够处理大量的并发请求的能力。处理高并发问题需要从多个层面进行优化,包括架构设计、代码优化、数据库优化和运维管理等。以下是一些处理高并发的关键技术和方法: 1. 架构设计 分布式架构:将系统功能分解为多个独立的服务&…

linux学习笔记整理: 关于linux:Redis数据库 2024/7/20;

Redis数据库: 自理解: 通过Map(多层字典类型)进行存储查找资源,key为字符串,value可为多种类型; Redis介绍 Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。Redis提供数据结构,例如字…

tmp - configmap动态更新配置?

# 这是刚刚更新过的configmaps controlplane $ k describe configmaps nginx-conf Name: nginx-conf Namespace: default Labels: <none> Annotations: <none> Data nginx.conf: ---- user nginx; worker_processes 1; events { worker_co…

react-draft-wysiwyg API

目录 一、class / style(样式) 二、state(编辑器状态) 三、toolbar(工具栏) 四、localization(语言翻译) 五、mention / hashtag(提及) mention hashtag 六、callbacks(回调) toolbar 配置 一、class / style(样式) wrapperClassName: 工具栏 编辑区 classNameedito…

【LeetCode】二叉树的最大深度

目录 一、题目二、解法完整代码 一、题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#x…

Leetcode2160. 拆分数位后四位数字的最小和:

问题描述&#xff1a; 给你一个四位 正 整数 num 。请你使用 num 中的 数位 &#xff0c;将 num 拆成两个新的整数 new1 和 new2 。new1 和 new2 中可以有 前导 0 &#xff0c;且 num 中 所有 数位都必须使用。 比方说&#xff0c;给你 num 2932 &#xff0c;你拥有的数位包括…