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

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类的使用

  1. File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)
  2. FiLe类声明在java.io包下
  3. File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用Io流来完成。
  4. 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”

1.1、如何创建File类的实例

File(String filePath)
File(String parentPath, String childPath)
File(String parentFile, String childPath)
  1. 相对路径:相较于某个路径下,指明的路径。

  2. 绝对路径:包含盘符在内的文件或文件目录的路径

  3. 路径分隔符:

    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原理

  1. I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于 处理设备之间的数据传输。如读/写文件,网络通讯等。
  2. Java程序中,对于数据的输入/输出操作以“流(stream)” 的 方式进行。
  3. java.io包下提供了各种“流”类和接口,用以获取不同种类的 数据,并通过标准的方法输入或输出数据。

image.png

输入input:读取外部数据(磁 盘、光盘等存储设备的数据)到 程序(内存)中。

输出output:将程序(内存) 数据输出到磁盘、光盘等存储设备中。

2.2、流的分类/体系结构

  • 按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
  • 按数据流的流向不同分为:输入流,输出流
  • 按流的角色的不同分为:节点流,处理流
image.png

流的分类理解示意图:

image.png

三、节点流(或文件流)

* 抽象基类             节点流(或文件流)           缓冲流(处理流的一种)
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))

image.png

本章步骤:

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

从内存中写出数据的到硬盘文件的操作

说明:

  1. 输出操作,对应的File可以不存在,并不会报异常

  2. 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、解码 :字节、字节数组 —> 字符数组、字符串

​ 编码 :字符数组、字符串 —> 字节、字节数组

image.png

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、多种字符集编码

编码表的由来

计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识 别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。 这就是编码表。

常见的编码表

  1. ASCII:美国标准信息交换码。
    • 用一个字节的7位可以表示。
  2. ISO8859-1:拉丁码表。欧洲码表。
    • 用一个字节的8位表示。
  3. GB2312:中国的中文编码表。最多两个字节编码所有字符
  4. GBK:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码
  5. Unicode:国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示。
  6. UTF-8:变长的编码方式,可用1-4个字节来表示一个字符。
image.png image.png

六、标准输入、输出流

image.png

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);}}}
}

七、打印流

image.png

八、数据流

image.png

相关文章:

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占用内存过多问题&#xff08;Docker on WSL2: VmmemWSL&#xff09; 一、问题描述二、问题解决2.1 创建.wslconfig文件2.2 重启wsl2 一、问题描述 安装完WSL2后&#xff0c;又安装了Docker&#xff0c;使用了一段时间&#xff0c;发现电脑变卡&#xff0c;进一步查看…...

华为云云耀云服务器L实例评测|了解配置和管理L型云服务器

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

【面试题】——Java基础篇(33题)

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

记一次 .NET 某电力系统 内存暴涨分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友找到我&#xff0c;说他生产上的程序有内存暴涨情况&#xff0c;让我帮忙看下怎么回事&#xff0c;最简单粗暴的方法就是让朋友在内存暴涨的时候抓一个dump下来&#xff0c;看一看大概就知道咋回事了。 二&#xff1a;Windbg 分…...

1.SpringEL初始

SpringEL初始 文章目录 SpringEL初始什么是SpringELSpring BeansSpring EL以XML形式Spring EL以注解形式启用自动组件扫描 执行输出 什么是SpringEL Spring EL与OGNL和JSF EL相似&#xff0c;计算评估或在bean创建时执行。此外&#xff0c;所有的Spring表达式都可以通过XML或注…...

HTTP 状态码

状态码状态码英文名称中文描述100Continue继续。客户端应继续其请求101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议&#xff0c;例如&#xff0c;切换到HTTP的新版本协议200OK请求成功。一般用于GET与POST请求201Created已创建。成功…...

ddtrace 系列篇之 dd-trace-java 项目编译

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

华为aarch64架构的泰山服务器EulerOS 2.0 (SP8)系统离线安装saltstack3003.1实践

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

C#中的方法

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

【Flowable】使用UEL整合Springboot从0到1(四)

前言 在前面我们介绍了Springboot简单使用了foleable以及flowableUI的安装和使用&#xff0c;在之前我们分配任务的处理人的时候都是通过Assignee去指定固定的人的。这在实际业务中是不合适的&#xff0c;我们希望在流程中动态的去解析每个节点的处理人&#xff0c;当前flowab…...

WebGL 计算点光源下的漫反射光颜色

目录 点光源光 逐顶点光照&#xff08;插值&#xff09; 示例程序&#xff08;PointLightedCube.js&#xff09; 代码详解 示例效果 逐顶点处理点光源光照效果时出现的不自然现象 更逼真&#xff1a;逐片元光照 示例程序&#xff08;PointLightedCube_perFragment.js…...

Java精品项目源码第61期垃圾分类科普平台(代号V061)

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

【Unity3D】资源管理

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

数据结构-----队列

目录 前言 队列 定义 队列的定义和操作方法 队列节点的定义 操作方式 顺序表实现队列&#xff08;C/C代码&#xff09; 链表实现队列&#xff08;C/C代码&#xff09; Python语言实现队列 前言 排队是我们日常生活中必不可少的一件事&#xff0c;去饭堂打饭的时候排队&a…...

postgresql教程

postgreSQL教程目录 postgreSQL 创建数据库的方式&#xff1a;postgreSQL删除数据库的方式&#xff1a;PostgreSQL 创建表格postgre删除表格&#xff1a;postgreSQL INSERT INTO 语句postgreSQL SELECT 语句:postgresql索引&#xff1a;什么情况下要避免使用索引&#xff1f; p…...

1万6千多最好的背单词SQLITE\ACCESS数据库

本来是实在不想再整英语类的数据了&#xff0c;因为实在是太多了&#xff0c;奈何今天弄到的这份数据库实在很精彩&#xff0c;因此还是希望能够有人喜欢。 搞一个“accept”字段的样例&#xff1a; 【explain】 vi. 承认;同意;承兑; vt. 接受;承认;承担;承兑; 【etyma】 ac…...

springboot aop Aspectj 切面

常用&#xff1a; Aspect、Component、Pointcut、Before、AfterReturning SpringBoot的AOP&#xff08;aspect注解&#xff09;的简单使用 - 知乎 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. 代码实现 题目链接&#xff1a;2862. Maximum Element-Sum of a Complete Subset of Indices 1. 解题思路 这一题的核心在于想明白一点&#xff1a; 要使得子序列当中任意两个数之积均为…...

第一百四十七回 自定义组件一

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了跟手指移动的小球相关的内容&#xff0c;本章回中将介绍 自定义组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 在项目中有些内容无法通过现有的组件来实现&#xff0c;因此需要自定义组件&#xf…...

MySQL 重复数据的处理

文章目录 MySQL 重复数据的处理一&#xff0c;常用处理方法二&#xff0c;统计重复数据三&#xff0c;过滤重复数据四&#xff0c;删除重复数据拓展&#xff1a;MySQL预防SQL注入&#xff08;一&#xff09;SQL注入 概述&#xff08;二&#xff09;预防措施 MySQL 重复数据的处…...

Java文字描边效果实现

效果&#xff1a; FontUtil工具类的完整代码如下&#xff1a; 其中实现描边效果的函数为&#xff1a;generateAdaptiveStrokeFontImage() package com.ncarzone.data.contentcenter.biz.img.util;import org.springframework.core.io.ClassPathResource; import org.springfr…...

【Web_环境搭建_Python3_pip】pip的升级、安装、更新、卸载,以及pipupgrade和pip-review的基础使用

** 官方说明 ** pip(Python Package Index)是一个以 Python 语言写成的软件包管理系統,使用 pip 可以非常方便的安装和管理 python 软件包PIP ** 查看信息 ** 查看版本 : pip --version查看已有 : pip list、pip freeze查看帮助 : pip help查看库信息 : pip show -f package_…...

农民朋友有福利啦!建行江门市分行“裕农通+农资结算”平台正式上线

随着广东广圣农业发展有限公司办公室内的裕农通“智慧眼”结算机“叮”的一声到账提醒&#xff0c;标志着全国首个“裕农通农资结算“平台的成功上线&#xff0c;也标志着建行广东省江门市分行的裕农通业务又迈上了一个新的台阶。 广东广圣农业发展有限公司&#xff08;以下简…...

super详解

父类 package com.mypackage.oop.demo06;public class Person06{public Person06() {System.out.println("Person06无参执行了");}protected String name "hexioahei";public void print(){System.out.println("Person");} }子类 package com…...

GMS地下水数值模拟丨GMS各模块、三维地质模型构建及与MODFLOW耦合、地下水流动数值模拟及报告编制、地下水溶质运移模型、反应性溶质运移等

目录 第一部分 地下水数值模拟理论模块 第二部分 地下水数值模拟数据收集、准备及预处理 第三部分 GMS各模块实践 第四部分 三维地质模型构建及与MODFLOW耦合 第五部分 地下水流动数值模拟及报告编制 第六部分 地下水溶质运移模型 第七部分 反应性溶质运移 更多应用 以…...

Redis 配置文件详解 - 持久化(RDB、AOF)

目录 Redis 配置文件详解 单位 包含 INCLUDES 网络 NETWORK 通用 GENERAL 快照 SNAPSHOTTING &#xff08;持久化&#xff09; 复制 REPLICATION&#xff08;主从复制&#xff09; 安全 SECURITY&#xff08;账号密码设置&#xff09; ​编辑 限制 CLIENTS 追加模…...

在线Excel转JSON工具

在线Excel转JSON工具 上传excel将数据转换成json格式...

Spring编程常见错误50例-Spring Bean依赖注入常见错误(下)

Value没有注入预期的值 问题 对于Value可以装配多种类型的数据&#xff1a; 装配对象&#xff1a; Value("#{student}") private Student student;Bean public Student student(){Student student createStudent(1, "xie");return student; }装配字符…...

SpringBoot整合Canal实现MySQL与ES数据同步

文章目录 SpringBoot项目引入Canal依赖配置文件项目结构设置监听类其余类、接口内容启动类实体类Controller类Mapper接口Serice接口 运行测试 开始之前请确认docker中已运行mysql与canal容器&#xff0c;并完成了监听binlog配置 未完成可移步&#xff1a; Docker部署Canal监听…...

做网站模板的海报尺寸多少钱/青岛网站建设公司

当然前提是cmd.exe是以管理员身份执行的&#xff0c;不然会报“拒绝xx”的错..... 1、netstat -ano |findstr 3306 //查看3306端口是否存在 2、tasklist |findstr 3036&#xff08;PID号&#xff09;//查看pid为3036的是什么程序在用 3、taskkill /T /F /PID 3036 //强制&#…...

wordpress cn/百度直播

这里给大家介绍我在实际工作中用的两种切图方法&#xff0c;一种是“图层切图”&#xff0c;这种切图方式比较适合切形状不规则的png格式的小图标&#xff0c;如企业logo等等&#xff0c;而另外一种是“切片切图”&#xff0c;这种切图方式比较适合形状规则的jpg格式的大图。 一…...

网站落地页怎么做的/百度6大核心部门

用户的权限都是以权限组来分配的&#xff1a;相关的几个表如下&#xff1a;security_groupsecurity_permissionsecurity_group_permissionsecurity_permission_auto_grantuser_login_security_group系统中没有权限的定义&#xff0c;只有安全组的定义&#xff0c;权限都是系统初…...

建设网站培训/网页设计师

亲测有效。...

wordpress后台链接/台州网络推广

EasyNVS云管理平台是EasyNVR的管理平台&#xff0c;可以远程控制与管理多台EasyNVR&#xff0c;它可以将分布在不同区域和网络环境下的多套EasyNVR设备&#xff0c;进行统一的接口登记和管理&#xff0c;借助云端宽带资源解决单路设备在云直播中多路分发观看所需的上行宽带问题…...

wordpress 鼠标经过/浙江搜索引擎优化

使用make更新函数库文件 函数库文件也就是对Object文件&#xff08;程序编译的中间文件&#xff09;的打包文件。 在Unix下&#xff0c;一般是由命令"ar"来完成打包工作。 函数库文件的成员 一个函数库文件由多个文件组成。你可以以如下格式指定函数库文件及其组成…...