Java高级之File类、节点流、缓冲流、转换流、标准I/O流、打印流、数据流
第13章 IO流
文章目录
- 一、File类的使用
- 1.1、如何创建File类的实例
- 1.2、常用方法
- 1.2.1、File类的获取功能
- 1.2.2、File类的重命名功能
- 1.2.3、File类的判断功能
- 1.2.4、File类的创建功能
- 1.2.5、File类的删除功能
- 二、IO流原理及流的分类
- 2.1、Java IO原理
- 2.2、流的分类/体系结构
- 三、节点流(或文件流)
- 3.1、读入数据 FileReader
- 3.2、写出数据 FileWriter
- 3.3、使用FileReader 和 FileWriter 实现文本文件的复制
- 3.4、FileInputStream
- 3.5、使用FileInputStream和FileOutputStream实现对图片的复制操作
- 四、处理流之一---缓冲流
- 4.1、使用BufferedInputStream和BufferedOutputStream实现对图片的复制操作
- 4.2、实现文件的复制
- 五、处理流之二---转换流
- 5.1、InputStreamReader的使用
- 5.2、综合使用 InputStreamReader 和 OutputStreamWriter
- 5.3、多种字符集编码
- 六、标准输入、输出流
- 6.1、练习题
- 七、打印流
- 八、数据流
一、File类的使用
- File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)
- FiLe类声明在
java.io
包下- File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用Io流来完成。
- 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”
1.1、如何创建File类的实例
File(String filePath)
File(String parentPath, String childPath)
File(String parentFile, String childPath)
-
相对路径:相较于某个路径下,指明的路径。
-
绝对路径:包含盘符在内的文件或文件目录的路径
-
路径分隔符:
windows: \\
unix: /
说明:
IDEA中
:如果开发使用JUnit中的单元测试方式测试,相对路径即为当前Module下。如果使用main()测试,相对路径即为当前的Project下。
Eclipse中
:不管使用单元测试方法还是使用main()测试,相对路径即为当前的Project下。
1.2、常用方法
1.2.1、File类的获取功能
public String getAbsolutePath():获取绝对路径
public String getPath() :获取路径
public String getName() :获取名称
public String getParent():获取上层文件目录路径。若无,返回null
public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
public long lastModified() :获取最后一次的修改时间,毫秒值
public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
@Test
public void test2(){File file1 = new File("hello.txt");File file2 = new File("D:\\JAVA NOTES\\核心基础笔记\\Java高级编程\\hi.txt");System.out.println(file1.getAbsoluteFile());System.out.println(file1.getPath());System.out.println(file1.getName());System.out.println(file1.getParent());System.out.println(file1.length());System.out.println(new Date(file1.lastModified()));System.out.println("----------------------");System.out.println(file2.getAbsoluteFile());System.out.println(file2.getPath());System.out.println(file2.getName());System.out.println(file2.getParent());System.out.println(file2.length());System.out.println(file2.lastModified());
}@Test
public void test3(){File file = new File("F:\\ProjectsLocation\\IdeaProjects\\Indomitable\\src");String[] list = file.list();for (String s:list){System.out.println(s);}File[] listFiles = file.listFiles();for (File f:listFiles){System.out.println(f);}
}
1.2.2、File类的重命名功能
/*** public boolean renameTo(File dest):把文件重命名为指定的文件路径* 比如: file1.renameTo(file2)为例:* 要想保证返回true,需要file1在硬盘中是存在的,且file2不能在硬盘中存在。*/
@Test
public void test4(){File file1 = new File("hello.txt");File file2 = new File("he.txt");boolean rename = file1.renameTo(file2);System.out.println(rename);
}
1.2.3、File类的判断功能
public boolean isDirectory():判断是否是文件目录 public boolean isFile() :判断是否是文件 public boolean exists() :判断是否存在 public boolean canRead() :判断是否可读 public boolean canWrite() :判断是否可写 public boolean isHidden() :判断是否隐藏
@Test
public void test5(){File file1 = new File("F:\\ProjectsLocation\\IdeaProjects\\Indomitable\\src");System.out.println(file1.isDirectory());System.out.println(file1.isFile());System.out.println(file1.exists());System.out.println(file1.canRead());System.out.println(file1.canWrite());System.out.println(file1.isHidden());System.out.println("***************");File file2 = new File("hello.txt");System.out.println(file2.isDirectory());System.out.println(file2.isFile());System.out.println(file2.exists());System.out.println(file2.canRead());System.out.println(file2.canWrite());System.out.println(file2.isHidden());
}
1.2.4、File类的创建功能
public boolean createNewFile() :创建文件。若文件存在,则不创建,返回falsepublic boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。
如果此文件目录的上层目录不存在,也不创建。public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建
注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目
路径下。
@Test
public void test7(){//文件目录的创建File file1 = new File("D:\\Java\\1.尚硅谷全套JAVA教程--基础阶段(73.36GB)\\尚硅谷宋红康Java核心基础_好评如潮\\Java基础全套视频教程\\day25_泛型与File\\20230527");boolean mkdir = file1.mkdir();if (mkdir){System.out.println("创建成功1");}File file2 = new File("D:\\Java\\1.尚硅谷全套JAVA教程--基础阶段(73.36GB)\\尚硅谷宋红康Java核心基础_好评如潮\\Java基础全套视频教程\\day25_泛型与File\\20230528");boolean mkdirs = file2.mkdirs();//级联创建if (mkdirs){System.out.println("创建成功2");}
}
1.2.5、File类的删除功能
public boolean delete():删除文件或者文件夹
删除注意事项:
Java中的删除不走回收站。
要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录
二、IO流原理及流的分类
2.1、Java IO原理
- I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于 处理设备之间的数据传输。如读/写文件,网络通讯等。
- Java程序中,对于数据的输入/输出操作以“流(stream)” 的 方式进行。
- java.io包下提供了各种“流”类和接口,用以获取不同种类的 数据,并通过标准的方法输入或输出数据。
输入input
:读取外部数据(磁 盘、光盘等存储设备的数据)到 程序(内存)中。
输出output
:将程序(内存) 数据输出到磁盘、光盘等存储设备中。
2.2、流的分类/体系结构
- 按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
- 按数据流的流向不同分为:输入流,输出流
- 按流的角色的不同分为:节点流,处理流

流的分类理解示意图:

三、节点流(或文件流)
* 抽象基类 节点流(或文件流) 缓冲流(处理流的一种)
InputStream FileInputStream (read(byte[] buffer)) BufferedInputStream (read(byte[] buffer,0,len))* OutputStream FileOutPutStream (write(byte[] buffer,0,len)) BufferedOutputStream (write(byte[] buffer))* Reader FileReader (read(char[] cbuf)) BufferedReader (read(char[] cbuf))* Writer FileWriter (write(char[] cbuf,0,len)) BufferedWriter (write(char[] cbuf,0,len))
本章步骤:
1.实例化File类的对象,指明要操作的文件
2.提供具体的流
3.数据的读入
4.流的关闭操作
3.1、读入数据 FileReader
@Testpublic void test1(){FileReader fr = null;try {//1.实例化File类的对象,指明要操作的文件File file = new File("hello.txt ");//相较于当前Module//2.提供具体的流fr = new FileReader(file);//3.数据的读入//read():返回读入的一个字符。如果达到文件末尾,返回 -1//方式一
// int data = fr.read();
// while (data != -1){
// System.out.print((char)data);
// data = fr.read();
// }//方式二:语法上针对方式一的修改int data;while ((data = fr.read()) != -1){System.out.print((char)data);}}catch (Exception e){e.printStackTrace();}finally {//4.流的关闭操作try {//可能会有空指针异常if (fr != null){fr.close();}}catch (Exception e){e.printStackTrace();}}}
对 read()操作升级:使用read 的重载方法
@Testpublic void test2() throws IOException {FileReader fr = null;try {//1.File类的实例化File file = new File("hello.txt ");//相较于当前Module//2.FileReader流的实例化fr = new FileReader(file);//3.读入的操作char[] cbuf = new char[5];int len;while ((len = fr.read(cbuf)) != -1){
// //方式一
// for (int i=0;i<len; i++){
// System.out.print(cbuf[i]);
// }//方式二String s = new String(cbuf, 0, len);System.out.print(s);}} catch (Exception e) {e.printStackTrace();} finally {try {//4.资源的关闭if (fr != null){fr.close();}} catch (Exception e) {e.printStackTrace();}}}
3.2、写出数据 FileWriter
从内存中写出数据的到硬盘文件的操作
说明:
输出操作,对应的File可以不存在,并不会报异常
File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件
File对应的硬盘中的文件如果存在:
① 如果流使用的构造器是 FileWriter(file, false) / FileWriter(file):对原有文件的覆盖
② 如果流使用的构造器是 FileWriter(file, true):不会对原有文件覆盖,而是在原有文件基础上追加内容
/*** 从内存中写出数据的到硬盘文件的操作* 说明:* 1.输出操作,对应的File可以不存在,并不会报异常* 2.File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件* File对应的硬盘中的文件如果存在:* 如果流使用的构造器是 FileWriter(file, false) / FileWriter(file):对原有文件的覆盖* 如果流使用的构造器是 FileWriter(file, true):不会对原有文件覆盖,而是在原有文件基础上追加内容*/
@Test
public void testFileWriter() throws IOException {//1.提供File类的对象,指明写出搭配的文件File file = new File("hello1.txt");//2.提供FileWriter的对象,用于数据的写出FileWriter fw = new FileWriter(file, true);//3.写出的操作fw.write("I hava a little dream!\n");fw.write("You need to hava a dream!\n");//4.流资源的关闭fw.close();
}
3.3、使用FileReader 和 FileWriter 实现文本文件的复制
步骤:
1.创建File类的对象,指明读入和写出的文件
2.提供输入流和输出流的对象
3.数据的读入和写出操作
4.关闭流资源
@Test
public void testFileReaderFileWriter(){FileWriter fw = null;FileReader fr = null;try {//1.创建File类的对象,指明读入和写出的文件File srcFile = new File("hello.txt");File destFile = new File("hello2.txt");//2.提供输入流和输出流的对象fr = new FileReader(srcFile);fw = new FileWriter(destFile);//3.数据的读入和写出操作char[] cbuf = new char[5];int len;//记录每次读入到cbuf数组中的字符个数while ((len = fr.read(cbuf)) != -1){//每次写出 len个字符fw.write(cbuf, 0, len);}} catch (IOException e) {throw new RuntimeException(e);} finally {//4.关闭流资源try {if (fw != null) {fw.close();}} catch (IOException e) {e.printStackTrace();}try {if (fr != null){fr.close();}} catch (IOException e) {e.printStackTrace();}}
}
3.4、FileInputStream
总结:
- 1.对于文本文件(.txt, .java, .c, .cpp), 使用字符流处理
- 2.对于非文本文件(.jpg, .mp3, .mp4, .avi, .doc, .ppt, …),使用字节流处理
/*** 使用字节流 FileInputStream 处理文本文件,可能出现乱码*/
@Test
public void test1() throws IOException {FileInputStream fis = null;try {//1.造文件File file = new File("hello.txt");//2.造流fis = new FileInputStream(file);//3.读数据byte[] buffer = new byte[5];int len;//记录每次读取的字节的个数while ((len = fis.read(buffer)) != -1){String str = new String(buffer, 0, len);System.out.print(str);}} catch (IOException e) {e.printStackTrace();} finally {//4.关闭流try {if (fis != null){fis.close();}} catch (IOException e) {e.printStackTrace();}}
}
3.5、使用FileInputStream和FileOutputStream实现对图片的复制操作
/*** 使用FileInputStream和FileOutputStream实现对图片的复制操作*/
@Test
public void testFileInputOutputStream(){FileInputStream fis = null;FileOutputStream fos = null;try {//1.造文件File srcFile = new File("头像.jpg");File destFile = new File("头像2.jpg");//2.造流fis = new FileInputStream(srcFile);fos = new FileOutputStream(destFile);//3.复制byte[] buffer = new byte[5];int len;//记录每次读入的长度while ((len = fis.read(buffer)) != -1){fos.write(buffer, 0, len);}System.out.println("复制成功!");} catch (IOException e) {e.printStackTrace();} finally {//4.关闭流try {if (fis != null){fis.close();}} catch (IOException e) {e.printStackTrace();}try {if (fos != null){fos.close();}} catch (IOException e) {e.printStackTrace();}}
}
四、处理流之一—缓冲流
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
作用:提供流的读取、写入的速度
提高读写速度的原因:内部提供了一个缓冲区
4.1、使用BufferedInputStream和BufferedOutputStream实现对图片的复制操作
/*** 实现非文本文件的复制*/@Testpublic void BufferedStreamTest(){BufferedInputStream bis = null;BufferedOutputStream bos = null;try {//1.造文件File srcFile = new File("头像.jpg");File destFile = new File("头像3.jpg");//2.造流//2.1 造节点流FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);//2.2 造缓冲流bis = new BufferedInputStream(fis);bos = new BufferedOutputStream(fos);//3.复制的细节:读取、写入byte[] buffer = new byte[1024];int len;while ((len = bis.read(buffer)) != -1){bos.write(buffer, 0, len);}} catch (IOException e) {throw new RuntimeException(e);} finally {//4.关闭流:要求:先关闭外层的流,再关闭内层的流//说明:关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可哟自动省略。if (bis != null){try {bis.close();} catch (IOException e) {throw new RuntimeException(e);}}if (bos != null){try {bos.close();} catch (IOException e) {throw new RuntimeException(e);}}}// fis.close();
// fos.close();}
4.2、实现文件的复制
步骤:
1.造文件
2.造流2.1 造节点流2.2 造缓冲流
3.复制的细节:读取、写入
4.关闭流:要求:先关闭外层的流,再关闭内层的流说明:关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可哟自动省略。
/*** 实现文件复制的方法*/public void copyFileWithBuffered(String srcPath, String destPath){FileInputStream fis = null;FileOutputStream fos = null;BufferedInputStream bis = null;BufferedOutputStream bos = null;try {//1.造文件File srcFile = new File(srcPath);File destFile = new File(destPath);//2.造流//2.1 造节点流fis = new FileInputStream(srcFile);fos = new FileOutputStream(destFile);//2.2 造缓冲流bis = new BufferedInputStream(fis);bos = new BufferedOutputStream(fos);//3.复制的细节:读取、写入byte[] buffer = new byte[1024];int len;while ((len = bis.read(buffer)) != -1){bos.write(buffer, 0, len);//bos.flush();//刷新缓冲过去}} catch (IOException e) {throw new RuntimeException(e);} finally {//4.关闭流:要求:先关闭外层的流,再关闭内层的流//说明:关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可哟自动省略。if (bis != null){try {bis.close();} catch (IOException e) {throw new RuntimeException(e);}}if (bos != null){try {bos.close();} catch (IOException e) {throw new RuntimeException(e);}}}// fis.close();
// fos.close();}
五、处理流之二—转换流
1、转换流:属于字符流
InputStreamReader: 将一个字节的输入流转换为字符的输入流—>解码
OutputStreamReader: 将一个字符的输入流转换为字节的输出流—>编码
2、作用:提供字节流与字符流之间的转换
3、解码 :字节、字节数组 —> 字符数组、字符串
编码 :字符数组、字符串 —> 字节、字节数组
5.1、InputStreamReader的使用
/*** 此时处理异常的话,仍应该使用try-catch-finally* InputStreamReader的使用,实现字节的输入流到字符的输入流的转换*/@Testpublic void test1() throws IOException {FileInputStream fis = new FileInputStream("dbcp.txt");//参数2 指明了字符集,具体使用哪个字符集,取决于文件dbcp.txt保存时使用的字符集InputStreamReader isr = new InputStreamReader(fis, "utf-8");
// InputStreamReader isr = new InputStreamReader(fis);//使用系统默认的字符集:UTF-8char[] cbuf = new char[20];int len;while ((len = isr.read(cbuf)) != -1){String str = new String(cbuf, 0, len);System.out.print(str);}isr.close();}
5.2、综合使用 InputStreamReader 和 OutputStreamWriter
/*** 综合使用 InputStreamReader 和 OutputStreamWriter*/
@Test
public void test2() throws Exception{//1. 造文件、造流File file1 = new File("dbcp.txt");File file2 = new File("dbcp_gbk.txt");FileInputStream fis = new FileInputStream(file1);FileOutputStream fos = new FileOutputStream(file2);InputStreamReader isr = new InputStreamReader(fis, "utf-8");OutputStreamWriter osw = new OutputStreamWriter(fos, "gbk");//2.读入和写出的过程char[] cbuf = new char[20];int len;while ((len = isr.read(cbuf)) != -1){osw.write(cbuf, 0, len);}//3.关闭资源fis.close();fos.close();
}
5.3、多种字符集编码
编码表的由来
计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识 别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。 这就是编码表。
常见的编码表
ASCII
:美国标准信息交换码。
- 用一个字节的7位可以表示。
ISO8859-1
:拉丁码表。欧洲码表。
- 用一个字节的8位表示。
GB2312
:中国的中文编码表。最多两个字节编码所有字符GBK
:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码Unicode
:国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示。UTF-8
:变长的编码方式,可用1-4个字节来表示一个字符。


六、标准输入、输出流
6.1、练习题
/*** 练习:* 从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续* 进行输入操作,直至当输入“e”或者“exit”时,退出程序。*/
public static void main(String[] args) {BufferedReader br = null;try {InputStreamReader isr = new InputStreamReader(System.in);br = new BufferedReader(isr);String data;while (true){System.out.println("请输入字符串: ");data = br.readLine();if ("e".equalsIgnoreCase(data)|| "exit".equalsIgnoreCase(data)){System.out.println("程序结束");break;}String upperCase = data.toUpperCase();System.out.println(upperCase);}} catch (IOException e) {throw new RuntimeException(e);} finally {if (br != null){try {br.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
七、打印流

八、数据流

相关文章:

Java高级之File类、节点流、缓冲流、转换流、标准I/O流、打印流、数据流
第13章 IO流 文章目录 一、File类的使用1.1、如何创建File类的实例1.2、常用方法1.2.1、File类的获取功能1.2.2、File类的重命名功能1.2.3、File类的判断功能1.2.4、File类的创建功能1.2.5、File类的删除功能 二、IO流原理及流的分类2.1、Java IO原理2.2、流的分类/体系结构 三…...

解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL)
解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL) 一、问题描述二、问题解决2.1 创建.wslconfig文件2.2 重启wsl2 一、问题描述 安装完WSL2后,又安装了Docker,使用了一段时间,发现电脑变卡,进一步查看…...

华为云云耀云服务器L实例评测|了解配置和管理L型云服务器
华为云云耀云服务器L实例配置和管理教程 华为云云耀云服务器L实例的介绍概述特点优势与弹性云服务器(ECS)的对比 注册和创建L型云服务器注册华为云账号创建L型云服务器实例配置实例参数配置其他参数尝试登录 远程登录 L实例查看公网ip通过本地shell远程连…...

【面试题】——Java基础篇(33题)
文章目录 1. 八大基本数据类型分类2. 重写和重载的区别3. int和integer区别4. Java的关键字5. 什么是自动装箱和拆箱?6. 什么是Java的多态性?7. 接口和抽象类的区别?8. Java中如何处理异常?9. Java中的final关键字有什么作用&…...

记一次 .NET 某电力系统 内存暴涨分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他生产上的程序有内存暴涨情况,让我帮忙看下怎么回事,最简单粗暴的方法就是让朋友在内存暴涨的时候抓一个dump下来,看一看大概就知道咋回事了。 二:Windbg 分…...
1.SpringEL初始
SpringEL初始 文章目录 SpringEL初始什么是SpringELSpring BeansSpring EL以XML形式Spring EL以注解形式启用自动组件扫描 执行输出 什么是SpringEL Spring EL与OGNL和JSF EL相似,计算评估或在bean创建时执行。此外,所有的Spring表达式都可以通过XML或注…...
HTTP 状态码
状态码状态码英文名称中文描述100Continue继续。客户端应继续其请求101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议200OK请求成功。一般用于GET与POST请求201Created已创建。成功…...

ddtrace 系列篇之 dd-trace-java 项目编译
dd-trace-java 是 Datadog 开源的 java APM 框架,本文主要讲解如何编译 dd-trace-java 项目。 环境准备 JDK 编译环境(三个都要:jdk8\jdk11\jdk17) Gradle 8 Maven 3.9 (需要 15G 以上的存储空间存放依赖) Git >2 (低于会出现一想不到的异常…...

华为aarch64架构的泰山服务器EulerOS 2.0 (SP8)系统离线安装saltstack3003.1实践
华为泰山服务器的CPU芯片架构为aarch64,所装系统为EulerOS 2.0 (SP8)aarch64系统,安装saltstack比较困难。本文讲解通过pip安装方式离线安装saltstack3003.1以进行集中化管理和维护。 一、系统环境 1、操作系统版本 [rootlocalhost ~]# cat /etc/os-r…...

C#中的方法
引言 在C#编程语言中,方法是一种封装了一系列可执行代码的重要构建块。通过方法,我们可以将代码逻辑进行模块化和复用,提高代码的可读性和可维护性。本文将深入探讨C#中的方法的定义、参数传递、返回值、重载、递归等方面的知识,…...

【Flowable】使用UEL整合Springboot从0到1(四)
前言 在前面我们介绍了Springboot简单使用了foleable以及flowableUI的安装和使用,在之前我们分配任务的处理人的时候都是通过Assignee去指定固定的人的。这在实际业务中是不合适的,我们希望在流程中动态的去解析每个节点的处理人,当前flowab…...

WebGL 计算点光源下的漫反射光颜色
目录 点光源光 逐顶点光照(插值) 示例程序(PointLightedCube.js) 代码详解 示例效果 逐顶点处理点光源光照效果时出现的不自然现象 更逼真:逐片元光照 示例程序(PointLightedCube_perFragment.js…...

Java精品项目源码第61期垃圾分类科普平台(代号V061)
Java精品项目源码第61期垃圾分类科普平台(代号V061) 大家好,小辰今天给大家介绍一个垃圾分类科普平台,演示视频公众号(小辰哥的Java)对号查询观看即可 文章目录 Java精品项目源码第61期垃圾分类科普平台(代号V061)难度指数&…...

【Unity3D】资源管理
1 前言 Unity 中资源管理方案主要有 Resources、TextAsset、ScriptableObject 、AssetDatabase、PlayerPrefs、Addressables、AssetBundle、SQLite,本文将介绍其中大部分方案。 2 Resources Resources 主要用于加载资源,被加载的资源需要放在 Resources…...

数据结构-----队列
目录 前言 队列 定义 队列的定义和操作方法 队列节点的定义 操作方式 顺序表实现队列(C/C代码) 链表实现队列(C/C代码) Python语言实现队列 前言 排队是我们日常生活中必不可少的一件事,去饭堂打饭的时候排队&a…...
postgresql教程
postgreSQL教程目录 postgreSQL 创建数据库的方式:postgreSQL删除数据库的方式:PostgreSQL 创建表格postgre删除表格:postgreSQL INSERT INTO 语句postgreSQL SELECT 语句:postgresql索引:什么情况下要避免使用索引? p…...

1万6千多最好的背单词SQLITE\ACCESS数据库
本来是实在不想再整英语类的数据了,因为实在是太多了,奈何今天弄到的这份数据库实在很精彩,因此还是希望能够有人喜欢。 搞一个“accept”字段的样例: 【explain】 vi. 承认;同意;承兑; vt. 接受;承认;承担;承兑; 【etyma】 ac…...
springboot aop Aspectj 切面
常用: Aspect、Component、Pointcut、Before、AfterReturning SpringBoot的AOP(aspect注解)的简单使用 - 知乎 springboot项目中引入Aspectj并使用_springboot引入aspectj_山鬼谣me的博客-CSDN博客...
Leetcode 2862. Maximum Element-Sum of a Complete Subset of Indices
Leetcode 2862. Maximum Element-Sum of a Complete Subset of Indices 1. 解题思路2. 代码实现 题目链接:2862. Maximum Element-Sum of a Complete Subset of Indices 1. 解题思路 这一题的核心在于想明白一点: 要使得子序列当中任意两个数之积均为…...
第一百四十七回 自定义组件一
文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了跟手指移动的小球相关的内容,本章回中将介绍 自定义组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 在项目中有些内容无法通过现有的组件来实现,因此需要自定义组件…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...