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

JavaEE IO流(1)

1.什么是IO流

(1)input输入

         Output输出

        这两个的首字母就是IO的组成

(2)比如你的电脑可以通过网络上传文件和下载文件

       这个上传文件就是Output

       这个下载翁建就是input

(3)这个输入和输出的标准是以CPU为参照物为基准的

其中通过控制台来将数据传入到CPU中也是Input输入的过程。

图解

2.什么是文件 

(1)在我们的电脑上面定义的文件是一个抽像的概念。

        在我们的电脑上面有两种资源我们将硬件资源和软件资源统称为文件

(2)在我们的接下来的讲解中,我们讲解的文件指的是硬件资源

(3)其中我们要注意的就是我们电脑上面的资源管理器其实也是一格资源,它的名字是目录资源,他是将电脑硬件上面的资源来进行记录的。目录资源其实是一格树状的结构、

3.路径

3.1相对路径

相对路径是的起点可以是任意的路径,可以是以现在工作的路径往下面进行遍历的路径

3.2绝对路径

相对路径就是以此电脑为出发点来进行二叉树的遍历的路径

3.3路径的表示

所以在日常的开发中我建议大家使用/

如果想用\的话可以用转义字符来进行转义

 3.4用路径找到文件

4.文本文件和二进制文件

 (1)文本文件存储的数据要求必须是合法的字符

(2)二进制文件存储的数据可以是任意数据

(3)判断一个文件是二进制文件还是不是二进制文件可以用文档来打开,然后这个文档如果显示的是乱码的话那么这个就是一格二进制文件如果反之就是文本文件。

(4)下图总的就是一格二进制的文本文件

5.针对文件进行操作

(1)在大部分的文件操作有很多种简称(CRUD)

(2)也就是对文件进行

文件的创建,删除文件,创建目录,重命名文件

(4)在java中提供了File包来对文件进行操作(java.io)包中存着所有的java关于输入和输出的操作。

(5)

5.1用file类实现对文件目录的操作

以下这些操作就是日常中比较常用的file对文件进行的操作

(1)上面的这些操作其实都是调用了系统本身的api,这个是由c++编写的JVM来进行调用的,注意不同的操作系统的api的差距是非常大的。

(2)但是要知道的一件事就是JVM也有linux 等等的版本,所以jvm是非常nb的。

(3)****其中要注意的就是基准目录是什么,基准目录可以理解为你当前这个文件工作的目录就是基准目录**************

图示

 (3)其中在多线程的情况下我们可以搭配try ctatch和throw IOException来抛出这个线程的异常

5.2针对临时文件的删除

在我们运行一些文件的时候可能会产生临时的文件,例如我们的word在新建的时候会有两个文档分别是一个临时的,还有一个是主要的文件,临时文件是为了能够记录你电脑在极端情况下断电啥的,然后可以找回

通过这个就可以删除临时文件。

通过这个就可以更好的删除这些文件。

5.3总结加扩展

文件有几种操作分别是

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

上面的这些操作其实就是stream这个操作

举例

 6.针对文件的操作可以将文件分为(字符流)(文件流)

6.1字符流(二进制文件)

(1)inputStream

(2)OutputStream

6.2文件流(文本文件)

(1)read

(2)writer

6.3总结

(1)在后面的学习中我们会使用构造方法打开文件读写文件

(2)通过read和write来读写文件,然后用close来关闭文件

(3)字节!=字符往往多个字节对应多个字符

在java中我们用这个就能够来对字符来进行转换从文字变到字符流

 7.简单总结

(1)要注意的就是字节流以及字符流中的这些input Stream这些方法由于是构造方法所以是不能实例化的。

 8.标注库中对于File使用

(1)我们创建一格File类如果能够读取这个文件的话那么就可以对这个文件进行操作CRUD

 8.1读取操作

读取的操作有三种

8.1.1无参数类型read()

(1)第一种是无参数进行文件的读取,然后这个是一个字节一个字节进行读取,读取到的内容后面会进行返回。

(2)注意返回值应该是byte类型,因为byte的最大的返回值其实就是1字节,但是要注意的就是最后返回的其实是int类型

(3)其实最后的返回值是int类型,因为byte是只能表示正数,然后读取不到-1,但是int可以读取到,然后-1再字符集中表示的是结束的意思

8.1.带一个参数的版本read(byte)

(1)这个是写一个byte类型的数组然后我们会将数据存入到byte类型的数组中,

(2)这个读取多少取决于这个数组的长度是多少,read方法尽可能多的填满这个byte类型的数组

(3)最后返回值为int类型表示实际读取了多少的字节

代码示例

8.3对比

这两个方法对CPU资源的开销是一样的类似于你攒起来扔垃圾和用一次扔一样

(4)其中我们要注意的就是在实际的开发中我们还有可能用数组来存储读到的不同数据

8.2一些扩展知识

(1)我们平时见到的英文字母其实都是ascii表写出来的。(计算机中的字母和ascii一一对应)

(2)我们平时的图片是由字符串表示出来的。

(3)我们在操作文件的时候在不需要这个文件的时候需要关闭这个文件,也许在平时的过程中我们感知不到这个操作的重要性,但是在工作的过程中服务器是24小时运行的这时候字符表就会被占满,这时候就会发生内存的泄漏

(4)文件描述表,这个表可以进行配置其中每个系统的长度是不一样的。

(5)

 9.运用inputSTream来实现文件流的读取

10.OutputStream的使用 

10.1基础用法(三种)

(1)

其中注意的是在写的方法中如果我们没有选择追加写的方式来打开那么就会将整个文件给清除,所以我们在写的时候要注意这一点

(2)

11知识的扩展

11.1读read

(1)java中的char其实是2个字节但是我们的汉字是3个字节(UTF-8) ,但是在java中我们是使用UTF-8来进行编码的,在这个转码过程中会把3个字节的汉字转成unicade(2个字节)这时候就是两个字节的

(2)在java中内置了UTF-8编码以及ubicade这两种编码

(3)其中在java中的STring类是六个字节他是用byte来存储字符串的
(4)char是用unicade来进行编码的

11.2扩展注意事项 

(1)在使用输入流的时候可以使用scanner来进行扫描辅助,但是在做题的时候我是不建议大家使用这个的

(2)在写算法的代码题的时候是有一套复杂的io(目的是筛选人才)

11.3示例1(查询文件)

(1)扫描指定的目录然后删除这个文件中的内容,然后询问用户是否要进行删除

(2)先给定一个目录和查询词然后在写程序的时候看哪个查询词,把匹配的结果给查询到

(3)在File中有一个类是listFile这个可以把这个文件中包含哪些目录给列举出来

(4)这个查找这个是一个递归的过程

 

11.3示例2(复制文件) 

(1)输入一个路径表示这个是要复制这个文件的路径

(2)再输入一个路径表示的是这个复制了的文件以后要去的文件的路径

(3)判断输入的路径是否是合法的。

(4)判断要复制文件的父目录是否存在

在这里有两个判断方法

get Parent File(File)这个返回的是File

getParent(String)这个是返回的父目录的路径

在这里我们推荐使用File类中提供的方法

(5)如果这个父目录是不存在的那么我们就需要创建一个

(6)其中在创建文件的时候都要判断这个路径是否是合法的。(永远都不要相信用户)

11.4示例3(前两种示例的结合)

(1)将整个文件给读出来然后进行查找

(2)isDirectory() 方法只会检查路径所指向的对象是否是一个目录,而不会检查目录是否存在或其他操作系统权限等问题。如果路径指向的对象不存在,则该方法也会返回 false

相关文章:

JavaEE IO流(1)

1.什么是IO流 (1)input输入 Output输出 这两个的首字母就是IO的组成 (2)比如你的电脑可以通过网络上传文件和下载文件 这个上传文件就是Output 这个下载翁建就是input (3)这个输入和输出的标准是以CPU为参照物为基准的 其中通…...

Prisma是什么:现代数据库工具和ORM

Prisma是什么:现代数据库工具和ORM 引言 Prisma 是一个流行的开源数据库工具和对象关系映射(ORM)系统,用于帮助开发者以类型安全的方式与数据库进行交互。它提供了一套丰富的功能,包括数据库建模、迁移管理、数据访问…...

SpringBootWeb登录认证

JWT令牌 JSON Web Token JSON Web Tokens - jwt.ioJSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Signatur…...

vim编辑器的使用

删除当前行及以后的行 使用vim编辑器打开文件 vim xxx.txt删除指定行及后面所有行,光标定位到要删除的第一行,比如:删除第10行以后的数据,光标定位到11行,然后在命令模式下按dG...

深入理解Linux网络总结

1、内核如何接收网络包 1.1 RingBuffer到底是什么,RingBuffer为什么会丢包? 问:RingBuffer到底存在那一块,是如何被使用到的,真的就只是一个环形队列吗?RingBuffer内存是预先分配好的,还是随着…...

Python冷知识

Python作为一种广泛使用的编程语言,有许多功能和特性可能不为初学者或普通用户所熟知。以下是一些相对冷门但有趣的Python知识: 魔术方法:Python中有一些特殊的方法,通常以双下划线__开头和结尾,被称为魔术方法(或特殊方法)。例如,__init__用于初始化对象,__str__返回…...

Redis之内存管理过期、淘汰机制

1.Redis内存管理 我们的redis是一个内存型数据库,我们的数据也都是放在内存中的,内存是有限的空间,当数据满了之后,我们要怎么样继续保证redis的可用性呢?我们就需要采取点管理措施和机制来保证我们redis的可用性。 在redis.co…...

金融科技赋能跨境支付:便捷与安全并驾齐驱

一、引言 在全球经济一体化的背景下,跨境支付作为国际贸易和金融活动的重要组成部分,正迎来金融科技浪潮的洗礼。金融科技以其独特的创新性和颠覆性,正在重塑跨境支付市场的格局,使其更加便捷、高效且安全。本文旨在探讨金融科技如何助力跨境支付,实现便捷与安全并存,并…...

【康耐视国产案例】智能AI相机:深度解析DataMan 380大视野高速AI读码硬实力

随着读码器技术的不断更新迭代,大视野高速应用成为当前工业读码领域的关键发展方向。客户对大视野高速读码器的需求源于其能显著减少生产成本并提升工作效率。然而,大视野应用场景往往伴随着对多个条码的读取需求,这无疑增加了算法的处理负担…...

SQL实验 带函数查询和综合查询

一、实验目的 1.掌握Management Studio的使用。 2.掌握带函数查询和综合查询的使用。 二、实验内容及要求 1.统计年龄大于30岁的学生的人数。 --统计年龄大于30岁的学生的人数。SELECT COUNT(*) AS 人数FROM StudentWHERE (datepart(yea…...

【前端每日基础】day34——HTTP和HTTPS

HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)是互联网通信协议,用于在Web浏览器和Web服务器之间传输数据。以下是对HTTP和HTTPS的详细介绍: HTTP(Hypertext…...

go mongo 唯一索引创建

1. 登录mongo,创建数据库 mongosh -u $username -p $password use test 2. 查看集合索引 db.$collection_name.getIndexes() 为不存在的集合创建字段唯一索引 package mainimport ("context""fmt""log""time""go…...

微信小程序如何进行页面跳转

微信小程序中的页面跳转可以通过多种方式实现,以下是几种主要的跳转方式及其详细解释: wx.navigateTo 功能:保留当前页面,跳转到应用内的某个页面。特点: 可以在新页面使用wx.navigateBack返回原页面。每跳转一个新页…...

信息标记形式 (XML, JSON, YAML)

文章目录 🖥️介绍🖥️三种形式🏷️XML (Extensible Markup Language)🔖规范🔖注释🔖举例🔖其他 🏷️JSON (JavaScript Object Notation)🔖规范🔖注释&#x…...

C语言:学生成绩管理系统(含源代码)

一.功能 二.源代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NUM 100 typedef struct {char no[30];char name[10];char sex[10];char phone[20];float cyuyan;float computer;float datastruct; } *student, student1;typ…...

MySQL 导出导入的101个坑

最近接到一个业务自行运维的MySQL库迁移至标准化环境的需求&#xff0c;库不大&#xff0c;迁移方式也很简单&#xff0c;由开发用myqldump导出数据、DBA导入&#xff0c;但迁移过程坎坷十足&#xff0c;记录一下遇到的各项报错及后续迁移注意事项。 一、 概要 空间问题源与目…...

OpenCv之简单的人脸识别项目(人脸提取页面)

人脸识别 准备五、人脸提取页面1.导入所需的包2.设置窗口2.1定义窗口外观和大小2.2设置窗口背景2.2.1设置背景图片2.2.2创建label控件 3.定义单人脸提取脚本4.定义多人脸提取脚本5.创建一个退出对话框6.按钮设计6.1单人脸提取按钮6.2多人脸提取按钮6.3返回按钮 7.定义关键函数8…...

linux 内核映像差异介绍:vmlinux、zImage、zbImage、image、uImage等

一、背景 Linux内核是整个Linux操作系统的核心部分&#xff0c;它是一个负责与硬件直接交互的软件层&#xff0c;并且提供多种服务和接口&#xff0c;让用户程序能够方便地使用硬件资源。 当我们编译自定义内核时&#xff0c;可以将其生成为以下内核映像之一&#xff1a;vmli…...

【Linux-INPUT输入的子系统】

Linux-INPUT输入的子系统 ■ input 子系统简介■ input 驱动编写流程■ 事件类型 ■ ■ input 子系统简介 input 子系统就是管理输入的子系统&#xff0c; input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层&#xff0c;最终给用户空间提供可访问的设备节点 …...

密码加密及验证

目录 为什么需要加密&#xff1f; 密码算法分类 对称密码算法 非对称密码算法 摘要算法 DigestUtils MD5在线解密工具原理 实现用户密码加密 代码实现 为什么需要加密&#xff1f; 在MySQL数据库中&#xff0c;我们常常需要对用户密码、身份证号、手机号码等敏感信息进…...

找出字符串中出现最多次数的字符以及出现的次数

str.charAt(i) 是JavaScript中获取字符串中特定位置字符的方法&#xff0c;表示获取当前的字符。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…...

如何看待央行买卖长期国债?

央行远比大家想象中的要渴求货币宽松。 引子 今年以来&#xff0c;有不少关于“央行买卖长期国债”的讨论&#xff0c;前些时候关注点在“买”&#xff0c;最近关注点在“卖”。 然而&#xff0c;市场上的讨论采用了十分粗糙和松散的“自然语言”&#xff0c;所以&#xff0…...

MATLAB算法实战应用案例精讲-【数模应用】Turf组合模型(附MATLAB、python和R语言代码实现)

目录 几个高频面试题目 如何以最小的成本覆盖到最大的消费群体? 应用场景 TURF举例...

android源码下载编译模拟器运行

安卓aosp源码下载&#xff0c;编译&#xff0c;模拟器运行 virtualbox7 安装ubuntu20.04&#xff0c;ubuntu22.04 编译android aosp 源码可以&#xff0c;但是模拟器跑不了&#xff0c;哪个版本都是要么黑屏&#xff0c;要么整个vbox虚拟机闪退。解决方案使用vmware17 ##拯救…...

Golang:Sirupsen/logrus是一个日志库

Sirupsen/logrus是一个日志库 文档 https://github.com/Sirupsen/logrus 安装 go get github.com/sirupsen/logrus代码示例 package mainimport ("github.com/sirupsen/logrus" )func main() {var log logrus.New()log.Trace("Something very low level.&…...

Android Studio插件开发 - Dora SDK的IDE插件

IDE插件开发简介 Android Studio是一种常用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于开发Android应用程序。它提供了许多功能和工具&#xff0c;可以帮助开发人员更轻松地构建和调试Android应用程序。 如果你想开发Android Studio插件&#xff0c;以下是一…...

【mybatis】缓存

一级缓存和二级缓存 一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就会从一级缓存中直接获取&#xff0c;不会从数据库重新查询。一级缓存默认是开启 使一级缓存失效的四种情况&#xff1a; 11.1…...

自定义类型:结构体类型

在学习完指针相关的知识后将进入到c语言中又一大重点——自定义类型&#xff0c;在之前学习操作符以及指针时我们对自定义类型中的结构体类型有了初步的了解&#xff0c;学习了结构体类型的创建以及如何创建结构体变量&#xff0c;还有结构体成员操作符的使用&#xff0c;现在我…...

C++对象移动

在某些情况下,对象拷贝后就立即被销毁了,这时利用新标准(C11)提供的对象移动而非拷贝将大幅提升性能. 1.右值引用 为了支持移动操作,c11新增了一种引用 - 右值引用(rvalue reference)。这种引用必须指向右值,使用&&声明。 右值引用只能引用临时变量或常量值. 右值引用…...

“华为杯”第十三届中国研究生 数学建模竞赛-E题:粮食最低收购价政策问题研究(续)

目录 4.3 问题三:粮食价格的特殊规律性模型 4.3.1 分析和建模 4.3.2 求解和结果...