JAVA中的文件操作
文章目录
- 一、文件认识
- (一)文件的分类
- (二)目录结构
- 二、文件操作
- (一)File类
- 1.属性
- 2.构造方法
- 3.方法
- (二)File类的具体使用
- 1.文件路径的查看
- 2.文件的基本操作
- (1) 文件的创建和删除
- (2)文件内容的读写
- a.通过字节读写文件
- b.通过字符读写文件
- c.通过Scanner进行字符读取
- 3.具体示例
一、文件认识
普通文件通常保存在机械硬盘(HDD)上,机械硬盘的读写速率要比内存慢很多(3-4个数量级),机械硬盘的盘片转速越快,读写速度就越快,但因为工艺限制,盘片的转速不可能无限高,大多数都朝着扩大容量的方法发展;固态硬盘(SSD)的读写速度要比机械硬盘高很多,这里主要讨论机械硬盘中的文件
(一)文件的分类
- 文本文件,文件中存储的是字符,文本文件中本质上也是存字节的,但是文本文件中相邻的字节在一起正好能构成一个个字符
- 二进制文件,文件中存储的是字节,字节和字节之间就完全关系
- 判断文件类型可以通过.txt方式打开,乱码的情况为二进制文件,一般来说.txt、.c、.java的文件都属于文本文件;.doc、.ppt、.exe、.zip、.class都属于二进制文件
(二)目录结构
计算机中通过操作系统中的“文件系统”这样的模块来负责保存和管理文件,一般通过 N 叉树的结构来组织磁盘上的目录和文件。如果是一个普通文件,就是树的叶子节点,如果是一个目录文件,就可以包含子树,每个节点上的子树都可以有N个。
在操作系统中,可以通过路径来表述一个具体文件/目录的位置,路径有两种描述风格
- 绝对路径,以盘符开头
- 相对路径,以 “ . ” 或者 “ … ” 开头的路径,其中 “ . ” 表示当前路径,“ … ” 表示当前路径的父目录(上级路径),相对路径需要从基准出发,按照该基准查找对应的文件。如果通过命令行的方式 ( java.Demo ) 此时执行命令所在的目录就是基准路径;如果通过 IDEA 方式来运行程序,当前 JAVA 项目所在的路径就是基准路径;如果是把JAVA程序打包成war包,放到 tomcat 上运行时,此时 tomcat 的 bin 目录就是基准路径
二、文件操作
&emps;JAVA中操作文件,主要包含两类文件操作
- 文件系统相关的操作:该操作C语言没有,C语言标准库不支持文件系统操作,指通过 “文件资源管理器” 能够完成的一些功能(列出目录中有那些文件、创建文件、创建目录、删除文件、重命名文件…)
- 文件内容的相关操作(文件内容的增删改查)
(一)File类
1.属性
修饰符及类型 | 属性 | 说明 |
---|---|---|
static String | pathSeparator | 依赖于系统的路径分隔符,String类型的表示 |
static cahr | pathSeparator | 依赖于系统的路径分隔符,char类型的表示 |
2.构造方法
构造方法能够传入一个路径来指定一个文件,这个路径可以是绝对路径或者相对路径
签名 | 说明 |
---|---|
public File(String parent, String child) | 根据父目录+孩子文件路径,创建一个新的 File 实例 |
public File(String pathname) | 根据文件路径创建一个新的File实例,路径可以是绝对路径或者相对路径 |
private File(String child, File parent) | 根据父目录+孩子文件路径,创建一个新的 File 实例,父目录用路径表示 |
3.方法
返回类型 | 方法名 | 说明 |
---|---|---|
String | getName() | 返回 File 对象的纯文件名称 |
String | getParent() | 返回 File 对象的的父目录文件路径 |
String | getPath() | 返回 File 对象的文件路径 |
String | getAbsolutePath() | 返回 File 对象的绝对路径 |
String | getCanonicalPath() | 返回 File 对象修饰过的绝对路径 |
boolean | exists() | 判断 File 对象描述的文件是否真实存在 |
boolean | isDirectory() | 判断 File 对象代表的文件是否是一个目录 |
boolean | isFile() | 判断 File 对象代表的文件是否是一个普通文件 |
boolean | createNewFile() | 根据 File 对象,自动创建一个空文件,创建成功后返回ture |
boolean | delete() | 根据 File 对象,删除该文件,成功删除后返回ture |
void | deleteOnExit() | 根据 File 对象,标注文件将被删除,删除动作会到JVM运行结束时才会进行 |
String[] | list() | 返回 File 对象代表的目录下的所有文件名 |
File[] | listFiles() | 返回 File 对象代表的目录下的所有文件,以 File 对象表示 |
boolean | mkdir() | 创建 File 对象代表的目录 |
boolean | mkdirs() | 创建 File 对象代表的目录,如果必要,会创建中间目录 |
boolean | renameTo(File dest) | 进行文件改名,也可以视为我们平时的剪切粘贴操作 |
boolean | canRead() | 判断用户是否对文件有可读权限 |
boolean | canWrite() | 判断用户是否对文件有可写权限 |
(二)File类的具体使用
1.文件路径的查看
package file;
import java.io.File;
import java.io.IOException;//File的构造
public class Demo {public static void main(String[] args) throws IOException {File f1 = new File("D:/Code/JAVA_Learing/Study_EE/test.txt");System.out.println(f1.getParent()); //获取到文件的父目录System.out.println(f1.getName()); //获取文件名System.out.println(f1.getPath()); //获取到文件路径(构造File时候指定的路径)System.out.println(f1.getAbsolutePath()); //获取到绝对路径System.out.println(f1.getCanonicalPath()); //获取到绝对路径File f2 = new File("./test.txt");System.out.println(f2.getParent()); //获取到文件的父目录System.out.println(f2.getName()); //获取文件名System.out.println(f2.getPath()); //获取到文件路径(构造File时候指定的路径)System.out.println(f2.getAbsolutePath()); //获取到绝对路径System.out.println(f2.getCanonicalPath()); //获取到绝对路径}
}
f1得到的的结果如下
f2得到的的结果如下
getAbsolutePath() 方法仅仅是在基准路径的基础上把相对路径拼接上了,getCanonicalPath() 则是一个化简过后的绝对路径。
一般来说路径的分隔符都是斜杠“ / ”,但是对于Windows来说,使用的是“ \ ”
2.文件的基本操作
(1) 文件的创建和删除
文件信息的查看
import java.io.File;public class Demo {public static void main(String[] args) {File f1 = new File("./test.txt");System.out.println(f1.exists()); //文件是否存在System.out.println(f1.isDirectory()); //文件是否是目录System.out.println(f1.isFile()); //文件是否是一个普通文件}
}
文件的创建和删除
import java.io.File;
import java.io.IOException;public class Demo {public static void main(String[] args) throws IOException {File f1 = new File("./test.txt");System.out.println(f1.exists());//创建文件f1.createNewFile();System.out.println(f1.exists());//删除文件f1.delete();System.out.println(f1.exists());}
}
创建目录文件,其中mkdir() 只能创建一级目录,想一次创建多级需要使用 mkdirs()
import java.io.File;public class Demo {public static void main(String[] args) {File f1 = new File("./aaa");f1.mkdir();//创建目录文件System.out.println(f1.isDirectory());File f2 = new File("./bbb/ccc");f2.mkdirs();//创建目录文件System.out.println(f2.isDirectory());}
}
罗列不同的文件
import java.io.File;
import java.util.Arrays;public class Demo5 {public static void main(String[] args) {File f1 = new File("./bbb");System.out.println(Arrays.toString(f1.list()));//[ccc]System.out.println(Arrays.toString(f1.listFiles()));//[.\bbb\ccc]File f2 = new File("./");System.out.println(Arrays.toString(f2.list()));//[.idea, aaa, bbb, out, src, Study_EE.iml]System.out.println(Arrays.toString(f2.listFiles()));//[.\.idea, .\aaa, .\bbb, .\out, .\src, .\Study_EE.iml]}
}
给文件重命名
import java.io.File;public class Demo {public static void main(String[] args) {File f1 = new File("./aaa");File f2 = new File("./zzz");f1.renameTo(f2);//文件重命名}
}
(2)文件内容的读写
根据文件内容的读写,JAVA标准库提供了一组类,首先按照文件的内容分成了两个系列,
- 字节流对象,针对二进制文件,是以字节为单位进行读写的,读 InputStream,写 OutStream
- 字符流对象,针对文本文件,是以字节为单位进行读写的,读 Reader,写 Writer
读InputStream,写OutStream,读Reader,写Writer都是抽象类,既可以对普通文件进行读写,也可以针对特殊文件(网卡、socket文件)进行读写,实际使用的往往都是这些类的子类:FileInputStream、FileOutputStream、FileReader、FileWriter,这一组类都针对普通文件进行读写的。
a.通过字节读写文件
读取文件read()提供了三个版本的重载,
- 无参数版本,一次读一个字节,返回值是读到的字节,返回值是-1时表示文件读完,又 Byte 的取值范围是 [-128,127] 之间,为了区分非法状态和正常读状态,因此选取一个更大的 int 范围设定返回值在 [-1,255]
- 一个参数版本,一次读若干个字节,把读的结果放到参数中指定的数组中,返回值就是读到的字节数,相当于是使用参数的方式来表示方法的返回值,是一种 “输出型参数” 的方式
- 三个参数版本,一次读若干个字节,把读的结果放到参数中指定的数组中,返回值就是读到的字节数,不是从数组的起始位置放置,而是从off下标的中间位置放置,len表示最多能放多少个元素
通过 read() 循环读取一个一个文件的的代码示例如下,为防止在文件读取过程中抛出异常而导致文件关闭操作没有进行的问题,需要将释放资源的语句放到 finally 语句中,close() 操作也可能存在IO异常,因此这样得到的代码冗长,可以通过 try-with-resource 自动关闭在 try 语句块中使用的资源,从而避免资源泄露问题.
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class Demo {public static void main(String[] args) {//构造方法中需要指定打开文件的路径//此处的路径可以是绝对路径,也可以是相对路径,还可以是File对象InputStream inputStream = null;try {//1.创建对象,同时也是在打开文件inputStream = new FileInputStream("./test.txt");//2.尝试一个一个字节的读,把整个文件都读完while (true){int b = inputStream.read();if(b == -1){//读到文件末尾break;}System.out.println(b);}} catch (IOException e) {e.printStackTrace();}finally {//3.读完后需要关闭文件,释放资源try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}
}
try() 括号中的类要实现了 Closeable 这个 interface 之后,才能自动关闭,而对于IO流对象来说,所有对象都实现了 Closeable,所以可以直接关闭流对象,简化后的代码如下
public class Demo {public static void main(String[] args) {//当代码执行完 try 语句块之后会自动调用 closetry(InputStream inputStream = new FileInputStream("./test.txt")){while (true){int b = inputStream.read();if(b == -1){//读到文件末尾break;}System.out.println(b);}} catch (IOException e) {e.printStackTrace();}}
}
通过 read( byte[ ]) 方法一次读取若干个字节
public class Demo {public static void main(String[] args) {try(InputStream inputStream = new FileInputStream("./test.txt")){//一次读取若干个字节while (true){byte[] buffer = new byte[1024];int len = inputStream.read(buffer);//读出的结果放到buffer中if(len == -1){break;}
// for(int i =0;i<len;i++){
// System.out.println(buffer[i]);
// }String s = new String(buffer,0,len);System.out.println(s);}} catch (IOException e) {e.printStackTrace();}}
通过字节进行写操作时,可以一次写一个,可以一次性写多个,每次写操作会清空原有文件的内容
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class Demo {public static void main(String[] args) {//每次写操作会清空原有文件的内容try(OutputStream outputStream = new FileOutputStream("./test.txt")){outputStream.write(97);outputStream.write(98);outputStream.write(99);//文件内容为abcbyte[] buffer = new byte[]{97,98,99};outputStream.write(buffer);} catch (IOException e) {e.printStackTrace();}}
}
b.通过字符读写文件
import java.io.*;public class Demo {public static void main(String[] args) {try(Reader reader = new FileReader("./test.txt")){//按照字符来读while(true){char[] buffer= new char[1024];int len = reader.read(buffer);if(len == -1){break;}
// for(int i=0; i<len;i++){
// System.out.println(buffer[i]);
// }//如果传入代表是byte数组,可以通过指定utf-8字符集避免乱码String s = new String(buffer,0,len);System.out.println(s);}} catch (IOException e) {e.printStackTrace();}}
}
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class Demo10 {public static void main(String[] args) {try(Writer writer = new FileWriter("./test.txt")){writer.write("aaa");} catch (IOException e) {e.printStackTrace();}}
}
c.通过Scanner进行字符读取
Scanner存在下面的构造方法,可以使用 charsetName 字符集进行 source 的扫描读取
public Scanner(InputStream source, String charsetName)
import java.io.*;
import java.util.Scanner;public class Demo11 {public static void main(String[] args) throws IOException {try(InputStream is = new FileInputStream("./test.txt")){try(Scanner scanner = new Scanner(is,"utf-8")){while(scanner.hasNext()){String s = scanner.next();System.out.print(s);}}}}
}
3.具体示例
扫描指定目录,查找包含指定字符的普通文件,并询问后删除指定文件
import java.io.File;
import java.io.IOException;
import java.util.Scanner;public class Demo {public static void main(String[] args) {//1.先输入要扫描的目录,以及要删除的文件Scanner scanner = new Scanner(System.in);System.out.println("请输入要扫描的路径:");String rootDitrPath = scanner.next();System.out.println("请输入要删除的文件名:");String toDeleteName = scanner.next();File rootDir = new File(rootDitrPath);if(!rootDir.isDirectory()){System.out.println("输入的扫描路径有误");return;}//2.遍历目录,把指定目录中的所有文件和子目录都遍历一遍,找到要删除的文件scanDir(rootDir,toDeleteName);}private static void scanDir(File rootDor,String toDeleteName){//1.先列处 rootDir 目录下有哪些内容File[] files = rootDor.listFiles();if(files == null){//rootDir 是一个空目录return;}for(File f:files){if(f.isFile()){if(f.getName().contains(toDeleteName)) //文件名中包含了关键字即可删除deleteFile(f);}else if(f.isDirectory()){ //如果是目录文件,就递归进行遍历scanDir(f,toDeleteName);}}}private static void deleteFile(File f){try{System.out.println(f.getCanonicalPath()+"确定要删除吗?(Y,N)");Scanner scanner = new Scanner(System.in);String choice = scanner.next();if(choice.equals("y") || choice.equals("Y")){f.delete();System.out.println("文件删除成功!");}elseSystem.out.println("文件取消删除!");} catch (IOException e) {e.printStackTrace();}}
}
文件的复制:用户指定两个文件路径,一个是原路径(被复制的文件),一个是目标路径(复制之后生成的文件)
import java.io.*;
import java.util.Scanner;public class Demo {public static void main(String[] args) {//1.输入两个文件路径Scanner scanner = new Scanner(System.in);System.out.println("请输入要拷贝的源路径:");String src = scanner.next();System.out.println("请输入要拷贝的目标路径:");String dest = scanner.next();File srcFile = new File(src);if(!srcFile.isFile()){System.out.println("输入的源路径不正确");return;}//不需要检查目标文件dest是否存在,OutputStream 写文件的时候能够自动创建不存在的文件//2.读取源文件,拷贝到目标文件中try(InputStream inputStream = new FileInputStream(src)){try(OutputStream outputStream = new FileOutputStream(dest)){byte[] buffer = new byte[1024];while(true){int len = inputStream.read(buffer);if(len == -1)break;//写入指定长度的buffer,可能存在一部分有效数据outputStream.write(buffer,0,len);}}} catch (IOException e) {e.printStackTrace();}}
}
扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件
import java.io.*;
import java.util.Scanner;public class Demo14 {public static void main(String[] args) throws IOException {//1.输入要扫描的文件路径Scanner scanner = new Scanner(System.in);System.out.println("请输入要扫描的路径:");String rootDirPath = scanner.next();System.out.println("亲输入要查询的关键词:");String word = scanner.next();File rootDir = new File(rootDirPath);if(!rootDir.isDirectory()){System.out.println("输入的源路径不正确");return;}//2.递归进行遍历scanDir(rootDir,word);}private static void scanDir(File rootDir, String word) throws IOException {//1.列出rootDir中有哪些内容File[] files = rootDir.listFiles();if(files==null)return;//2.遍历每个元素,针对普通文件和目录文件分别进行处理for(File f:files){if(f.isFile()){//对文件内容进行查找if(containsWord(f,word)){System.out.println(f.getCanonicalPath());}}else if(f.isDirectory())//针对目录文件进行遍历scanDir(f,word);}}private static boolean containsWord(File f, String word) {//把文件中的内容都读取到一个String中,放到一个StringBuilder中StringBuilder stringBuffer = new StringBuilder();try (Reader reader = new FileReader(f)){char[] buffer = new char[1024];while(true){int len = reader.read(buffer);if(len == -1)break;//结果转化到StringBulider中stringBuffer.append(buffer,0,len);}} catch (IOException e) {e.printStackTrace();}//index返回字串的下下标,若不存在则返回-1return stringBuffer.indexOf(word)!=-1;}
}
相关文章:
JAVA中的文件操作
文章目录 一、文件认识(一)文件的分类(二)目录结构 二、文件操作(一)File类1.属性2.构造方法3.方法 (二)File类的具体使用1.文件路径的查看2.文件的基本操作(1࿰…...
深度解析网闸策略:构建坚固的网络安全防线
深度解析网闸策略:构建坚固的网络安全防线 在数字化浪潮中,网络安全已成为企业、机构乃至国家稳定发展的关键要素。随着网络攻击手段日益复杂多样,传统的网络安全防护措施难以满足日益增长的安全需求。网闸作为一种先进的网络安全设备&#x…...
【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
滑动窗口算法笔记
力扣209 题目分析:想象一个窗口遍历着这个数组,不断扩大右边界,让r。往窗口中添加数字: 此时我们找到了这个窗口,它的和满足了大于等于target的条件,题目让我求最短的,那么我们就尝试来缩短它&…...
Problem A: 歌手打分
1.题目描述 在歌唱比赛中,共有10位评委进行打分,在计算歌手得分时,去掉一个最高分,去掉一个最低分,然后剩余的8位评委的分数进行平均,就是该选手的最终得分。输入每个评委的评分,求某选手的得分…...
容器安全-核心概述
文章摘要 本文探讨了容器安全的四个核心类别,包括环境基础设施安全、镜像安全、运行时安全和生态安全。尽管 EDR 能提供主机安全层面的部分防护,但无法覆盖容器的镜像安全和生态安全。容器的镜像安全和生态安全问题,如镜像漏洞、恶意镜像、容…...
Golang实践录:在go中使用curl实现https请求
之前曾经在一个 golang 工程调用 libcur 实现 https的请求,当前自测是通过的。后来迁移到另一个小系统出现段错误,于是对该模块代码改造,并再次自测。 问题提出 大约2年前,在某golang项目使用libcurl进行https请求(参…...
nvrtc环境依赖
一 下载 1.1 添加nvidia的源(不同于pypi) pip install nvidia-pyindex 1.2 pip dowload 执行 pip download nvidia-cuda-runtime nvidia-cuda-python 会发现文件夹多了以下几个文件 而需要安装的则只有红框的三个文件, 二 安装 对红框的…...
【计算机视觉】OpenCV实战项目:GraspPicture 项目深度解析:基于图像分割的抓取点检测系统
GraspPicture 项目深度解析:基于图像分割的抓取点检测系统 一、项目概述项目特点 二、项目运行方式与执行步骤(一)环境准备(二)项目结构(三)执行步骤 三、重要逻辑代码解析(一&#…...
Redis持久化存储
我们知道Redis是将数据放在内存中的,那怎么做到持久化存储呢?很简单,就是内存存一份,硬盘也存一份.那么两个地方都存会不会影响效率?答案是影响是不大的,要看具体的策略.同时也要注意内存的数据和硬盘中的数据可能会有一点不同.这也是取决于策略的不同. Redis持久化存储的两个…...
网络检测工具InternetTest v8.9.1.2504 单文件版,支持一键查询IP/DNS、WIFI密码信息
—————【下 载 地 址】——————— 【本章下载一】:https://drive.uc.cn/s/295e068b79314 【本章下载二】:https://pan.xunlei.com/s/VOQDXguH0DYPxrql5y2zlkhTA1?pwdg2nx# 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…...
elpis-core: 基于 Koa 实现 web 服务引擎架构设计解析
前言 内容来源于抖音【哲玄前端】大佬的《大前端全栈实践》课程,此课程是从零开始做一个企业级的全栈应用框架。此框架是基于koa.js构建的服务引擎,对BFF层的框架封装,让我感受颇深。 整体elpis项目架构设计 elpis-core设计思路 可以看到elpi…...
计算机网络-MPLS LDP基础实验配置
前面我们学习了LDP的会话建立、标签发布与交换、LDP的工作原理,今天通过一个基础实验来加深记忆。 一、LDP基础实验 实验拓扑: 1、IGP使用OSPF进行通告,使用Lookback接口作为LSR ID,LDP ID自动生成。 2、实验目的:使…...
搜索二维矩阵 II
存储m和n,用i表示行,j表示列,i从最后一行开始遍历,j从0开始遍历,当前值比目标值小j,反之i-- class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int…...
C++中如何实现一个单例模式?
单利模式是指对象在整个程序中只有一个实例,提供一个访问方法供全局访问。实现单例模式有如下要求: 1.私有化构造函数:将构造函数定义为私有,以防外部通过构造函数创建其它实例。 2.静态实例:在内部提供一个静态实例…...
进程与线程
进程与线程:计算机世界的"公司与员工" 进程与线程的本质区别 进程(Process)是计算机中独立运行的程序实例,拥有自己的内存空间和系统资源;而线程(Thread)是进程内的执行单元,共享所属进程的资源,但拥有独立的执行路径。 🏢 生活类比:想象一个大型企业的运…...
JDK 命令行工具大全与学习方法总结 —— 从帮助文档到高效实践
JDK 命令行工具大全与学习方法总结 —— 从帮助文档到高效实践 Java开发与运维过程中,JDK自带的命令行工具是定位问题、性能调优、编译调试的基石。本文全面梳理JDK常用命令工具、帮助文档的获取方式,并总结类似Linux命令行的学习方法,助你系…...
行业趋势与技术创新:驾驭工业元宇宙与绿色智能制造
引言 制造业发展的新格局:创新势在必行 当今制造业正经历深刻变革,面临着供应链波动、个性化需求增长、可持续发展压力以及技能人才短缺等多重挑战。在这样的背景下,技术创新不再是可有可无的选项,而是企业保持竞争力、实现可持…...
代码随想录算法训练营第三十九天(打家劫舍专题) | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III
一、198.打家劫舍 题目链接:198. 打家劫舍 - 力扣(LeetCode) 文章讲解:代码随想录 视频讲解:动态规划,偷不偷这个房间呢?| LeetCode:198.打家劫舍_哔哩哔哩_bilibili 1. 思路 大家如…...
Linux514 rsync 解决方案环境配置
节点ab都改为NAT模式 网关和VMnet8网卡不一致 ping 不通外网 ping不通外网 是这里的问题吗 怎么突然就ping通了 没改啥啊 上面改了dhcp范围后 ping还是ping不通 为啥现在又ping通了 设置节点b 推测应该是dhcp范围问题 今日源码 节点b MX...
STM32F103_LL库+寄存器学习笔记23 - PWM波形输出及软件方式调整周期与占空比
导言 脉宽调制(PWM)是 STM32 定时器最常用的输出模式之一,广泛应用于电机驱动、LED 调光、伺服控制和功率管理等场景。本篇文章将以 TIM5 为例,从寄存器层面深入剖析 PWM 输出的原理与实现步骤。通过本篇博客,你不仅能…...
Canvas知识框架
一、Canvas基础 核心概念 Canvas是位图绘图区域,通过JavaScript(或Python等)动态绘制图形。 坐标系:左上角为原点 (0, 0),x向右递增,y向下递增。 绘图流程: const canvas document.getElemen…...
【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发
客户端验证HTTPS网站证书是否由受信任的根证书颁发机构(CA)签发,是一个多步骤的过程,涉及证书链验证、信任锚(Trust Anchor)检查、域名匹配和吊销状态验证等。以下是详细的验证流程: 1. 证书链的…...
spark小任务
import org.apache.spark.{Partitioner, SparkConf, SparkContext}object PartitionCustom {// 分区器决定哪一个元素进入某一个分区// 目标: 把10个分区器,偶数分在第一个分区,奇数分在第二个分区// 自定义分区器// 1. 创建一个类继承Partitioner// 2. …...
git push 报错:send-pack: unexpected disconnect while reading sideband packet
背景 新建了一个仓库,第一次push 代码文件,文件中有一个依赖的jar,有80MB,结果push的时候报错。 错误信息 error: RPC failed; HTTP 500 curl 22 The requested URL returned error: 500 send-pack: unexpected disconnect whi…...
读入csv文件写入MySQL
### 使用 Spark RDD 读取 CSV 文件并写入 MySQL 的实现方法 #### 1. 环境准备 在使用 Spark 读取 CSV 文件并写入 MySQL 数据库之前,需要确保以下环境已配置完成: - 添加 Maven 依赖项以支持 JDBC 连接。 - 配置 MySQL 数据库连接参数,包括 …...
5.18-AI分析师
强化练习1 神经网络训练案例(SG) #划分数据集 #以下5行需要背 folder datasets.ImageFolder(rootC:/水果种类智能训练/水果图片, transformtrans_compose) n len(folder) n1 int(n*0.8) n2 n-n1 train, test random_split(folder, [n1, n2]) #训…...
腾讯云运营开发 golang一面
redis为什么单线程会快 每秒10w吞吐量 io多路复用 一个文件描述符整体拷贝;调用epoll_ctl 单个传递 内核遍历文件描述符判断是否有事件发送;回调函数列表维护 修改有事件发送的socket为可读或可写,返回整个文件描述符;返回链…...
spark数据压缩
### Spark 数据压缩方法及其实现 在大数据处理框架中,数据压缩是一个重要的环节,它不仅能够减少磁盘占用空间,还能降低网络传输成本。然而,在分布式计算环境中(如 Spark),选择合适的压缩编解码…...
synchronized关键字详解
synchronized关键字详解 1. 基本概念与使用方式 作用:确保多个线程在访问共享资源时的互斥性,防止数据不一致。使用方式: 修饰实例方法:锁对象为当前实例(this)。public synchronized void instanceMethod() {// 同步代码 }修饰静态方法:锁对象为类的Class对象。public…...
React useState 的同步/异步行为及设计原理解析
一、useState 的同步/异步行为 异步更新(默认行为) • 场景:在 React 合成事件(如 onClick)或生命周期钩子(如 useEffect)中调用 useState 的更新函数时,React 会将这些更新放入队列…...
《社交应用动态表情:RN与Flutter实战解码》
React Native依托于JavaScript和React,为动态表情的实现开辟了一条独特的道路。其核心优势在于对原生模块的便捷调用,这为动态表情的展示和交互提供了强大支持。在社交应用中,当用户点击发送动态表情时,React Native能够迅速调用相…...
【Oracle专栏】清理告警日志、监听日志
Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 今天在导入数据库时,发现之前可以导入,今天导入时居然报空间不足,于是检查是哪里占用空间比较大。检查回收站、归档日志,发现没有。然后检查告警日志、监听日志,发现果然占用空间比较大,于是进行…...
Ubuntu24.04编译ORB_SLAM的一系列报错解决
Ubuntu24.04编译ORB_SLAM的一系列报错解决 decay_t报错 报错信息:error: ‘decay_t’ is not a member of ‘std’;did you mean ‘decay’ 将CMakeLists.txt中第17行的c标准修改为c14即可: 修改前: CHECK_CXX_COMPILER_FLAG…...
Python × CARLA:如何在自动驾驶仿真世界里打造智能驾驶系统?
Python CARLA:如何在自动驾驶仿真世界里打造智能驾驶系统? 在人工智能与自动驾驶的浪潮中,真实世界的测试成本高昂,而自动驾驶仿真已成为开发者训练和测试 AI 驾驶算法的关键技术手段。其中,CARLA(Car Learning to Act)作为开源自动驾驶仿真平台,凭借其真实感强、高度…...
如何迁移 WSL 卸载 Ubuntu WSL
迁移 WSL 到其他盘区 假设您已经安装了 WSL 上的 Ubuntu 22.04 LTS,并且想要将其从 C 盘迁移到 D 盘。 查看 WSL 状态: 打开 PowerShell 或 CMD,运行以下命令查看当前安装的 WSL 发行版: wsl -l -v假设输出显示 Ubuntu-22.04 正在…...
【Linux】多路转接epoll、Linux高并发I/O多路复用
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:五种IO模型与阻塞IO以及多路转接select机制编写echoserver 下篇文章…...
【taro3 + vue3 + webpack4】在微信小程序中的请求封装及使用
前言 正在写一个 以taro3 vue3 webpack4为基础框架的微信小程序,之前一直没有记咋写的,现在总结记录一下。uniapp vite 的后面出。 文章目录 前言一、创建环境配置文件二、 配置 Taro 环境变量三、 创建请求封装四、如何上传到微信小程序体验版1.第二…...
在python中使用Json提取数据
文章目录 一、前言二、格式转换2.1 dumps函数2.2 loads函数2.3 错误处理 三、JSONPath模块四、JMESPath模块4.1 search函数4.2 基本语法4.2.1 基本查询4.2.2 投影4.2.3 管道4.2.4 多选4.2.5 函数 一、前言 官方文档:https://docs.python.org/zh-cn/3.12/library/js…...
备战菊厂笔试4
目录 39.组合总和 回溯(单向剪枝) 3102.最小化曼哈顿距离 利用曼哈顿距离的性质 3163.压缩字符串3 46.全排列 53.最大子数组和 39.组合总和 39. 组合总和 注意: set不能添加list得加元组 元组不可修改 sorted后得赋值 class So…...
白盒测试——基本路径测试法
一、实验名称 白盒测试——基本路径测试法 二、实验目的 白盒测试是结构测试,是依据被测程序的内部逻辑结构设计测试用例,驱动被测程序运行完成的测试,通过本实验希望: 1、掌握基本路径测试法的基本概念,用具体的例子…...
FFmpeg 与 C++ 构建音视频处理全链路实战(五)—— 音视频编码与封装
在前面的系列文章中,我们已经层层深入,从 MP4 与 FLV 封装格式的剖析,到 H.264 和 AAC 原理的探索,再到 FFmpeg 的解封装、解码,以及音频重采样、视频尺寸变化的代码实现,为音视频处理打下了坚实基础。而今…...
NNLM神经网络语言模型总结
一开始还以为很复杂,总结一下就是: NNLM 将某个单词前 n−1 个词各自转为 embedding,拼接成一个 (n−1)⋅d 维的向量,再通过隐藏层 输出层 softmax,预测下一个词的概率分布 可以发现,这个2003年提出的模…...
开源Heygem本地跑AI数字人视频教程
图文教程: 点击跳转 视频教程 资料包下载 点击下载:...
软件验收测试有哪些流程?与确认测试又有什么不同?
随着信息技术的飞速发展,软件的应用覆盖面越来越广泛,软件验收测试的重要性也愈发显著。软件验收测试是指在软件开发完成后,对软件进行的最后一次全面审核,以确保软件的功能和性能满足用户需求。这一阶段通常由客户进行࿰…...
一文了解 HTTP Content-Type:从基础到实战
一文了解 HTTP Content-Type:从基础到实战 在 Web 开发中,HTTP 请求头中的 Content-Type 是一个看似简单却至关重要的概念。它决定了浏览器和服务器如何解析和处理传输的数据。本文将带你全面掌握 Content-Type 的核心知识,涵盖常见类型、应…...
数学建模初等模型应用
一、目的 掌握初等模型的建模方法,对简单的初等模型能借助Matlab工具软件进行辅助建模、求解和检验。 二、实验内容与设计思想(设计思路、主要代码分析) 1、预测鱼的质量 (1)设计思路:使用线性回归模型预测鱼的质量…...
map和unordered_map
一、map和unordered_map的基本概念——它们是啥? map:是一种“有序的关联容器”,存放一组“键值对”,内部元素按键排序(默认是升序),类似一本按字母排序的字典。 unordered_map:也是…...
【vue】脚手架
一、使用脚手架创建项目 1.打开编辑器终端 2.输入命令vue create 项目名 3.选择自定义配置,选以下几种常用的配置项(空格选中或删除) 二、常规操作 进入项目:cd 项目名 返回:cd .. 运行项目:npm run serve 停止项目:ct…...
PaddleNLP框架训练模型:使用SwanLab教程
PaddleNLP 是一款基于飞桨深度学习框架的大语言模型(LLM)开发套件,支持在多种硬件上进行高效的大模型训练、无损压缩以及高性能推理。PaddleNLP 具备简单易用和性能极致的特点,致力于助力开发者实现高效的大模型产业级应用。 你可以使用PaddleNLP快速进行…...