Java中IO的高级操作

news2024/11/6 0:33:27

目录

缓冲流

缓冲字节输入流:

缓冲字节输出流:

缓冲字符输入流:

缓冲字符输出流:

转换流

转换流字符输入:

转换流字符输出:

练习案例:

打印流

字节打印流:

字符打印流:

数据流

数据输入流:

数据输出流:

序列化流(对象流)

对象输入流:

输入多个对象:

对象输出流:

IO框架

常用方法:

FileUtils:

IOUtils:


缓冲流

缓冲字节输入流:

读数据时:它先用原始字节输入流一次性读取8KB的数据存入缓冲流内部的数组中(ps: 先一次多囤点货),再从8KB的字节数组中读取一个字节或者多个字节(把消耗屯的货)。

案例:

BufferedInputStream bufferedInputStream = new BufferedInputStream(FileInputStream fis);

获取字节缓冲输入流对象。

sif:字节输入流对象,用来获取文件的位置。

package com.zsh.day2.字节缓冲流;

import java.io.*;

/**
 * 字节缓冲输入流
 */
public class BufferedInputStreamDemo {
    public static void main(String[] args) {
        try (
                // 获取字节缓冲输入流对象
                BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("abc\\1.txt"));
        ) {
            // 缓冲字节流:循环读取文件中的所有内容
            // 读取文件中的内容
            byte[] buf = new byte[1024 * 8];
            // 每次读取的字节数量
            int len;
            // 循环读取文件中的所有内容
            while ((len = bufferedInputStream.read(buf)) != -1) {
                // 输出读到的内容
                System.out.println(new String(buf));
            }
        }catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

缓冲字节输出流:

写数据时: 它是先把数据写到缓冲流内部的8BK的数组中(ps: 先攒一车货),等数组存满了,再通过原始的字节输出流,一次性写到目标文件中去(把囤好的货,一次性运走)。

案例:

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(FileOutputStream() fos);

获取字节缓冲流输出对象。

fos:用来设置字节缓冲流输出后保存文件的路径地址。

package com.zsh.day2.字节缓冲流;

import java.io.*;

/**
 * 字节缓冲输出流
 */
public class BufferedOutputStreamDemo {
    public static void main(String[] args) {
        try (
                // 获取字节缓冲输出流对象
                BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("abc\\1.txt",true));
        ) {
            // 定义写入内容
            byte[] buf = new byte[]{99,100};
            // 写入
            bufferedOutputStream.write(buf);
        }catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

缓冲字符输入流:

BufferedReader读数据时:它先原始字符输入流一次性读取8KB的数据存入缓冲流内部的数组中(ps: 先一次多囤点货),再从8KB的字符数组中读取一个字符或者多个字符(把消耗屯的货)。

案例:

BufferedReader bufferedReader = new BufferedReader(FileReader(String str) fr);

获取字符输入流对象。

fr:字符输入流对象,用来获取文件的位置。

int ch = bufferedReader.read();

每次读取一个字符,返回int,没有数据返回-1。

String line = bufferedReader.readLine()

每次读取一行字符,返回String,没有数据返回null。

package com.zsh.day2.字符缓冲流;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * 字符缓冲输入流
 */
public class BufferedReaderDemo {
    public static void main(String[] args) {
        // 获取字符缓冲输入流对象
        try (
                BufferedReader bufferedReader = new BufferedReader(new FileReader("abc\\1.txt"));
        ) {
            // 每次读一个字符
            int ch = bufferedReader.read();
            System.out.println((char) ch);

            // 定义字符串接收读到的数据
            String line;
            // 循环读取全部内容,每次读一行,不读到返回null
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

缓冲字符输出流:

BufferedWriter写数据时: 它是先把数据写到字符缓冲流内部的8BK的数组中(ps: 先攒一车货),等数组存满了,再通过原始的字符输出流,一次性写到目标文件中去(把囤好的货,一次性运走)。如下图所示

案例:

BufferedWriter bufferedWriter = new BufferedWriter(FileWriter fw);

获取字符输出流对象

fw:用来设置字节缓冲流输出后保存文件的路径地址。

bufferedWriter.write(String str);

写入字符的方法。

bufferedWriter.newLine();

换行方法。

package com.zsh.day2.字符缓冲流;

import java.io.*;

/**
 * 缓冲字符输出流
 */
public class BufferWriterDemo {
    public static void main(String[] args) {
        try (
                // 获取缓冲字符输出流对象
                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("abc\\FileWriter3.txt"));
        ) {
            // 写入字符
            bufferedWriter.write("你好!");

            // 换行
            bufferedWriter.newLine();

            // 写入字符
            bufferedWriter.write("你也好!");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

转换流

FileReader默认只能读取UTF-8编码格式的文件。如果使用FileReader读取GBK格式的文件,可能存在乱码,因为FileReader它遇到汉字默认是按照3个字节来读取的,而GBK格式的文件一个汉字是占2个字节,这样就会导致乱码。

Java给我们提供了另外两种流InputStreamReader,OutputStreamWriter,这两个流我们把它叫做转换流。它们可以将字节流转换为字符流,并且可以指定编码方案。

转换流字符输入:

InputStreamReader类

案例:

InputStreamReader inputStreamReader = new InputStreamReader(FileInputStream fis,String str);

获取字符转换流输入对象。

fis:获取读取文件的地址路径。

str:字符串,用来定义读取文件的规则,如:utf-8、gbk等。会按照指定编码格式读取文件内容。

package com.zsh.day2.字符转换流;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 字符输入转换流
 */
public class InputStreamReaderDemo {
    public static void main(String[] args) {
        // 获取字符输入转换流对象
        try (
                InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("abc\\gbk.txt"),"gbk");
        ) {
            // 数组接收读取内容
            char[] buf = new char[2];
            // 读取文件中的内容
            int len;
            // 循环读取文件内容
            while ((len = inputStreamReader.read(buf)) != -1) {
                System.out.println(new String(buf));
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

转换流字符输出:

OutputStreamWriter类

案例:

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(String str,boolean append),String str2);

获取字符转换流输出对象

str:文件写出保存路径。

append:是否追加内容,默认false直接覆盖。

str2:写出文件的编码格式,如utf-8、gbk等。

BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);

缓冲字符流对象,可以将转换流包装进缓冲流对象中。

package com.zsh.day2.字符转换流;

import java.io.*;

/**
 * 字符输出转换流
 */
public class OutPutStreamWriterDemo {
    public static void main(String[] args) {
        try (
                // 获取字符输出转换流对象
                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("abc\\gbk2.txt",true),"gbk");
                // 获取字符缓冲流对象
                BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
        ) {
            // 写入内容,写入的编码格式为gbk
            bufferedWriter.write("这段文字的编码格式是gbk");

            // 换行
            bufferedWriter.newLine();

            // 写入内容,写入的编码格式为gbk
            bufferedWriter.write("会则不难,难则不会,哈哈哈哈!!!");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

练习案例:

将gbk文件读取出来,放到utf-8文件中

package com.zsh.day2.字符转换流;

import java.io.*;

/**
 * 将gbk文件读取出来,放到utf-8文件中
 */
public class Demo {
    public static void main(String[] args) {
        try (
                // 获取输入转换流对象(当前读取格式为gbk)
                InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("abc\\gbk2.txt"), "gbk");
                // 获取缓存流读对象
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

                // 获取输出转换流对象(当前写入格式为utf-8)
                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("abc\\gbk3.txt",true),"utf-8");
                // 获取输入缓存流对象
                BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
        ) {
            // 循环读取一行
            String line;
            while ((line = bufferedReader.readLine()) != null){
                System.out.println(line);
                // 把读到的数据写入到新文件中
                bufferedWriter.write(line);
                // 换行
                bufferedWriter.newLine();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

打印流

打印流,这里所说的打印其实就是写数据的意思,它和普通的write方法写数据还不太一样,一般会使用打印流特有的方法叫print(数据)或者println(数据),它打印啥就输出啥。

打印流有两个,一个是字节打印流PrintStream,一个是字符打印流PrintWriter,如下图所示

字节打印流:

PrintStream类

案例:

PrintStream printStream = new PrintStream(String str);

获取字节打印流对象。

str:用来设置字节打印流输出后保存文件的路径地址。

printStream.println(10);

打印并换行(打印什么文件中就显示什么)。

printStream.write(99);

写入字节到文件(写入之后的内容会按照编码格式转换)。

package com.zsh.day2.字节打印流;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;

/**
 * 字节打印流
 */
public class PrintStreamDemo {
    public static void main(String[] args) {
        try (
                // 获取字节打印流对象
                PrintStream printStream = new PrintStream("abc\\BytePrint.txt");
        ) {
            // 打印字节到文件(打印什么文件中就显示什么)
            printStream.println(10);
            // 打印字节到文件
            printStream.print("这是一句话");
            // 打印字节到文件
            printStream.println("!!!");

            // 写入字节到文件(写入之后的内容会按照编码格式转换)
            printStream.write(99);
            // 换行
            printStream.write("\t\n".getBytes());
            // 写入字节到文件
            byte[] buf = new byte[]{100,101,102,103};
            printStream.write(buf);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

字符打印流:

PrintWriter类

案例:

PrintWriter printWriter = new PrintWriter(String str);

获取字符打印流对象。

str:用来设置字符打印流输出后保存文件的路径地址。

printWriter.println(10);

打印并换行(打印什么文件中就显示什么)。

printWriter.write(99);

写入字节到文件(写入之后的内容会按照编码格式转换)。

package com.zsh.day2.字符打印流;

import java.io.FileNotFoundException;
import java.io.PrintWriter;

/**
 * 字符打印流
 */
public class PrintWriterDemo {
    public static void main(String[] args) {
        try (
                // 获取字符打印流对象
                PrintWriter printWriter = new PrintWriter("abc\\BytePrint2.txt");
        ){
            // 打印字节到文件(打印什么文件中就显示什么)
            printWriter.println(10);
            // 打印字节到文件
            printWriter.print("这是一句话");
            // 打印字节到文件
            printWriter.println("!!!");

            // 写入字节到文件(写入之后的内容会按照编码格式转换)
            printWriter.write(99);
            // 换行
            printWriter.write("\t\n");
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

数据流

把数据和数据的类型一并写到文件中去,读取的时候也将数据和数据类型一并读出来。这就可以用到数据流,有两个DataInputStream和DataOutputStream.

数据输入流:

DataInputStream类

读取时候,文件里面存储的什么类型的值,就需要用对应类型去读。

案例:

DataInputStream dataInputStream = new DataInputStream(FileInputStream fis);

获取数据输入流对象。

fis:获取读取文件的地址路径。

int i = dataInputStream.readInt();

读取文件中的int类型值

double d = dataInputStream.readDouble();

读取文件中的double类型值

boolean b = dataInputStream.readBoolean();

读取文件中的boolean类型值

String rs = dataInputStream.readUTF();

读取文件中的utf-8类型值

package com.zsh.day2.数据输入流;

import java.io.*;

/**
 * 数据输入流
 */
public class DateInputStreamDemo {
    public static void main(String[] args) {
        try (
                // 创建数据输入流对象
                DataInputStream dataInputStream = new DataInputStream(new FileInputStream("abc\\io-out.txt"));
        ) {
            int i = dataInputStream.readInt();
            System.out.println(i);

            double d = dataInputStream.readDouble();
            System.out.println(d);

            boolean b = dataInputStream.readBoolean();
            System.out.println(b);

            String rs = dataInputStream.readUTF();
            System.out.println(rs);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

数据输出流:

DataOutputStream类

案例:

DataOutputStream dataOutputStream = new DataOutputStream(FileOutputStream fos);

获取数据输出流对象。

fos:用来设数据打印流输出后保存文件的路径地址。

dataOutputStream.writeInt(97);

写入int数据

dataOutputStream.writeDouble(99.5);

写入double数据

dataOutputStream.writeBoolean(true);

写入布尔数据

dataOutputStream.writeUTF("这是一段utf-8的数据内容");

写入utf-8数据

package com.zsh.day2.数据输出流;

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 数据输出流
 */
public class DataOutputStreamDemo {
    public static void main(String[] args) {
        try (
                // 创建数据输出流对象
                DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("abc\\io-out.txt"));
        ){
            // 写入int数据
            dataOutputStream.writeInt(97);
            // 写入double数据
            dataOutputStream.writeDouble(99.5);
            // 写入布尔数据
            dataOutputStream.writeBoolean(true);
            // 写入utf-8数据
            dataOutputStream.writeUTF("这是一段utf-8的数据内容");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

序列化流(对象流)

节流是以字节为单位来读写数据、字符流是按照字符为单位来读写数据、而对象流是以对象为单位来读写数据。也就是把对象当做一个整体,可以写一个对象到文件,也可以从文件中把对象读取出来。

对象输入流:

ObjectInputStream类

案例:

ObjectInputStream objectInputStream = new ObjectInputStream(FileInputStream fis);

获取对象输入流对象。

fis:获取读取文件的地址路径。

Object o = objectInputStream.readObject();

获取文件中的对象。反序列化

package com.zsh.day2.对象输入流;

import com.zsh.pojo.User;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 * 对象输入流
 */
public class ObjectInputStreamDemo {
    public static void main(String[] args) {
        try (
                // 获取对象输入流对象
                ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("abc\\object.txt"));
        ) {
            // 获取文件中的对象
            Object o = objectInputStream.readObject();
            User user = (User) o;
            // 输出
            System.out.println(user);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

输入多个对象:

案例一:

把多个对象写入一个文件中,循环读取时条件可以设置为true,读取完之后会出现:EOFException异常表示文件读取完了,try/catch处理即可。

package com.zsh.day2.对象输入流;

import com.zsh.pojo.User;

import java.io.*;

/**
 * 把多个对象存入文件
 */
public class ObjectInputStreamAllDemo {
    public static void main(String[] args) {
        try (
                // 获取对象输出流对象
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("abc\\ObjectAll.txt"));
        ) {
            User user1 = new User("张三",20);
            User user2 = new User("李四",21);
            User user3 = new User("王五",22);
            // 把对象写入到文件
            objectOutputStream.writeObject(user1);
            objectOutputStream.writeObject(user2);
            objectOutputStream.writeObject(user3);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        // 读取文件中的对象
        readTest();
    }

    /**
     * 读取文件中的对象
     */
    private static void readTest() {
        // 获取对象输入流对象
        try (
                ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("abc\\ObjectAll.txt"));
        ) {
            // 循环读取文件中的内容(当文件读取完时候,会出现:EOFException异常,表示文件读取完了)
            while (true) {
                // 读取文件中的对象
                Object o = objectInputStream.readObject();
                // 转换
                User user = (User) o;
                // 打印
                System.out.println(user);
            }
        } catch (EOFException e) {
            System.out.println("文件读取完了:" + e);
        } catch (IOException e) {
            System.out.println("文件读取异常:" + e);
        } catch (ClassNotFoundException e) {
            System.out.println("文件找不到:" + e);
        }
    }
}

案例二:

也可以把多个对象放到ArrayList中,在放到文件中,这样也可也存储多个对象。

package com.zsh.day2.对象输入流;

import com.zsh.pojo.User;

import java.io.*;
import java.util.ArrayList;

/**
 * 把多个对象存入文件
 */
public class ObjectInputStreamAllDemo {
    public static void main(String[] args) {
        try (
                // 获取对象输出流对象
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("abc\\ObjectAll.txt"));
        ) {
            // 创建对象
            User user1 = new User("张三",20);
            User user2 = new User("李四",21);
            User user3 = new User("王五",22);

            // 创建集合1
            ArrayList<User> list = new ArrayList<>();
            list.add(user1);
            list.add(user2);
            list.add(user3);
            // 创建集合2
            ArrayList<User> list2 = new ArrayList<>();
            list2.add(user1);
            list2.add(user2);
            list2.add(user3);

            // 把对象写入到文件
            objectOutputStream.writeObject(list);
            objectOutputStream.writeObject(list2);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        // 读取文件中的对象
        readTest();
    }

    /**
     * 读取文件中的对象
     */
    private static void readTest() {
        // 获取对象输入流对象
        try (
                ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("abc\\ObjectAll.txt"));
        ) {
            // 循环读取文件中的内容(当文件读取完时候,会出现:EOFException异常,表示文件读取完了)
            while (true) {
                // 读取文件中的对象
                Object o = objectInputStream.readObject();
                // 转换
                ArrayList<User> list = (ArrayList<User>) o;
                // 打印
                System.out.println(list);
            }
        } catch (EOFException e) {
            System.out.println("文件读取完了:" + e);
        } catch (IOException e) {
            System.out.println("文件读取异常:" + e);
        } catch (ClassNotFoundException e) {
            System.out.println("文件找不到:" + e);
        }
    }
}

对象输出流:

ObjectOutputStraem类

案例:

创建对象,必须实现:Serializable接口,这是一个标记接口,证明对象可以被序列化。

package com.zsh.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private String name;
    private Integer age;
}

ObjectOutputStream objectOutputStream = new ObjectOutputStream(FileOutputStream fos);

获取对象输出流对象。

fos:用来设置对象流输出后保存文件的路径地址。

objectOutputStream.writeObject(Object o);

o:要写到文件中的对象。

package com.zsh.day2.对象输出流;

import com.zsh.pojo.User;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * 对象输出流
 */
public class ObjectOutputStreamDemo {
    public static void main(String[] args) {
        try (
                // 获取对象输出流
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("abc\\object.txt"));
        ) {
            // 创建对象
            User user = new User("张三",20);
            // 将对象写入文件(写入文件的对象必须实现:Serializable接口,这是一个标记接口,证明对象可以被序列化)
            objectOutputStream.writeObject(user);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

IO框架

在maven中引入依赖

<!-- io流框架 -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>x

常用方法:

FileUtils:

FileUtils:直接操作文件。

FileUtils.copyFile(File f1,File f2);

复制文件。

f1:复制的文件路径。

f2:拷贝到的文件路径。

FileUtils.copyDirectory(File f1,File f2);

复制文件夹。

f1:复制的文件夹路径。

f2:拷贝到的文件夹路径。

FileUtils.deleteDirectory(File f);

删除文件夹。

f:删除的文件夹路径。

String str = FileUtils.readFileToString(File f,String str);

读数据。

f:要读取的文件路径。

str:读取的格式,如:utf-8、gbk等。

IOUtils:

IOUtils:通过流操作文件

IOUtils.copy(FileInputStream fis,FileOutputStream fos);

复制文件。

fis:要复制的文件路径。

fos:复制后要保存的路径

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

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

相关文章

VsCode中搭建 Rt-Thread 开发环境(编译,调试,下载)

VsCode中搭建 Rt-Thread 开发环境&#xff08;编译&#xff0c;调试&#xff0c;下载&#xff09; 文章目录 VsCode中搭建 Rt-Thread 开发环境&#xff08;编译&#xff0c;调试&#xff0c;下载&#xff09;一 . 下载rt-thread源码二. 安装env脚本环境三 . 配置工具链3.1 使用…

Pinctrl子需要中client端使用pinctrl过程的驱动分析

往期内容 本专栏往期内容&#xff1a; Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析&#xff1a;imx_pinctrl_soc_info结构体 input子系统专栏…

初探Flink的序列化

Flink中的序列化应用场景 程序通常使用(至少)两种不同的数据表示形式[2]&#xff1a; 1. 在内存中&#xff0c;数据保存在对象、结构体、列表、数组、哈希表和树等结构中。 2. 将数据写入文件或通过网络发送时&#xff0c;必须将其序列化为字节序列。 从内存中的表示到字节序列…

项目一:使用 Spring + SpringMVC + Mybatis + lombok 实现网络五子棋

一&#xff1a;系统展示: 二&#xff1a;约定前后端接口 2.1 登陆 登陆请求&#xff1a; GET /login HTTP/1.1 Content-Type: application/x-www-form-urlencodedusernamezhangsan&password123登陆响应&#xff1a; 正常对象&#xff1a;正常对象会在数据库中存储&…

CentOS7配置静态IP(非解决方法指导,纯笨蛋记录)

一、这篇博客算是记录我终于解决我安装的虚拟机ping不通外网的问题&#xff0c;前前后后我尝试了很多次花了很多时间&#xff0c;最后弄完发现其实都是因为我之前根本不知道什么是虚拟机的网络配置。。。。。 这个链接介绍了vmware虚拟机三种网络模式及配置详解_vmware 特定虚…

opencv-day2-图像预处理1

图像预处理 在计算机视觉和图像处理领域&#xff0c;图像预处理能够提高后续处理&#xff08;如特征提取、目标检测等&#xff09;的准确性和效率。 常见的图像预处理操作&#xff1a; 图像色彩空间转换 图像大小调整 图像仿射变换 图像翻转 图像裁剪 图像二值化处理 图…

3DDFA-V3——基于人脸分割几何信息指导下的三维人脸重建

1. 研究背景 从二维图像中重建三维人脸是计算机视觉研究的一项关键任务。在虚拟现实、医疗美容、计算机生成图像等领域中&#xff0c;研究人员通常依赖三维可变形模型&#xff08;3DMM&#xff09;进行人脸重建&#xff0c;以定位面部特征和捕捉表情。然而&#xff0c;现有的方…

Ubuntu系统如何实现键盘按键映射到其他按键(以 Ctrl+c 映射到 F3,Ctrl+v 映射到 F4 为例)

文章目录 写在前面1. 功能描述2. 实现步骤2.1 安装AutoKey2.2 软件设置2.2.1 软件设置 2.3 测试是否安装成功 参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04 1. 功能描述 Ubuntu系统使用Ctrlc 、Ctrlv 进行复制粘贴操作的时候&#xff0c;时间长了就会出现小拇指…

【Clickhouse】客户端连接工具配置

ClickHouse 是什么 ClickHouse 是一个分布式实时分析型列式存储数据库。具备高性能&#xff0c;支撑PB级数据&#xff0c;提供实时分析&#xff0c;稳定可扩展等特性。适用于数据仓库、BI报表、监控系统、互联网用户行为分析、广告投放业务以及工业、物联网等分析和时序应用场…

postman的脚本设置接口关联

pm常用的对象 变量基础知识 postman获取响应结果的脚本的编写 下面是购物场景存在接口信息的关联 登录进入---搜索商品---进入商品详情---加入购物车 资源在附件中&#xff0c;可以私聊单独发送 postman的SHA256加密 var CryptoJS require(crypto-js);// 需要加密的字符串 …

Qt 文件目录操作

Qt 文件目录操作 QDir 类提供访问系统目录结构 QDir 类提供对目录结构及其内容的访问。QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它还可以用于访问 Qt 的资源系统。 Qt 使用“/”作为通用目录分隔符&#xff0c;与“/”在 URL 中用作路径分隔符…

qt QCheckBox详解

QCheckBox 是 Qt 框架中的一个控件&#xff0c;用于创建复选框&#xff0c;允许用户进行选择和取消选择。它通常用于表单、设置界面和任何需要用户选择的场景。 QCheckBox继承自QAbstractButton类&#xff0c;因此继承了按钮的特性。它表示一个复选框&#xff0c;用户可以通过…

读数据工程之道:设计和构建健壮的数据系统26数据建模

1. 数据建模 1.1. 良好的数据架构必须反映出使用这些数据的组织的业务目标和业务逻辑 1.2. 数据湖1.0、NoSQL和大数据系统的兴起&#xff0c;使工程师们有时是为了合理的性能提升去忽略传统的数据建模 1.3. 数据在企业中的地位急剧上升&#xff0c;人们越来越认识到&#xf…

2025生物发酵展(济南)为生物制造产业注入新活力共谱行业新篇章

2025第十四届国际生物发酵展将于3月3-5日济南盛大举办&#xff01;产业链逐步完整&#xff0c;展会面积再创历史新高&#xff0c;展览面积较上届增涨至60000平方米&#xff0c;专业观众40000&#xff0c;品牌展商800&#xff0c;同期活动会议增加至50场&#xff0c;展会同期将举…

Windows版 nginx安装,启动,目录解析,常用命令

Windows版 nginx安装&#xff0c;启动&#xff0c;目录解析&#xff0c;常用命令 一级目录二级目录三级目录 1. 下载2. 启动方式一&#xff1a;方式二&#xff1a; 3. 验证是否启动4. 安装目录解析5. 常用命令 一级目录 二级目录 三级目录 1. 下载 官网下载&#xff1a;ngi…

【maven】idea执行了maven的install命令给本地安装项目依赖包 安装后删除

目录 事件起因环境和工具操作过程解决办法1、找到对应的目录下的文件&#xff0c;手动去删除&#xff0c;比如我的依赖库的路径是D:\qc_code\apache-maven-3.8.2\repository 我只需要找到这个目录下对应的依赖包进行手动删除即可&#xff08;不推荐&#xff0c;强行删除文件夹文…

技术选型不当对项目的影响与补救措施

在项目管理中&#xff0c;初期技术选型与项目需求不匹配的情况并不罕见&#xff0c;这可能导致项目延误、成本增加和最终成果的不理想。补救的关键措施包括&#xff1a;重新评估技术选型、加强团队沟通、实施有效的需求管理以及建立持续的反馈机制。其中&#xff0c;重新评估技…

基于SSM+VUE宠物医院后台管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

MySQL 8.0在windows环境安装及配置

文章目录 一、下载二、安装三、配置环境变量 一、下载 1、先彻底卸载之前的MySQL&#xff0c;并清理其 残留文件 。 2、登录网址https://www.mysql.com/ 3、点击网址左下角“中文”按钮&#xff0c;切换到中文界面 4、点击网页上方的“下载”按钮&#xff0c;然后点击网页…

【传知代码】用于图像识别的判别图正则化技术

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 论文概述图正则化技术及其优点参考文献&#xff1a; 算法流程在标准BLS中嵌入判别图正则化的方法 模型整体架构代码复现图拉普拉斯矩阵的构建—…