文件路径、文件系统操作、字节流字符流、文件内容操作、自己实现文件查找 删除 复制、IO报错:拒绝访问

news2024/10/5 19:19:23

目录

一、什么是文件

文件的分类

文件路径 

二、文件系统操作

四、文件内容操作 

字节流字符流 

1)字节流(二进制文件)

 InputStream概述

 FileInputStream 概述

OutputStream 概述 

2)字符流(文本文件)

五、实现文件查找,删除,复制

根据文件内容查找:

删除:

复制:

IO拒绝访问 


一、什么是文件

文件 就是在计算机的硬盘中躺着的,这些文件都是一个个单独的个体。 

⽂件除了有数据内容之外,还有⼀部分信息,例如⽂件名、⽂件类型、⽂件⼤⼩等并不作为⽂件的数 据⽽存在,我们把这部分信息可以视为⽂件的元信息。

我们文件的存储 是依靠树型结构来存储的 

目录:相当于文件夹,可能很多个文件放一起的

文件:一个单独的个体

文件的分类

即使是普通文件,存储的数据也不尽相同。

所以我们依靠数据的类型,把他们又分为 文本文件 和 二进制文件

文本文件:里面的内容在码表上“有据可查”,能查到对应的 

二进制文件:里面的内容在码表上查不到,就是一堆乱码

啥是码表?

因为计算机只看得懂二进制,所以要把字解析给计算机看的,为了统一,就是根据码表来解析的。

码表也有很多种,最常见的是ASCII码,解析英文字母。但是我们的中文啊,还有其他的特殊字符,就用不了,就需要UTF8或者Unicode字符集等等。

值得注意的是utf8中,一个汉字3个字节。Unicode一个汉字2个字节。

查看字符编码(UTF-8) (mytju.com)

如何分辨是 文本文件 还是 二进制文件呢?  

最简单的办法,就是把文件拖到记事本上:看下图,像png这种的一拖到记事本,就是乱码,所以它是二进制文件。那么剩下的就是文本文件了

文件路径 

我们既然知道了文件的分类,如何找到这个文件呢?那就需要 文件路径 

 文件路径分为 绝对路径 相对路径 

绝对路径:从最早的根目录开始(就是C盘E盘那些),一直到达这个结点

相对路径:可以从任意目录开始(相对这个目录),一直到这个结点

如下,如果要找test.txt这个文件,绝对路径:E:\code\J20240926-FileIO\test.txt

相对路径需要看从哪里出发(.是当前目录        ..是上一级目录)

若从src里面出发:..\test.txt

若从这个界面的路径出发:.\test.txt

二、文件系统操作

我们文件有个类叫File,我们通常是通过这个类来操作文件。

属性

修饰符及类型属性说明
static StringpathSeparator依赖于系统的路径分隔符,String 类型的表⽰
static charpathSeparator依赖于系统的路径分隔符,char 类 型的表⽰

构造⽅法

签名说明
File(File parent, String child)根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例
File(String pathname)根据⽂件路径创建⼀个新的 File 实例,路径可以是绝 对路径或者相对路径
File(String parent, String child)根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实 例,⽗⽬录⽤路径表⽰

 方法

修饰符及返回值类型⽅法签名说明
StringgetParent()返回 File 对象的⽗⽬录⽂件路径
StringgetParent()返回 FIle 对象的纯⽂件名称
StringgetPath()返回 File 对象的⽂件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的⽂件是否真实 存在
booleanisDirectory()判断 File 对象代表的⽂件是否是⼀ 个目录
booleanisFile()判断 File 对象代表的⽂件是否是⼀ 个文件
booleancreateNewFile()根据 File 对象,⾃动创建⼀个空⽂ 件。成功创建后返回 true
booleandelete()根据 File 对象,删除该⽂件。成功 删除后返回 true
voiddeleteOnExit()根据 File 对象,标注⽂件将被删除,删除动作会到 JVM 运⾏结束时 才会进⾏
String[]list()返回 File 对象代表的⽬录下的所有 ⽂件名
File[]listFiles()返回 File 对象代表的⽬录下的所有 ⽂件,以 File 对象表⽰
booleanmkdir()创建 File 对象代表的⽬录
booleanmkdirs()创建 File 对象代表的⽬录,如果必 要,会创建中间⽬录
booleanrenameTo(File dest)进⾏⽂件改名,也可以视为我们平 时的剪切、粘贴操作
booleancanRead()判断⽤⼾是否对⽂件有可读权限
booleancanWrite()判断⽤⼾是否对⽂件有可写权限

 代码如下:

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.getAbsoluteFile());
        System.out.println(file.getCanonicalPath());

    }
}

//执行结果
.
test.txt
.\test.txt
E:\code\J20240926-FileIO\.\test.txt
E:\code\J20240926-FileIO\test.txt
public class demo2 {
    public static void main(String[] args) throws IOException {
        File file=new File("./hello");
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
        System.out.println(file.delete());
        System.out.println(file.createNewFile());
    }
}

true
false
true
false
false
public class demo3 {
    public static void main(String[] args) {
        File file=new File("./hello/ll/qq");
        System.out.println(Arrays.toString(file.list()));
        System.out.println(file.mkdirs());
    }
}

[]
false
public class demo4 {
    public static void main(String[] args) {
        File srcFile =new File("./test.txt");
        File descFIle =new File("newTest.txt");
        srcFile.renameTo(descFIle);
    }
}

 如何打印目录中的文件呢?

使用递归,把看看是不是目录,里面有没有东西,有的话直接装到一个File[ ]中,然后一个一个打印,遇到目录就继续递归。

public class demo5 {
    private static void scan(File f) throws IOException {
        //1.判断是不是目录
        if(!f.isDirectory()){
            return;
        }
        //2.判断目录内容
        File[] files=f.listFiles();
        if(files==null||files.length==0){
            return;
        }
        //3.打印当前目录
        System.out.println(f.getCanonicalPath());
        //4.打印文件
        for(File file:files){
            if(file.isFile()){
                System.out.println(file.getCanonicalPath());
            }else{
                scan(file);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        File file=new File("./");
        scan(file);
    }
}

四、文件内容操作 

文件内容操作其实很简单!只需要三步:打开写或读关闭

创建了字节流字符流,就相当于打开了文件,用完之后一定要进行关闭。

为什么操作完文件内容之后,要关闭文件呢?

打开文件,其实是在该进程的文件描述表中,创建了一个新的表项。

文件描述符表:描述了该进程都要操作哪些文件,它可以认为是一个数组,数组的每个元素就是一个结构体文件对象(linux中)每个结构体就描述了对应操作的文件的信息,数组的下标被称为“文件描述符”。

每次打开一个文件,就相当于在数组上,占用的一个位置,而在系统内核中,文件描述符表数组,是固定长度 & 不可扩容的。用一个少一个,如果没了就打开不了文件了。

代码如下:

(推荐使用第二种的语法糖,用起来方便简单吃起来很甜。如果多个就用分号隔开,InputStream下面详讲) 

public class demo7 {
    //使用finally
    public static void main1(String[] args) throws IOException {
        InputStream file=null;
        try {
            file=new FileInputStream("./test.txt");
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                file.close();
            }catch (IOException e){
                throw new RuntimeException();
            }
        }
    }
//第二种使用try with resources,会自动帮你关闭
    public static void main(String[] args) throws IOException {
        try(InputStream inputStream=new FileInputStream("./test.txt")) {
            //....
        }
    }
}

而进行写和读,则需要用到字节字符流的一些方法了。 

字节流字符流 

数据流就是计算机对数据的 读取 和 写入 。

为什么叫流呢?

这其实是一个很生动形象的比喻,就像我们接水流100ml,我们可以拿个杯子一次接1ml,接100次,也可以接2ml,接50次.....也可以接100ml,接1次。

所以我们计算机的,可以一次读1个字节,读100次,也可以读2个字节,读50次...也可以读100个字节,读一次。(字符流的话就是读字符)

可以分为两大类:

1)字节流(二进制文件)

 InputStream概述

方法

修饰符及返回值类型⽅法签名说明
intread()读取⼀个字节的数据,返回 -1 代表 已经完全读完了
intread(byte[] b)最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表 以及读完了
intread(byte[] b, int off, int len)最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读 到的数量;-1 代表以及读完了
voidclose()关闭字节流

InputStream 只是⼀个抽象类,要使⽤还需要具体的实现类。关于 InputStream 的实现类有很多,基 本可以认为不同的输⼊设备都可以对应⼀个 InputStream 类,我们现在只关⼼从⽂件中读取,所以使⽤ FileInputStream

 FileInputStream 概述

构造方法

签名说明
FileInputStream(File file)利⽤ File 构造⽂件输⼊流
FileInputStream(String name)利⽤⽂件路径构造⽂件输⼊流
public class demo8 {
    public static void main(String[] args) throws IOException {
        try (InputStream inputStream = new FileInputStream("./test.txt")) {
            while (true) {
                byte[] buffer = new byte[1024];
                inputStream.read();
                int n = inputStream.read(buffer);

                if (n == -1) {
                    break;
                }
                for (int i=0;i<n;i++){
                    System.out.printf("0x%x\n",buffer[i]);
                }
            }
        }
    }
}

这里的buffer是输出型参数,就是被当参数传进去,然后被填满着出来。

就像你去食堂吃饭,把空的盘子给阿姨,阿姨给你抖抖抖,装到你盘子里,然后还给你。

利⽤ Scanner 进⾏字符读取 

上述例⼦中,我们看到了对字符类型直接使⽤ InputStream 进⾏读取是⾮常⿇烦且困难的,所以,我 们使⽤⼀种我们之前⽐较熟悉的类来完成该⼯作,就是 Scanner 类。 

构造方法说明
Scanner(InputStream is, String charset)使⽤ charset 字符集进⾏ is 的扫描读取
// 需要先在项⽬⽬录下准备好⼀个 hello.txt 的⽂件,⾥⾯填充 "你好中国" 的内容
public class Main {
     public static void main(String[] args) throws IOException {
         try (InputStream is = new FileInputStream("hello.txt")) {
             try (Scanner scanner = new Scanner(is, "UTF-8")) {
                 while (scanner.hasNext()) {
                     String s = scanner.next();
                     System.out.print(s);
                 }
             }
         }
     }
}
OutputStream 概述 

⽅法 

修饰符及返回值类型方法签名说明
voidwrite(int b)写⼊要给字节的数据
voidwrite(byte[] b)将 b 这个字符数组中的数据全部写 ⼊ os 中
intwrite(byte[] b, int off, int len)将 b 这个字符数组中从 off 开始的 数据写⼊ os 中,⼀共写 len 个
voidclose()关闭字节流
voidflush()重要:我们知道 I/O 的速度是很慢 的,所以,⼤多的 OutputStream 为了减少设备操作的次数,在写数 据的时候都会将数据先暂时写⼊内 存的⼀个指定区域⾥,直到该区域 满了或者其他指定条件时才真正将 数据写⼊设备中,这个区域⼀般称 为缓冲区。但造成⼀个结果,就是 我们写的数据,很可能会遗留⼀部 分在缓冲区中。需要在最后或者合 适的位置,调⽤ flush(刷新)操 作,将数据刷到设备中。

 OutputStream 同样只是⼀个抽象类,要使⽤还需要具体的实现类。我们现在还是只关⼼写⼊⽂件 中,所以使⽤ FileOutputStream

public class demo9 {
    public static void main(String[] args) throws IOException {
        try(OutputStream outputStream=new FileOutputStream("./test.txt",true)) {

//            outputStream.write(98);

            byte[] bytes=new byte[]{98,98,97};
            outputStream.write(bytes);
        }
    }
}

 注意:!!!

这里的OutPutStream它写入的时候,会覆盖文件已有的内容,如果要接着文件内容写,要在FileOutputStream的参数那里,加一个true。

2)字符流(文本文件)

为什么既然都能用,为什么还需要字符流呢?

因为用字节流时,需要我们程序员去记住那些字节对应的东西,如果是中文的话,就需要3个字节,对程序员来说是一件比较麻烦的事情,所以我们直接读字符,也就是字符流。

同理,一个是Reader,一个是Writer,也都是抽象类不能直接实例,而是通过FileReader和FileWrite来实例。 

Reader方法如下: 

 

public class demo10 {
    public static void main(String[] args) {
        try (Reader reader = new FileReader("./test.txt")) {
//            int n=reader.read();
//            char ch=(char)n;
//            System.out.println(ch);
            while (true) {
                char[] chs = new char[1024];
                int n=reader.read(chs);
                if(n==-1){
                    break;
                }
                for(int i=0;i<n;i++){
                System.out.print(chs[i]);}
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 Writer方法如下:

public class demo11 {
    public static void main(String[] args) {
        try(Writer write=new FileWriter("./test.txt",true)) {
            write.write("你好世界");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

五、实现文件查找,删除,复制

根据文件内容查找:

首先先输入它所在的目录,然后看看这个目录有没有错。

没错的话,就输入文件内容的关键字,然后scan搜索递归, 不是目录就返回,把它放到一个File[]里面,空的也返回。

然后reader一下把文件的内容都读到字符串里面,看看有没有包含关键字key。没有的话就下一个,是目录就继续递归。

public class demo14 {
    public static void main(String[] args) throws IOException {
        Scanner scanne = new Scanner(System.in);
        System.out.println("请输入你要搜索的路径");
        String rootPath = scanne.next();
        File file = new File(rootPath);
        if (!file.isDirectory()) {
            System.out.println("路径有误");
            return;
        }
        System.out.println("请输入关键字");
        String key = scanne.next();
        scan(file, key);

    }

    private static void scan(File file, String key) throws IOException {
        if (!file.isDirectory()) {
            return;
        }
        File[] files = file.listFiles();
        if (files == null || files.length == 0) {
            return;
        }
        for (File f : files) {
            if (f.isFile()) {
                doSreach(f, key);
            } else {
                scan(f, key);
            }
        }
    }

    private static void doSreach(File file, String key) throws IOException {
        StringBuilder stringBuilder = new StringBuilder();
        try (Reader reader = new FileReader(file)) {
            while (true) {
                char[] buffer = new char[1024];
                int n = reader.read(buffer);
                if (n == -1) {
                    break;
                }
                stringBuilder.append(buffer,0,n);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if(stringBuilder.indexOf(key)==-1){
            return;
        }else{
            System.out.println("找到了"+file.getCanonicalPath());
        }
    }
}

删除:

首先也是输入文件所在的目录, 然后看看这个目录有没有错。

没错的话,就输入文件名字的关键字,然后scan搜索递归, 不是目录就返回,把它放到一个File[]里面,空的也返回。

然后按File[]的内容,for循环找有这个关键字名字的文件,提示用户要不要删除。

public class demo12 {
    public static void main(String[] args) throws IOException {
        System.out.println("请输入你要搜索的路径");
        Scanner scanner=new Scanner(System.in);
        String rootPath=scanner.next();
        File file=new File(rootPath);
        if(!file.isDirectory()){
            System.out.println("路径不存在");
            return;
        }
        System.out.println("请输入你要删除文件的关键字");
        String key=scanner.next();
        scan(file,key);
    }

    private static void scan(File currentDir, String key) throws IOException {
        if(!currentDir.isDirectory()){
            return;
        }
        File[] files=currentDir.listFiles();
        if(files==null||files.length==0){
            return;
        }
        for(int i=0;i<files.length;i++){
            if(files[i].isFile()){
                doDelete(files[i],key);
            }else {
                scan(files[i],key);
            }
        }
    }

    private static void doDelete(File file, String key) throws IOException {
        if(!file.getName().contains(key)){
            return;
        }
        Scanner scanner=new Scanner(System.in);
        System.out.println(file.getCanonicalPath()+"是否要删除该文件,Y/n");
        String s=scanner.next();
        if(s.equals("Y")||s.equals("y")){
            file.delete();
        }
    }
}

复制:

首先也是输入文件所在的路径, 然后看看这个文件有没有错。

没错的话,就输入你要复制到目标地的路径,如果这时候目标路径的父节点不是目录就不行,因为这个复制是要跟目的地同一个等级。

然后源文件和目的地都没错之后,就可以从源文件中读,然后在目的地中写。

public class demo13 {
    public static void main(String[] args) {
        System.out.println("请输入源文件路径");
        Scanner scanner = new Scanner(System.in);
        String srcPath = scanner.next();
        File srcFile = new File(srcPath);
        if (!srcFile.isFile()) {
            System.out.println("无此文件");
            return;
        }
        System.out.println("请输入目标文件路径");
        String descPath = scanner.next();
        File descFile = new File(descPath);
        if (!descFile.getParentFile().isDirectory()) {
            System.out.println("路径有误");
            return;
        }
        try (InputStream inputStream = new FileInputStream(srcFile);
             OutputStream outputStream = new FileOutputStream(descFile)) {
            while (true) {
                byte[] buffer = new byte[1024];
                int n = inputStream.read(buffer);
                if (n == -1) {
                    break;
                }
                outputStream.write(buffer,0,n);

            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

IO拒绝访问 

(在输入目的路径的时候可能会“拒绝访问”报错)

这是因为你没有指定你复制到目的地的名字,只给了路径,还需要给它安一个名字。

如上图,就不会报错了。

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

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

相关文章

资料文档中心

华三文档中心 华三云计算文档中心各个方向(云计算 大数据 路由器 交换机 无线 物联网 安全 光模块 智能管理与运维 移动通信 服务器 存储 PON ICG信息通信 EPCN网关 License Server 其他产品 智能终端 传输产品 云简网络 商用终端 ALGC SMB 产品)云计算-云计算产品-云计算解决…

产品经理-需求分析

需求分析 1.什么是需求&#xff1f; 需求&#xff1a;其本质就是用户的预期&#xff0c;而预期与现状之间存在着差异&#xff0c;就出现了需求另外&#xff0c;用户提出需求时&#xff0c;都会基于某种目的所提出问题、建议或者想法 原始需求的目的是为了避免扯皮&#xff0c;…

基于Arduino的3D打印六足机器人

本项目是在原有项目基础上进行的改进&#xff0c;改进了六足机器人的姿态算法&#xff0c;使姿态在变化时更稳定 基于Arduino的3D打印六足机器人 一、项目说明二、所需配件三、3D打印四、机械腿部4.1腿部结构4.2腿部代码4.3 COPY腿部结构4.4伺服电机接线4.5 连接腿部结构 五、…

PD协议芯片ECP5701+充电管理芯片+升压芯片搭配应用TYPE-C口充电及升压供电系统

以往的电子设备需要有专门的电源适配器来供电&#xff0c;不仅需要大家区分不同设备的充电器&#xff0c;还要专门找地方来放置&#xff0c;还给用户带来了诸多不便。然而&#xff0c;TYPE-C接口&#xff0c;全称USB Type-C&#xff0c;迅速取代了传统的USB接口&#xff0c;成为…

【评测】湖北十堰大带宽300M高防云服务器

湖北十堰的高防服务器拥有高性能处理器、大容量DDR4 ECC内存、SSD硬盘及多种带宽配置&#xff0c;性价比高且配置灵活。它防御强劲&#xff0c;性能稳定可靠&#xff0c;扩展性佳&#xff0c;可满足各类企业需求&#xff0c;是优质服务器的绝佳选择。 清风云官网&#xff1a;ht…

【含文档】基于Springboot+Andriod的成人教育APP(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

如何正确输入IP地址前面的斜杠:详细指南

在网络配置和文档编写中&#xff0c;经常需要准确地输入IP地址及其子网掩码。IP地址前面的斜杠&#xff08;/&#xff09;用于表示子网掩码的位数&#xff0c;是一个重要的组成部分。然而&#xff0c;对于一些用户来说&#xff0c;输入这个斜杠可能会带来一些困惑。本文将详细介…

c++ union内存布局

// // Created by 徐昌真 on 2024/10/5. // #include <iostream> using namespace std;//定义一个union union Data{int a;char s[7]; //char值的范围(-128~127) }; int main() {//创建一个unionData d;d.s[0] 255; //16进制 0xFF 16进制F对应二进制 1111d.s[1] 1; …

国外电商系统开发-运维系统拓扑布局

点击列表中设备字段&#xff0c;然后定位到【拓扑布局】中&#xff0c;可以看到拓扑发生了变化 再回头&#xff0c;您再次添加一个服务器到系统中&#xff0c;并且选择该服务器的连接节点为您刚才创建的“SDN路由器”&#xff0c;保存后&#xff0c;您可以看到这个服务器连接着…

胡超:引领中美能源与文化合作的创意先锋

中美能源合作领域迎来了一个重要的历史时刻,2024年中美可持续发展峰会(Sino-American Symposium on Sustainable Development)在全球关注下圆满落幕。这场峰会不仅成为了中美两国绿色能源合作的高端平台,也展示了作为该活动的协办方RES(Reverse Energy Solutions)在清洁能源领域…

Django网站admin用户和组的权限机制

Step 1 创建超级用户 python manage.py createsuperuser 在终端输入 Step 2 输入用户名和密码 Step 3在网站上输入 127.0.0.1&#xff1a;8000/admin Step 4创建群组和用户 让创建的组和用户可以访问网站 def index(request):groupnameslist(request.user.groups.values(name)…

【api连接ChatGPT的最简单方式】

通过api连接ChatGPT的最简单方式 建立client 其中base_url为代理&#xff0c;若连接官网可省略&#xff1b;配置环境变量 from openai import OpenAI client OpenAI(base_url"https://api.chatanywhere.tech/v1" )或给出api和base_url client OpenAI(api_key&…

LC刷题专题:堆、大顶堆、小顶堆

文章目录 692. 前K个高频单词215. 数组中的第K个最大元素2336、无限集中的最小数字 这篇文章以后记录自己刷到的题目中与堆有关的。 692. 前K个高频单词 这个题目整体不难&#xff0c;是前k个高频元素的改进版&#xff0c;只需要在创建小顶堆时执行排序规则即可。如果出现次数…

Yolov8轻量级网络改进GhostNet

1,理论部分 由于内存和计算资源有限,在移动设备上部署卷积神经网络 (CNN) 很困难。我们的目标是通过利用特征图中的冗余,为 CPU 和 GPU 等异构设备设计高效的神经网络,这在神经架构设计中很少被研究。对于类 CPU 设备,我们提出了一种新颖的 CPU 高效 Ghost (C-Ghost) …

【2024】uniapp 接入声网音频RTC【H5+Android】Unibest模板下Vue3+Typescript

需求 最近开发一个项目&#xff0c;需要实现声网的接入。由于采用uniapp模式&#xff0c;按照最佳实践采用优先开发H5再适配的模式。因此实现了H5和Android两种模式的接入&#xff0c;Android里采用离线打包自定义基座来进行调试。怕自己忘记了&#xff0c;在这里详细的记录完…

深入学习从入门到放弃:掌握梯度概念,开始征服深度学习!

文章目录 从现实中的例子理解什么是梯度梯度的数学定义梯度的严格的数学定义为什么梯度向量指向函数增长最快的方向&#xff1f; 为什么梯度是深度学习优化的最基础概念在python中实现梯度求导的简单案例一元线性回归多元线性回归 结合示例深度学习中的梯度求导的一般过程数学原…

开源AI智能名片链动2+1模式S2B2C商城小程序源码在B2B情境化营销中的应用

摘要&#xff1a;本文探讨情境化营销在B2B环境中的适用性&#xff0c;分析现有的B2B情境化营销案例&#xff0c;如通过物联网传感设备进行设备监控与预防保养。随后引入“开源AI智能名片链动21模式S2B2C商城小程序源码”&#xff0c;阐述其如何助力B2B企业在情境化营销中提升效…

弧形导轨驱动器高效使用技巧!

弧形导轨驱动器是一种用于驱动滑座沿着导轨做弧线运动的设备&#xff0c;其用方法因具体型号和应用场景的不同而有所差异&#xff0c;通常可以归纳为以下几个步骤&#xff1a; 1、安装前要明确弧形导轨的使用需求&#xff0c;根据需求选择合适的弧形导轨驱动器&#xff0c;准备…

Python办公自动化教程(005):Word添加段落

文章目录 2.1 Python-docx介绍2.2 安装2.3 实例 2.1 Python-docx介绍 python-docx 是一个用于创建和修改 Microsoft Word 文档&#xff08;.docx 格式&#xff09;的 Python 库。它可以方便地生成和处理 Word 文档&#xff0c;而无需直接与 Microsoft Word 程序交互。 2.2 安…

运营弹性的 5 大支柱

作者&#xff1a;来自 Elastic Elastic Platform Team 什么是运营弹性&#xff1f; 没有哪个组织能够免受干扰。无论是错误的更新、有针对性的网络攻击&#xff0c;还是导致大规模供应链动荡的全球流行病&#xff0c;大多数公司在某个时候都会遇到障碍。这是增长的代价。但成功…