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

文件操作和IO

目录

一. 文件预备知识

1. 硬盘

2. 文件

(1) 概念

(2) 文件路径

(3) 文件类型

二. 文件操作

1. 文件系统操作

 [1] File常见的构造方法

[2] File的常用方法

[3] 查看某目录下所有的目录和文件

2. 文件内容操作

(1) 打开文件

(2) 关闭文件

(3) 读文件 

(4) 写文件


一. 文件预备知识

1. 硬盘

上一个要点中提到, 文件指的是计算机硬盘中存储的文件及目录. 那么硬盘是什么呢? 它有什么特点?

(1) 概念: 硬盘是计算机中用来存储数据的设备. 硬盘包括机械硬盘和固态硬盘. 机械硬盘读写速度较慢, 在特定场景下读写速度较快(顺序读写), 成本相对较低; 固态硬盘读写速度快(尤其是随机读写), 成本相对较高. 

(2) 硬盘和内存的区别: 硬盘存储空间大, 内存存储空间小; 硬盘读写速度快, 内存读写速度慢; 硬盘能持久存储数据, 内存在断电后数据丢失; 硬盘成本较低, 内存成本较高.

2. 文件

(1) 概念

狭义上的文件: 指的是计算机硬盘上存储的文件及保存文件的目录.

广义上的文件: 计算机中的很多硬件设备, 软件资源, 在操作系统中, 都会被统称为"文件". (比如输入用的键盘, 输出用的控制台, 还有打印机, 网卡等 这些软硬件资源都属于"文件").

[注]: 我们在文件操作中讨论的是 "狭义上的文件".

(2) 文件路径

  • 绝对路径: 从盘符(或根目录)开始, 一直到文件名结束, 表示某个文件完整的存储路径.

eg:

D:\Java_Wang\proj_BInaryTree\src 这个路径就表示文件src在计算机中的完整存储路径.

  • 相对路径: 从当前目录开始, 去表示某一文件的存储路径. ( "." 表示当前目录, ".." 表示上一级目录)

eg: 我们以D:\Java_Wang\proj_BInaryTree这个路径为当前目录, 那么src文件的相对路径就是: .\src

如果以D:\Java_Wang\proj_BInaryTree\src 为当前目录去表示out文件的相对路径, 那就应该表示为: ..\out (因为src的上一级目录是proj_BinaryTree)

[注]:  一般Windows系统中的文件分隔符是" \ "(反斜杠) , Linux系统的文件分隔符是" / "(斜杠). 但是Windows为了兼容Linux的用户, 同时支持" \ "和" / " , 但是, 需要注意的是, 写反斜杠的时候, 只写一个反斜杠" \ ", 表示转义字符; 写两个反斜杠" \\ "才表示反斜杠.

(3) 文件类型

  • 文本文件: 文本文件以字符的形式存储数据, 文件中存放的所有的二进制数据都能通过码表对应到正确的字符. (一般可以用文本编辑器打开查看)
  • 二进制文件: 二进制文件以二进制的形式存储数据, 文件中存放的二进制数据并非所有都能通过码表对应到字符. (一般用文本编辑器打开是乱码)

[注]: 文本文件和二进制文件在内存中都是以二进制 (0/1) 的形式存储的. 区别主要在于文本文件所有数据都能通过码表对应正确的字符, 对人类可读.  而二进制文件通过码表对应出来的字符是不可读的(乱码).

我们可以举个例子看看:

通过文本编辑器打开文本文件:

文本文件打开之后是正常的, 可读的文字.

通过文本编辑器打开二进制文件: 

二进制文件打开之后是一大堆不可读的乱码.

二. 文件操作

1. 文件系统操作

文件系统操作主要包括: 创建文件, 删除文件, 创建目录, 删除目录, 重命名文件, 判定文件是否存在 等.

java中, 提供了File类 (这个类封装了系统对于文件操作的API), 来帮助我们完成文件系统操作.  File这个类会将某个路径包装成一个对象, 后续对这个路径的操作全是基于这个对象进行的.  ([注]: 这个路径可以存, 在也可以不存在).

[1] File的构造方法

 [1] File常见的构造方法

(1) File(File parent, String child) --> 两个参数, 根据父目录对象和孩子文件的路路径创建一个File对象.

(2) File(String pathname) --> 一个参数, 根据文件路径创建一个File对象. (常用)

(3) File(String parent, String child) --> 两个参数, 根据父目录的路径和孩子文件的路径创建一个File对象.

[2] File的常用方法

关于对File的操作, java标准库提供了很多方法, 大家可以自行查看, 我们这里挑几个常用的方法讨论一下.

(1) getParent() : 返回值为String类型, 返回File对象的父目录的路径.

(2) getName() : 返回值为String类型, 返回File对象的文件名称.

(3) getPath() : 返回值为String类型, 返回文件的路径.

(4) getAbsolutePath() : 返回值为String类型, 返回文件的绝对路径.

(5) getCanonicalPath() : 返回值为String类型, 返回文件经过修饰的绝对路径.

下面我们通过代码演示一下上述几个方法:

import java.io.File;
import java.io.IOException;public class Demo1 {public static void main(String[] args) throws IOException {File file = new File(".\\test.txt"); //创建一个文件对象//注意: 这里写了一个相对路径, 这个相对路径的基准路径是当前项目所在的路径System.out.println(file.getParent()); //获取当前文件对象的父目录System.out.println(file.getName()); //获取当前文件名字System.out.println(file.getPath()); //获取当前文件的路径System.out.println(file.getAbsolutePath()); //获取当前文件的绝对路径System.out.println(file.getCanonicalPath()); //获取当前文件经过修饰的绝对路径}
}

我们这里声明了IOException, 我们咋进行文件操作的时候, 很可能会抛出异常, 主要原因有两点: 一是由于权限不够, 二是由于硬盘存储空间已满.

我们创建文件对象的时候, 给的路径是一个相对路径. 我们前面说过, 相对路径一定有一个基准路径, 这里test.txt文件的基准路径(当前目录)就是该项目所在目录. 那么该项目所在目录的路径是什么呢? 我们可以通过project --> Open in Explorer 来查看.

下面我们看这个程序的打印结果:

父目录的路径: 父目录的路径就是当前路径, 就是一个 "." 

文件名称: 文件名称就是test.txt

路径: 这里文件路径用相对路径表示.

文件的绝对路径: 显示文件的绝对路径 (注意这里的绝对路径没有删除 ".")

文件经过修饰后的绝对路径: 这里显示的绝对路径就是我们平时看到的绝对路径了. 修饰就相当于把 "." 删除掉了.

(6) createNewFile() : 返回值为boolean类型, 创建File对象代表的文件, 如果创建成功, 返回true.

我们看到, 这里成功在当前目录下创建了一个文件test.txt. 打印true. 我们在左侧项目列表中能看到, 多出了一个test.txt文件. 

(7) delete() : 返回值为boolean类型, 删除文件, 如果删除成功, 则返回true.

(8) deleteOnExit() : 没有返回值, 表示在进程结束时删除文件.

我们调用了deleteOnExit(), 表示在进程结束时删除该文件,  如上述运行结果,在先打印了两个"wait for Exit" 之后, 进程结束, 同时删除文件, 我们可以看到在同一时刻左侧项目列表中看到test.txt消失.

(9) mkdir() : 返回值为boolean类型, 创建File对象代表的目录 ([注]: 这里只能创建一级目录), 创建成功则返回true

如上述代码, 我们调用mkdir()方法, 并打印其返回值, 运行结果是true, 并且可以在左侧项目列表中看到出现了一个新的目录名为test.txt.

(10) mkdirs() : 返回值为boolean类型, 创建File对象代表的目录 (可以是多级目录), 创建成功则返回true.

如上述代码, 我们创建了多级目录. 

(11) isFile() : 返回值为boolean类型, 判断当前File对象代表的文件是否是一个普通文件.

(12) isDirectory() : 返回值为boolean类型, 判断当前File对象代表的文件是否是一个目录.

调用isFile()和isDirectory()判断test.txt的文件类型. 显然, text是一个普通文件, 不合是一个目录. 所以打印 true, false. 

(13) list() : 返回值为String[]类型, 返回一个字符串数组. 返回File对象代表的目录下所有的文件的名称.

运行代码, 我们发现, 如果我们直接打印 list() 的结果, 得到的是一串哈希码, 但这显然不是我们想要的. 所以, 我们如果想得到所有文件的名称, 还需要一步处理: Arrays.toString(). 

这样一来就得到了我们想要的文件名称了. 

(14) listFiles() : 返回值为File[], 返回一个File类型的数组. 返回File对象代表的目录下所有的文件对象.

listFiles()方法能够获取所有文件对象, 而list()方法只能获取文件名称, 所以我们日常开发中, 使用listFiles() 会更多一点.

(15) renameTo(File dest) : 返回值为boolean类型, 进行文件改名操作. 

我们先创建出一个名称为"aaa"文件.

下一步调用renameTo方法将文件aaa的名称改为bbb.

[3] 查看某目录下所有的目录和文件

通过list()和listFiles(), 我们只能查看到当前目录下面一层的文件. 但是如果我们想要获取到当前目录下面所有的目录和文呢?  --> 通过递归的方法实现.

import java.io.File;public class Demo4 {private static void scan(File currentDir) {File[] files = currentDir.listFiles(); // 1. 获取该目录下所有的文件if (files == null || files.length == 0 ) {return;// 2. 如果目录为空 / 给定路径不是目录 --> 直接返回.}System.out.println(currentDir.getAbsolutePath());// 3. 打印目录的路径for (File f : files) {// 4. 遍历当前目录下所有的内容.if (f.isFile()) {// 如果是普通文件, 直接打印其路径System.out.println(f.getAbsolutePath());} else {// 如果是目录(不是普通文件), 那就递归调用scan方法.scan(f);}}}public static void main(String[] args) {File f = new File(".");scan(f);}
}

 如上述运行结果, 这里就打印出了当前目录下 所有的 目录(+其中的文件) 和 文件. 

2. 文件内容操作

文件内容的操作, 无非两种, 读文件和写文件. 对于读文件和写文件的操作, 系统也有相应的API, 并且 java 也对这些 API 进行了封装, 叫做 "文件流" 或者 "IO流". (流: Stream).

为什么叫流呢? 因为它的读写方式是流式的. 什么是流式? --> 我们可以结合水流来理解一下: 比如我接水的时候, 要接100ml的水, 那么我可以一次接100ml全接完, 也可以一次接50ml分两次接完, 也可以一次接10ml分10次接完, 也可以第一次接1ml, 第二次接2ml, 第三次接3ml, ... 直到接完100ml.  类似地, IO流在读数据的时候, 要读100byte的数据, 可以一次把100byte全读完, 也可用一次读取50byte, 分两次读完, 也可以一次读10byte, 分10次读完, 也可以第一次读1byte, 第二次读2byte, 第三次读3byte, ... 直到读完100byte.

上述这样的读写方式, 我们就成为是"流式"的.

Java中实现IO流的类有很多, 我们把它们分成两大类: 字符流(用于读写文本文件) 和 字节流(用于读写二进制文件). 字符流是以字符为读写的基本单位; 字节流是以字节为读写的基本单位.

字节流又分为 字节输入流(InputStream) 和 字节输出流(OutputStream).

字符流又分为 字符输入流(Reader) 和 字符输出流(Writer).

上面说的这4个类, 都是抽象类, Java中又提供了很多很多类实现了这4个抽象类.

 其中, 以 InputStream, OutputStream 结尾的, 就是实现了 InputStream, OutputStream 的类.  以Reader, Writer 结尾的, 就是实现了 Reader, Writer 的类.

这么多类, 我们当然不需要全部掌握, 我们只需要掌握其中几个重点的类即可, 其他的在以后如果有用到再查.

[注]: 什么是"输入", 什么是"输出"? --> 我们一般站在CPU的角度讨论这个问题: 数据远离CPU是输出, 数据靠近CPU是输入.

InputStream

如上述代码, 我们创建了一个字节流对象, 由于InputStream是抽象类, 不能直接用它创建对象, 所以我们使用它的实现类FileInputStream来创建对象. 这里抛出的FileNotFoundException是IOException的子类. (所以在这里我们直接写IOException也是没有问题的).

注意: 这里FileInputStream类构造方法中传的参数就是我们要进行读写的目标文件, 这个参数可以是绝对路径, 可以是相对路径, 还可以是File对象.

 

上述代码的含义: 创建了一个字节流对象, 并且打开指定目录的文件(此处并不能直接看出来, 但是这样的代码确实隐含了这样的操作).

注意, 在这里我们使用完字节流对象之后, 记得要释放资源.

关于这里为什么要释放资源, 我们来具体解释一下: 我们先需要知道, 系统中有一个文件描述符表, 它本质上是一个长度固定, 不可扩容的数组, 如果我们打开一个文件, 就相当于在文件描述符表上插入了一个元素(占用了一个位置), 只有调用close(), 才能把这个占用的空间释放出来, 如果我们不去调用close(), 那么这个位置就会被持续占用, 如果我们一直打开文件, 一直不关闭, 那么用不了多久这个文件描述符表就会被占满, 到那时候我们再打开文件, 就会出现错误! --> 这个问题就被称为"文件资源泄漏"问题. 所以, 我们在打开文件之后, 一定记得要关闭, 避免出现这样的问题.

但是我们发现, 每打开一个文件都要写一遍close(), 这样太麻烦了, Java也考虑到了这一点, 所以提供了一种语法: try with resources 这样的语法. 

如上述代码, 这里 try() 中创建的资源(可以是多个资源), 在 try() 后{   }中的内容执行完毕之后, 会自动执行 close() 把打开的资源关闭. 

文件内容的操作有四种:

(1) 打开文件

打开文件会在创建资源的时候自动打开.

(2) 关闭文件

调用close()

(3) 读文件 

使用read方法. 

 

 

这里返回值是 int 而不是 byte 的原因是: 如果是正常返回, 那么就返回0-255, 如果读到文件末尾了, 那就返回-1. (如果使用byte的话, 只能表示0-255的数据, 无法返回-1).

我们再来看这三个构造方法分别表示什么意思:

<1> int read() : 从输入流中读取一个字节的数据, 并返回一个整数. (调用一次, 读一个字节, 返回值就是这个字节的内容)

<2> int read(byte[ ] b) : 从输入流中读取数据到字节数组b中, 读取的最大长度是b.length(). 

<3> int read(byte[ ] b, int off, int len) : 从输入流中读取数据到字节数组b中, 从b数组的off偏移量 (其实就是数组中某个指定位置) 开始, 读取的最大长度是len.

[注]: <2> <3> 中的b参数, 是"输出型参数", 表示该方法的输出结果是存到数组b中的.

(4) 写文件

使用write方法

 

 

write方法没有返回值, 参数表示的含义也和read差不多.

<1> void write(int b) : 将一个字节写入输出流, b表示要输出的字节的整数表示形式.

<2> void write(byte[ ] b) : 写入输出流一个字节数组.

<3> void write(byte[] b) : 将字节数组b中从off偏移量开始的len个字节写入输出流.

[注]: OutputStream, 在调用write()时, 默认会清空原来的内容. 如果我们不想清空原来的内容, 要追加写, 我们就可以在构造方法中加上一个true, 表示追加写.

好, 那么上面是关于字节流读写的方法, 那么字符流呢?  --> 与字节流十分相似

 <1> int read() : 从输入流中读取一个字符.

<2> int read(char[ ] cbuf) : 从输入流中读取数据到字符数组cbuf中.

<3> int read(CharBuffer target) : 从输入流中读取数据到指定缓冲区中 (缓冲区: buffer).

<4> int read(char[ ] cbuf, int off, int len) : 从输入流中读取数据到字符数组cbuf中, 从cbuf数组的off偏移量开始, 读取的最大长度是len.

<1>  void write(int c) : 将一个字符写入输出流, c是子字符的整数表示形式.

<2> void wrtie(String str) : 将一个字符串写入输出流.

<3> void write(char[ ], cbuf) : 写入输出流一个字符数组.

<4> void write(String str, int off, int len) : 将字符串str中从off偏移量开始的len个字符写入输出流.

<5> void write(char[ ] cbuf, int off, int len) : 将字符数组cbuf中从off偏移量开始的len个字符写入输出流.

 好了, 本篇文章就介绍到这里啦, 大家如果有疑问欢迎评论, 如果喜欢小编的文章, 记得点赞收藏~~

 

相关文章:

文件操作和IO

目录 一. 文件预备知识 1. 硬盘 2. 文件 (1) 概念 (2) 文件路径 (3) 文件类型 二. 文件操作 1. 文件系统操作 [1] File常见的构造方法 [2] File的常用方法 [3] 查看某目录下所有的目录和文件 2. 文件内容操作 (1) 打开文件 (2) 关闭文件 (3) 读文件 (4) 写文件 …...

【C++滑动窗口】1248. 统计「优美子数组」|1623

本文涉及的基础知识点 C算法&#xff1a;滑动窗口及双指针总结 LeetCode1248. 统计「优美子数组」 给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字&#xff0c;我们就认为这个子数组是「优美子数组」。 请返回这个数组中 「优美子数组」 的数…...

C语言导航 4.1语法基础

第四章 顺序结构程序设计 第一节 语法基础 语句概念 语句详解 程序详解 4.1.1语句概念 说明&#xff1a;构成高级语言源程序的基本单位。 特征&#xff1a;在C语言中语句以分号作为结束标志。 分类&#xff1a; &#xff08;1&#xff09;简单语句&#xff1a;空语句、…...

使用 Python 和 Py2Neo 构建 Neo4j 管理脚本

Neo4j 是一个强大的图数据库&#xff0c;适合处理复杂的关系型数据。借助 Python 的 py2neo 库&#xff0c;我们可以快速实现对 Neo4j 数据库的管理和操作。本文介绍一个功能丰富的 Python 脚本&#xff0c;帮助用户轻松管理 Neo4j 数据库&#xff0c;包含启动/停止服务、清空数…...

Centos 7 安装wget

Centos 7 安装wget 最小化安装Centos 7 的话需要上传wget rpm包之后再路径下安装一下。rpm包下载地址&#xff08;http://mirrors.163.com/centos/7/os/x86_64/Packages/&#xff09; 1、使用X-ftp 或者WinSCP等可以连接上传的软件都可以首先连接服务器&#xff0c;这里我用的…...

定时器的小应用

第一个项目 第一步&#xff0c;RCC开启时钟&#xff0c;这个基本上每个代码都是第一步&#xff0c;不用多想&#xff0c;在这里打开时钟后&#xff0c;定时器的基准时钟和整个外设的工作时钟就都会同时打开了 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);第二步&…...

linux企业中常用NFS、ftp服务

1.静态ip配置 修改ip地址为静态vim /etc/sysconfig/network-scripts/ifcfg-enxxx BOOTPROTO"static" IPADDR192.168.73.10 GATEWAY192.168.73.2 # 该配置与虚拟机网关一致 NETMASK255.255.255.0重启网卡&#xff1a;systemctl restart network.service ping不通域名…...

数据结构与算法分析模拟试题及答案5

模拟试题&#xff08;五&#xff09; 一、单项选择题&#xff08;每小题 2 分&#xff0c;共20分&#xff09; &#xff08;1&#xff09;队列的特点是&#xff08;   &#xff09;。 A&#xff09;先进后出 B&#xff09;先进先出 C&#xff09;任意位置进出 D&#xff0…...

.NET 9.0 中 System.Text.Json 的全面使用指南

以下是一些 System.Text.Json 在 .NET 9.0 中的使用方式&#xff0c;包括序列化、反序列化、配置选项等&#xff0c;并附上输出结果。 基本序列化和反序列化 using System; using System.Text.Json; public class Program {public class Person{public string Name { get; se…...

Python自动检测requests所获得html文档的编码

使用chardet库自动检测requests所获得html文档的编码 使用requests和BeautifulSoup库获取某个页面带来的乱码问题 使用requests配合BeautifulSoup库&#xff0c;可以轻松地从网页中提取数据。但是&#xff0c;当网页返回的编码格式与Python默认的编码格式不一致时&#xff0c…...

11.12机器学习_特征工程

四 特征工程 1 特征工程概念 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 …...

RAG经验论文《FACTS About Building Retrieval Augmented Generation-based Chatbots》笔记

《FACTS About Building Retrieval Augmented Generation-based Chatbots》是2024年7月英伟达的团队发表的基于RAG的聊天机器人构建的文章。 这篇论文在待读列表很长时间了&#xff0c;一直没有读&#xff0c;看题目以为FACTS是总结的一些事实经验&#xff0c;阅读过才发现FAC…...

【配置后的基本使用】CMake基础知识

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1.…...

ollama+springboot ai+vue+elementUI整合

1. 下载安装ollama (1) 官网下载地址&#xff1a;https://github.com/ollama/ollama 这里以window版本为主&#xff0c;下载链接为&#xff1a;https://ollama.com/download/OllamaSetup.exe。 安装完毕后&#xff0c;桌面小图标有一个小图标&#xff0c;表示已安装成功&…...

【项目开发】理解SSL延迟:为何HTTPS比HTTP慢?

未经许可,不得转载。 文章目录 前言HTTP与HTTPS的耗时差异TCP握手HTTPS的额外步骤:SSL握手使用curl测量SSL延迟性能与安全的权衡前言 在互联网发展的早期阶段,Netscape公司设计了SSL(Secure Sockets Layer)协议,为网络通信提供加密和安全性。有人曾提出一个大胆的设想:…...

2.STM32之通信接口《精讲》之USART通信

有关通信详解进我主页观看其他文章&#xff01;【免费】SPIIICUARTRS232/485-详细版_UART、IIC、SPI资源-CSDN文库 通过以上可以看出。根据电频标准&#xff0c;可以分为TTL电平&#xff0c;RS232电平&#xff0c;RS485电平&#xff0c;这些本质上都属于串口通信。有区别的仅是…...

Bootstrap和jQuery开发案例

目录 1. Bootstrap和jQuery简介及优势2. Bootstrap布局与组件示例&#xff1a;创建一个响应式的表单界面 3. jQuery核心操作与事件处理示例&#xff1a;使用jQuery为表单添加交互 4. Python后端实现及案例代码案例 1&#xff1a;用户登录系统Flask后端代码前端代码 5. 设计模式…...

Qt 之 qwt和QCustomplot对比

QWT&#xff08;Qt Widgets for Technical Applications&#xff09;和 QCustomPlot 都是用于在 Qt 应用程序中绘制图形和图表的第三方库。它们各有优缺点&#xff0c;适用于不同的场景。 以下是 QWT 和 QCustomPlot 的对比分析&#xff1a; 1. 功能丰富度 QWT 功能丰富&a…...

【STM32】MPU6050简介

文章目录 MPU6050简介MPU6050关键块带有16位ADC和信号调理的三轴MEMS陀螺仪具有16位ADC和信号调理的三轴MEMS加速度计I2C串行通信接口 MPU6050对应的数据手册&#xff1a;MPU6050 陀螺仪加速度计 链接: https://pan.baidu.com/s/13nwEhGvsfxx0euR2hMHsyw?pwdv2i6 提取码: v2i6…...

Oracle 单机及 RAC 环境 归档模式及路径修改

Oracle 数据库的使用过程中经常会根据需求的不同而调整归档模式&#xff0c;也经常会修改归档文件存放路径。 下面分别演示单机及 RAC 环境下修改归档模式及路径的操作步骤。 一、单机环境 1.查询当前归档模式及路径 SQL> archive log list Database log mode …...

抽象java入门1.5.3.1——类的进阶

前言&#xff1a;在研究神技代码Hello word的时候&#xff0c;发现了一个重大公式bug&#xff0c;在代码溯源中&#xff0c;我发现了一个奇怪的东西&#xff0c;就是OUT不是类中类&#xff08;不是常规类的写法&#xff09; 内容总结&#xff1a; 代码运行的顺序复习 正片开始…...

python——模块 迭代器 正则

一、python模块 先创建一个 .py 文件&#xff0c;这个文件就称之为 一个模块 Module。 使用模块的优点&#xff1a; 模块化编程&#xff0c;多文件编程 1.2 模块的使用 1.2.1 import语句 想要B.py文件中&#xff0c;使用A.py文件&#xff0c;只需要在B.py文件中使用关键字…...

QT仿QQ聊天项目,第三节,实现聊天界面

一&#xff0c;界面控件示意图 界面主要由按钮QPushButton,标签QLabel,列表QListWidget 要注意的是QListWidget既是实现好友列表的控件&#xff0c;也是实现聊天气泡的控件 二&#xff0c;控件样式 QPushButton#btn_name {border:none;}QPushButton#btn_close {border:1px;bac…...

Linux-何为CentOS

今年公司做的 POC 项目中&#xff0c;越来越多地听到客户开始或已经将系统迁移到麒麟、统信、openEuler&#xff0c;但还是有很多客户在用CentOS 7&#xff0c;或者和CentOS 7兼容的其他Linux。今天把CentOS 7相关概念统一整理下供后续参考使用 何为CentOS CentOS — Communit…...

C++中的 std::optional

std::optional<T>是 C17 中的一个标准库组件&#xff0c;optional <T>对象默认是空的&#xff0c;也就是处于无效状态&#xff0c;给它赋值后因为里面有了元素&#xff0c;就变成了有效状态。 1.引入背景 c函数常用返回值表示函数是否执行成功。如返回nullptr表示…...

猫狗识别之BUG汇总

一、github登不上去问题 下载watt toolkit 下载地址&#xff1a;https://steampp.net/ 可以下载后加速&#xff0c;访问github 二、猫狗总体参考核心 B哥的博客 https://github.com/bubbliiiing/classification-keras?tabreadme-ov-file 三、CSDN很多会员才能阅读问题 根据…...

【论文复现】自动化细胞核分割与特征分析

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀自动化细胞核分割与特征分析 引言1. 效果展示2. HoverNet概述3. HoverNet原理分析整体网络框架实例分割原理 4. HoverNet评估结果5. 复现过程…...

排序算法 -快速排序

文章目录 1. 快速排序&#xff08;Quick Sort&#xff09;1.1、 简介1.2、 快速排序的步骤 2. Hoare 版本2.1、 基本思路1. 分区&#xff08;Partition&#xff09;2. 基准选择&#xff08;Pivot Selection&#xff09;3. 递归排序&#xff08;Recursive Sorting&#xff09; 2…...

K8S 查看pod节点的磁盘和内存使用情况

查看某个节点的磁盘使用率&#xff1a; kubectl exec -it pod名称 -n 命名空间 – df -h 查询所有节点的已使用内存&#xff1a; kubectl top pods --all-namespaces | grep itsm 查询某个节点的总内存&#xff0c; kubectl describe pod itsr-domain-59f4ff5854-hzb68 --nam…...

华为HCIP——MSTP/RSTP与STP的兼容性

一、MSTP/RSTP与STP的兼容性的原理&#xff1a; 1.BPDU版本号识别&#xff1a;运行MSTP/RSTP协议的交换机会根据收到的BPDU&#xff08;Bridge Protocol Data Unit&#xff0c;桥协议数据单元&#xff09;版本号信息自动判断与之相连的交换机的运行模式。如果收到的是STP BPDU…...

网站模板加盟代理/全国各城市感染高峰进度查询

1086.花生米&#xff08;五&#xff09; 时限&#xff1a;1000ms 内存限制&#xff1a;10000K 总时限&#xff1a;3000ms 描述 五一长假第六天&#xff0c;Tom在QQ上遇到了Kitty。呵呵&#xff0c;Kitty&#xff0c;在离散数学课上认识的PPMM……等等&#xff01;Tom恍然大…...

平面设计线上培训班哪个好/seo上排名

...

seo在线网站诊断推推蛙/今天的新闻 最新消息摘抄

2019独角兽企业重金招聘Python工程师标准>>> Bean的作用域Spring 3中为Bean定义了5中作用域&#xff0c;分别为singleton&#xff08;单例&#xff09;、prototype&#xff08;原型&#xff09;、request、session和global session&#xff0c;5种作用域说明如下&am…...

wordpress onclick/百度电脑版网页版入口

本期视频演讲稿 https://www.bilibili.com/video/bv1C54y1W7vn 最近正在进行U3D项目移植到h5平台&#xff0c;在移植UI图集时&#xff0c;需要将分离图集 那么如何将下图分离成小图&#xff1f; 最终移植效果游戏在线试玩http://www.4399.com/flash/217641.htm 分离后 操作…...

个人网站建设策划书/怎么做一个网页

以下内容均为网络上整理的资料 一.链接是什么? 我们在这里可以去引用csapp 的定义 : 链接&#xff08;linking&#xff09;是将各种代码和数据部分收集起来并组合成为一个单一文件的过程&#xff0c;这个文件可被加载&#xff08;或被拷贝&#xff09;到存储器并执行。 了解…...

前端旅游网站行程怎么做/googleseo优化

主要作用作用&#xff1a;.解耦.异步.消峰 还包括&#xff1a;扩展性 灵活性 可恢复性 顺序保证 缓冲 主要成员&#xff1a; producer&#xff1a;消息生产者&#xff0c;发布消息到 kafka 集群的终端或服务。 broker&#xff1a;kafka 集群中包含的服务器。 topic&#xff1…...