Java:File类详解

文章目录

    • 1、概述
    • 2、创建File实例
    • 3、常用方法
      • 3.1 获取功能的方法
      • 3.2 绝对路径和相对路径
      • 3.3 判断功能的方法
      • 3.4 创建删除功能的方法
      • 3.5 文件过滤功能的方法
    • 4、文件夹的遍历
    • 5、综合练习
      • 5.1 创建文件夹
      • 5.2 查找文件(不考虑子文件夹)
      • 5.3 查找文件(考虑子文件夹)
      • 5.4 删除多级文件夹
      • 5.5 统计大小
      • 5.6 统计文件个数

1、概述

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

2、创建File实例

可以通过如下的构造方法创建File实例。

  • public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
  • public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。

代码示例:

public class FileDemo01 {public static void main(String[] args) {//1.根据字符串表示的路径,变成File对象String str = "C:\\Users\\yagote\\Desktop\\a.txt";File f1 = new File(str);System.out.println(f1);     //C:\Users\yagote\Desktop\a.txt//2.父级路径:C:\Users\yagote\Desktop,子级路径:a.txtString parent = "C:\\Users\\yagote\\Desktop";String child = "a.txt";File f2 = new File(parent,child);System.out.println(f2);     //C:\Users\yagote\Desktop\a.txtFile f3 = new File(parent + "\\" + child);System.out.println(f3);     //C:\Users\yagote\Desktop\a.txt//3.把一个File表示的路径和String表示路径进行拼接File parent2 = new File("C:\\Users\\yagote\\Desktop");String child2 = "a.txt";File f4 = new File(parent2,child2);System.out.println(f4);     //C:\Users\yagote\Desktop\a.txt}
}

image-20240103105206086

注:

  • 一个File对象代表硬盘中实际存在的一个文件或者目录。
  • 无论该路径下是否存在文件或者目录,都不影响File对象的创建。

3、常用方法

3.1 获取功能的方法

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。

  • public String getPath() :将此File转换为路径名字符串。

  • public String getName() :返回由此File表示的文件或目录的名称,带后缀。

  • public long length() :返回由此File表示的文件的长度(字节数量)。

  • public long lastModified() :返回文件的最后修改时间(时间毫秒值)。

  • public static File[] listRoots() : 返回可用的文件系统根。

代码示例:

public class FileDemo03 {public static void main(String[] args) {/*** 1.length  返回文件的大小(字节数量)* 细节1:这个方法只能获取文件的大小,单位是字节* 细节2:这个方法无法获取文件夹的大小* 如果我们要获取一个文件夹的大小,需要把这个文件夹里面所有的文件大小都累加在一起。*/System.out.println("----------文件大小----------");File f1 = new File("D:\\aaa\\a.txt");long len = f1.length();System.out.println(len);System.out.println("----------文件夹大小:不能获取文件夹的大小----------");File f2 = new File("D:\\aaa\\bbb");long len2 = f2.length();System.out.println(len2);   //0System.out.println("----------文件绝对路径----------");//2.getAbsolutePath 返回文件的绝对路径File f3 = new File("D:\\aaa\\a.txt");String path1 = f3.getAbsolutePath();System.out.println(path1);File f4 = new File("my-file/a.txt");String path2 = f4.getAbsolutePath();System.out.println(path2);//3.getPath 返回定义文件时使用的路径System.out.println("----------getPath定义文件时使用的路径----------");File f5 = new File("D:\\aaa\\a.txt");String path3 = f5.getPath();System.out.println(path3);  //D:\aaa\a.txtFile f6 = new File("my-file/a.txt");String path4 = f6.getPath();System.out.println(path4);//myFile\a.txt/*** 4.getName 获取名字* 细节1:* a.txt:*       a 文件名*       txt 后缀名、扩展名* 细节2:* 文件夹:返回的就是文件夹的名字*/System.out.println("----------getName获取文件名,带后缀----------");File f7 = new File("D:\\aaa\\a.txt");String name1 = f7.getName();System.out.println(name1);System.out.println("----------getName获取文件夹名称----------");File f8 = new File("D:\\aaa\\bbb");String name2 = f8.getName();System.out.println(name2);//bbb//5.lastModified  返回文件的最后修改时间(时间毫秒值)System.out.println("----------返回文件的最后修改时间(时间毫秒值)----------");File f9 = new File("D:\\aaa\\a.txt");long time = f9.lastModified();System.out.println(time);//6.listRoots  获取系统中所有的盘符System.out.println("-----------listRoots返回可用的文件系统根--------------");File[] arr = File.listRoots();System.out.println(Arrays.toString(arr));}
}

image-20240103141634146

API中说明:length(),表示文件的长度。如果File对象表示文件夹,则返回值0。

3.2 绝对路径和相对路径

  • 绝对路径:从盘符开始的路径,这是一个完整的路径。
  • 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。
public class FilePath {public static void main(String[] args) {// D盘下的bbb.java文件File f = new File("D:\\bbb.java");System.out.println(f.getAbsolutePath());// 项目下的bbb.java文件File f2 = new File("bbb.java");System.out.println(f2.getAbsolutePath());}
}
输出结果:
D:\bbb.java
D:\idea_project_test4\bbb.java

3.3 判断功能的方法

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。

代码示例:

D:.
├─aaa
│  │  a.txt
│  │
│  └─bbb
│        b.txt
public class FileDemo02 {public static void main(String[] args) {//1.对一个文件的路径进行判断File f1 = new File("D:\\aaa\\a.txt");System.out.println(f1.isDirectory());//falseSystem.out.println(f1.isFile());//trueSystem.out.println(f1.exists());//trueSystem.out.println("--------------------------------------");//2.对一个文件夹的路径进行判断File f2 = new File("D:\\aaa\\bbb");System.out.println(f2.isDirectory());//trueSystem.out.println(f2.isFile());//falseSystem.out.println(f2.exists());//trueSystem.out.println("--------------------------------------");//3.对一个不存在的路径进行判断File f3 = new File("D:\\aaa\\c.txt");System.out.println(f3.isDirectory());//falseSystem.out.println(f3.isFile());//falseSystem.out.println(f3.exists());//false}
}

image-20240103111430266

3.4 创建删除功能的方法

  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • public boolean delete() :删除由此File表示的文件或目录。
  • public boolean mkdir() :创建由此File表示的目录。
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

方法演示,代码如下:

public class FileDemo04 {public static void main(String[] args) throws IOException {/*** 1.createNewFile 创建一个新的空的文件* 细节1:如果当前路径表示的文件是不存在的,则创建成功,方法返回true*       如果当前路径表示的文件是存在的,则创建失败,方法返回false* 细节2:如果父级路径是不存在的,那么方法会有异常IOException* 细节3:createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件*/System.out.println("---------createNewFile创建文件----------");File f1 = new File("D:\\aaa\\c.txt");boolean b1 = f1.createNewFile();System.out.println(b1);  //true/*** 2.mkdir   make Directory,文件夹(目录)* 细节1:windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false* 细节2:mkdir方法只能创建单级文件夹,无法创建多级文件夹。*/System.out.println("---------mkdir创建单级文件夹----------");File f2 = new File("D:\\ddd");boolean b2 = f2.mkdir();System.out.println(b2);/*** 3.mkdirs   创建多级文件夹* 细节:既可以创建单级的,又可以创建多级的文件夹*/System.out.println("---------mkdirs创建(多级)文件夹----------");File f3 = new File("D:\\aaa\\ccc\\ddd");boolean b3 = f3.mkdirs();System.out.println(b3);//true//4.删除文件、空文件System.out.println("---------delete删除文件、空文件夹----------");// 文件的删除System.out.println(f1.delete());// true// 目录的删除System.out.println(f2.delete());// trueFile f4 = new File("D:\\aaa\\bbb");System.out.println(f4.delete());// false,不能删除非空文件夹}
}

image-20240103113046849

API中说明:delete方法,如果此File表示文件夹,则文件夹必须为空才能删除,如果删除的是有内容(比如有文件夹或文件)的文件夹,则删除失败。

3.5 文件过滤功能的方法

  • public String[] list(FilenameFilter filter):利用文件名过滤器获取当前该路径下所有内容
  • public File[] listFiles(FileFilter filter):利用文件名过滤器获取当前该路径下所有内容
  • public File[] listFiles(FilenameFilter filter):利用文件名过滤器获取当前该路径下所有内容
  • public String[] list():获取当前该路径下所有内容
  • (掌握)public File[] listFiles(): 获取当前该路径下所有内容

代码示例:

需求:获取D:\\aaa文件夹里面所有的txt文件
public class FileDemo07 {public static void main(String[] args) {//创建File对象File f = new File("D:\\aaa");/*** 1.调用list(FilenameFilter filter)** accept方法的形参,依次表示aaa文件夹里面每一个文件或者文件夹的路径* 参数一:父级路径* 参数二:子级路径* 返回值:如果返回值为true,就表示当前路径保留*        如果返回值为false,就表示当前路径舍弃不要*/System.out.println("-----------String[] list(FilenameFilter filter)--------------");String[] arr1 = f.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File src = new File(dir,name);return src.isFile() && name.endsWith(".txt");}});System.out.println(Arrays.toString(arr1));//2.调用listFiles(FileFilter filter)System.out.println("-----------File[] listFiles(FileFilter filter)--------------");File[] arr2 = f.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.isFile() && pathname.getName().endsWith(".txt");}});System.out.println(Arrays.toString(arr2));//3.调用listFiles(FilenameFilter filter)System.out.println("-----------File[] listFiles(FilenameFilter filter)--------------");File[] arr3 = f.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File src = new File(dir, name);return src.isFile() && name.endsWith(".txt");}});System.out.println(Arrays.toString(arr3));//4.调用list()System.out.println("-----------String[] list()--------------");File f1 = new File("D:\\aaa");String[] arr4 = f1.list();for (String s : arr4) {if(s.endsWith(".txt")){System.out.println(s);}}//5.调用listFiles()System.out.println("-----------File[] listFiles()--------------");File[] arr = f.listFiles();for (File file : arr) {//file依次表示aaa文件夹里面每一个文件或者文件夹的路径if(file.isFile() && file.getName().endsWith(".txt")){System.out.println(file);}}}
}

image-20240103142738334

4、文件夹的遍历

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录,只获取文件或文件夹的名称,如果该目录下有文件夹,不会进入遍历该文件夹。
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录,获取文件或文件夹的绝对路径,如果该目录下有文件夹,不会进入遍历该文件夹。 如果没有权限进入文件夹,则会返回null。
D:.
├─aaa
│  │ a.txt
│  │
│  ├─bbb
│  │     b.txt
│  │
│  └─ccc
│      └─ddd
│            c.txt
public class FileDemo06 {public static void main(String[] args) {//1.创建File对象File f = new File("D:\\aaa");/*** 2.list方法* 获取当前目录下的文件以及文件夹的名称*/System.out.println("-----------list方法------------");String[] names = f.list();for(String name : names){System.out.println(name);}/*** 3.listFiles方法* 作用:获取aaa文件夹里面的所有内容,把所有的内容放到数组中返回* 获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息*/System.out.println("----------listFiles方法-----------");File[] files = f.listFiles();for (File file : files) {//file依次表示aaa文件夹里面的每一个文件或者文件夹System.out.println(file);}}
}

image-20240103135853052

小贴士:

调用listFiles方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历。

5、综合练习

5.1 创建文件夹

需求:在当前模块下的aaa文件夹中创建一个a.txt文件。

代码实现:

public class Test01 {public static void main(String[] args) throws IOException {//需求:在当前模块下的aaa文件夹中创建一个a.txt文件//1.创建a.txt的父级路径File file = new File("my-file\\aaa");//2.创建父级路径//如果aaa是存在的,那么此时创建失败的。//如果aaa是不存在的,那么此时创建成功的。file.mkdirs();//3.拼接父级路径和子级路径File src = new File(file,"a.txt");boolean b = src.createNewFile();if(b){System.out.println("创建成功");}else{System.out.println("创建失败");}}
}

image-20240103143330135

image-20240103143351032

5.2 查找文件(不考虑子文件夹)

需求:定义一个方法找某一个文件夹中,是否有以avi结尾的电影(暂时不需要考虑子文件夹)。

代码示例:

public class Test02 {public static void main(String[] args) {File file = new File("D:\\aaa\\bbb");boolean b = haveAVI(file);System.out.println(b);}/*** 作用:用来找某一个文件夹中,是否有以avi结尾的电影* 形参:要查找的文件夹* 返回值:查找的结果  存在true  不存在false*/public static boolean haveAVI(File file){// D:\\aaa//1.进入aaa文件夹,而且要获取里面所有的内容File[] files = file.listFiles();//2.遍历数组获取里面的每一个元素for (File f : files) {//f:依次表示aaa文件夹里面每一个文件或者文件夹的路径if(f.isFile() && f.getName().endsWith(".avi")){return true;}}//3.如果循环结束之后还没有找到,直接返回falsereturn false;}
}

image-20240103143750596

image-20240103143808858

5.3 查找文件(考虑子文件夹)

需求:找到电脑中所有以avi结尾的电影(需要考虑子文件夹)。

代码示例:

public class Test03 {public static void main(String[] args) {findAVI();}public static void findAVI(){//获取本地所有的盘符File[] arr = File.listRoots();for (File f : arr) {findAVI(f);}}public static void findAVI(File src){//1.进入文件夹srcFile[] files = src.listFiles();//2.遍历数组,依次得到src里面每一个文件或者文件夹if(files != null){for (File file : files) {if(file.isFile()){//3,判断,如果是文件,就可以执行题目的业务逻辑String name = file.getName();if(name.endsWith(".avi")){System.out.println(file);}}else{//4,判断,如果是文件夹,就可以递归//细节:再次调用本方法的时候,参数一定要是src的次一级路径findAVI(file);}}}}
}

image-20240103144403382

5.4 删除多级文件夹

需求: 如果我们要删除一个有内容的文件夹
1.先删除文件夹里面所有的内容
2.再删除自己

代码示例:

image-20240103145433275

public class Test04 {public static void main(String[] args) {File file = new File("D:\\aaa\\ccc");delete(file);System.out.println("删除成功");}/*** 作用:删除src文件夹* 参数:要删除的文件夹*/public static void delete(File src){//1.先删除文件夹里面所有的内容//srcFile[] files = src.listFiles();//遍历for (File file : files) {//判断,如果是文件,删除if(file.isFile()){file.delete();}else {//判断,如果是文件夹,就递归delete(file);}}//2.再删除自己src.delete();}
}

image-20240103145607463

5.5 统计大小

需求:统计一个文件夹的总大小。

代码示例:

public class Test05 {public static void main(String[] args) {//需求:统计一个文件夹的总大小File file = new File("D:\\aaa");long len = getLen(file);System.out.println(len);}/*** 作用:统计一个文件夹的总大小* 参数:表示要统计的那个文件夹* 返回值:统计之后的结果* 文件夹的总大小:其实就是统计文件夹里面所有文件的大小*/public static long getLen(File src){//1.定义变量进行累加long len = 0;//2.进入src文件夹File[] files = src.listFiles();//3.遍历数组for (File file : files) {//4.判断if(file.isFile()){//我们就把当前文件的大小累加到len当中len = len + file.length();}else{//判断,如果是文件夹就递归len = len + getLen(file);}}return len;}
}

image-20240103150610333

5.6 统计文件个数

需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)
打印格式如下:
txt:3个
doc:4个
jpg:6个
……

代码示例:

public class Test06 {public static void main(String[] args) throws IOException {/*需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)打印格式如下:txt:3个doc:4个jpg:6个...*/File file = new File("D:\\aaa");HashMap<String, Integer> hm = getCount(file);System.out.println(hm);}/*** 作用:统计一个文件夹中每种文件的个数* 参数:要统计的那个文件夹* 返回值:*       用来统计map集合*       键:后缀名 值:次数*       a.txt*       a.a.txt*       aaa(不需要统计的)*/public static HashMap<String,Integer> getCount(File src){//1.定义集合用来统计HashMap<String,Integer> hm = new HashMap<>();//2.进入src文件夹File[] files = src.listFiles();//3.遍历数组for (File file : files) {//4.判断,如果是文件,统计if(file.isFile()){//a.txtString name = file.getName();// 获取文件后缀名String[] arr = name.split("\\.");if(arr.length >= 2){String endName = arr[arr.length - 1];if(hm.containsKey(endName)){//存在int count = hm.get(endName);count++;hm.put(endName,count);}else{//不存在hm.put(endName,1);}}}else{//5.判断,如果是文件夹,递归//sonMap里面是子文件中每一种文件的个数HashMap<String, Integer> sonMap = getCount(file);//hm:  txt=1  jpg=2  doc=3//sonMap: txt=3 jpg=1//遍历sonMap把里面的值累加到hm当中Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();for (Map.Entry<String, Integer> entry : entries) {String key = entry.getKey();int value = entry.getValue();if(hm.containsKey(key)){//存在int count = hm.get(key);count = count + value;hm.put(key,count);}else{//不存在hm.put(key,value);}}}}return hm;}
}

image-20240103151352816

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

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

相关文章

一些数字设计及验证的笔试题(6)

一些数字设计及验证的笔试题汇总&#xff0c;仅供参考。 文章目录 一、什么是亚稳态&#xff1f;如何改善&#xff1f; 二、C语言下列关系符号中&#xff0c;优先级最低的是哪个&#xff1f; 三、下面哪种不属于Vim编辑器的工作模式&#xff1f; 四、在以下的哪个timescale…

python爬虫,简单的requests的get请求,百度搜索实例

1、百度搜索实例 import requests url https://www.baidu.com/s? # key_word 迪丽热巴 key_word input(输入搜索内容&#xff1a;) headers {User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537…

来瞅瞅Java 11都有啥新特性

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff01;今天小黑要和咱们聊聊Java 11&#xff0c;这个在Java发展史上占有一席之地的版本。说起Java&#xff0c;咱们都知道&#xff0c;它是一门历史悠久又持续发展的编程语言。Java不仅因其“一次编写&#xff0c;到处…

Sentinel限流熔断

官网&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html github文档&#xff1a;https://github.com/alibaba/Sentinel/wiki Sentinel 是一款面向分布式服务架构的轻量级流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、 熔断降级 、系…

百度地图打点性能优化(海量点、mapv)

文章目录 百度地图打点性能优化&#xff08;海量点、mapv&#xff09;原因优化方法数据获取方面页面加载方面 参考资料 百度地图打点性能优化&#xff08;海量点、mapv&#xff09; 原因 在百度地图api中&#xff0c;默认的点是下图的红点 而这种点位比较多的时候&#xff0c…

61、python - 手写卷积、bn、池化、全连接、激活、ResBlock

这篇算是一个总结,之前的原理部分在介绍各个算法时候,已经加入了每个算法的代码编写介绍。 给出的示例是用 python 语法来实现的,也是实现的最基础的版本,这也是我们手写算法的初衷:不调用其他的三方库,从最基础的手写算法开始,一步步完成算法实现和性能优化,这样可以…

ElasticSearch学习笔记-SpringBoot整合Elasticsearch7

项目最近需要接入Elasticsearch7&#xff0c;顺带记录下笔记。 Elasticsearch依赖包版本 <properties><elasticsearch.version>7.9.3</elasticsearch.version><elasticsearch.rest.version>7.9.3</elasticsearch.rest.version> </propertie…

Windows找不到文件‘chrome‘,请确定文件名是否正确后,再试一次。

本文主要记录遇到vscode运行HTML文件提示&#xff1a; Windows找不到文件‘chrome‘&#xff0c;请确定文件名是否正确后&#xff0c;再试一次。问题的解决办法。 目录 一、打开设置 二 、搜索Live Server Config &#xff08;1&#xff09;安装Live Server插件 &#xff0…

如何使用gflags.exe查看内存来源

使用 gflags.exe 工具并不能直接查看内存的来源&#xff0c;即它不能告诉你某块内存是在哪个函数调用或代码行中分配的。然而&#xff0c;gflags 可以结合其他调试工具帮助你检测和分析内存问题&#xff0c;如内存泄漏、堆溢出等。 例如&#xff0c;如果你想追踪某个进程的内存…

asp网站代码层面实现防cc攻击

CC主要是用来攻击页面的.大家都有这样的经历&#xff0c;就是在访问论坛时&#xff0c;如果这个论坛比较大&#xff0c;访问的人比较多&#xff0c;打开页面的速度会比较慢&#xff0c;对不?!一般来说&#xff0c;访问的人越多&#xff0c;论坛的页面越多&#xff0c;数据库就…

Unity ab包如何加密

「ab包」全称为 AssetBundle &#xff0c;是Unity提供的一种资源存储压缩包。其中储存了游戏的资源&#xff0c;如图片、模型、纹理、音视频、代码等文件。 由于ab包具有灵活储存、支持热更、包体较小且便于管理等优势&#xff0c;已经成为了市面上主流的游戏资源压缩方式。 …

服务器维护日常的工作有哪些内容

服务器维护是确保服务器正常运行&#xff0c;保障数据安全和系统稳定的重要工作&#xff0c;小德将从硬件检查、系统监控、故障排查、备份恢复等方面介绍服务器维护的日常工作内容。 一、硬件检查 1. 检查服务器的电源线、网线、硬盘等连接是否正常&#xff0c;确保设备完好无…

编译原理Lab4-使用LightIR框架自动产生cminus-f语言的LLVM IR

[[#实验框架|实验框架]][[#实验过程|实验过程]] [[#实验过程#全局变量的设计|全局变量的设计]][[#实验过程#1ASTProgram|1ASTProgram]][[#实验过程#2ASTNum|2ASTNum]][[#实验过程#3ASTVarDeclaration|3ASTVarDeclaration]][[#实验过程#4ASTFunDeclaration|4ASTFunDeclaration]]…

LeetCode每日一题 | 383. 赎金信

文章目录 LeetCode-383. 赎金信题目描述问题分析程序代码&#xff08;Golang 版本&#xff09; LeetCode-383. 赎金信 题目描述 原题链接 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#…

【代码片段】Linux C++打印当前函数调用堆栈

在开发大型项目时&#xff0c;尤其是多线程情况下&#xff0c;一般无法使用断点调试&#xff0c;这时候将当前函数的调用堆栈打印出来是非常有必要和有效的问题排查手段。 这里记录一段Linux环境下&#xff0c;打印函数堆栈的代码。 void get_native_callstack(std::string &a…

【ThreeJS入门——】WEB 3D可视化技术——threejs

简介 网页上已经可以做出很多复杂的动画&#xff0c;精美的效果。下图就是通过WebGL在网页中绘制高性能的3D图形。 threejs是一个让用户通过javascript入手进入搭建webgl项目的类库。 1、搭建第一个场景和物体 三维的物体要渲染在二维的屏幕上。首先要创建一个场景来放置物体…

c++学习第八讲---类和对象---继承

继承&#xff1a; 使子类&#xff08;派生类&#xff09;拥有与父类&#xff08;基类&#xff09;相同的成员&#xff0c;以节约代码量。 1.继承的基本语法&#xff1a; class 子类名&#xff1a;继承方式 父类名{} &#xff1b; 例&#xff1a; class father { public:in…

计算机毕业设计 | SpringBoot+vue移动端音乐网站 音乐播放器(附源码)

1&#xff0c;项目背景 随着计算机技术的发展&#xff0c;网络技术对我们生活和工作显得越来越重要&#xff0c;特别是现在信息高度发达的今天&#xff0c;人们对最新信息的需求和发布迫切的需要及时性。为了满足不同人们对网络需求&#xff0c;各种特色&#xff0c;各种主题的…

Plantuml之nwdiag网络图语法介绍(二十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【JUC】Volatile关键字+CPU/JVM底层原理

Volatile关键字 volatile内存语义 1.当写一个volatile变量时&#xff0c;JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中。 2.当读一个volatile变量时&#xff0c;JMM会把该线程对应的本地内存设置为无效&#xff0c;直接从主内存中读取共享变量 所以volatile…