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

Java文件IO

文章目录

  • Java中的文件操作
    • File
      • 常用构造方法
      • 方法
    • 文件内容的读写——数据流
        • InputStream
        • FileInputStream
        • 利用Scanner进行字符读取
        • OutputStream
      • PrintWriter
      • 按字符读取文件(FileReader)
      • 练习
      • 代码实例
        • 如何按字节进行数据读
        • 如何按字节进行数据写
        • 如何按字符进行数据读
        • 如何按字符进行数据写


Java中的文件操作

在Java中,一般谈到文件,都是指一个存在磁盘上的文件(狭义的文件),抛开Java,站在系统的角度来看,操作系统在管理很多软件资源和硬件设备的时候,都是把这些东西抽象成了一个一个的文件了,这也是系统中典型的"一切皆文件"的思想。

狭义的文件,可以分为两类

  1. 普通文件
  2. 目录文件(文件夹)

在Java标准库java.io下提供了一个File类来对文件(包括目录)进行了抽象描述,注意:有File对象并不表示File对象的文件一定存在。

File

常用构造方法

构造方法说明
File(File parent,String child)根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname)根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径
File(String parent,String child)根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示

绝对路径:可以简单理解为带有盘符的

相对路径:基于当前位置的路径一般以 . 或 … 开头,.\表示当前路径,…\表示上一级路径

方法

返回值类型方法名说明
StirnggetParent()返回 File 对象的父目录文件路径
StringgetName()返回 FIle 对象的纯文件名称
StringgetPath返回 File 对象的文件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的文件是否真实存在
booleanisDirectory()判断 File 对象代表的文件是否是一个目录
booleanisFile()判断 File 对象代表的文件是否是一个普通文件
booleancreateNewFile()根据 File 对象,自动创建一个空文件。成功创建后返回 true
booleandelete()根据 File 对象,删除该文件。成功删除后返回 true
booleandeleteOnExit()根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行
String[]list返回 File 对象代表的目录下的所有文件名
File[]listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象表示
booleanmkdir()创建 File 对象代表的目录
booleanmkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录
booleanrenameTo(File dest)进行文件改名,也可以视为我们平时的剪切、粘贴操作
booleancanRead()判断用户是否对文件有可读权限
booleananWrite()判断用户是否对文件有可写权限

所谓的文件移动(剪切粘贴),对于操作系统来说,其实是一个非常高效的操作。每个文件都有个属性,这个属性里就包括了文件的路径,移动操作其实只是修改了文件的路径属性而已。

所谓的文件复制(复制粘贴),对于操作系统来说,很可能是一个非常低效的操作。就需要把文件的内容都读读出来,然后再拷贝一份,写入磁盘中。如果文件比较大,复制粘贴的开销就比较大了

经典面试题

给你一个list方法,如何遍历一个目录中所有的文件(包含子目录中的文件)

public class TestDemo {private static List<String> result = new ArrayList<>();public static void printAllFile(String path) {File file = new File(path);//判读这个路径是否真实存在if (file.exists()) {File[] files = file.listFiles();for (File f : files) {//如果是普通文件if (f.isFile()) {result.add(f.getName());} else if (f.isDirectory()) {//如果是目录文件printAllFile(f.getPath());} else {//其它文件..(管道)}}}}public static void main(String[] args) {printAllFile("./");for (String s : result) {System.out.println(s);}}
}

文件内容的读写——数据流

在Java标准库中,读写文件相关的类,有很多。

InputStream/FileInputStream

文件读取操作,按照字节为单位进行读文件

OutputStream/FileOutputStream

文件写入操作,按照字节为单位进行写文件

InputStream

返回值类型方法名说明
intread()读取一个字节的数据以整数形式放回,返回-1代表已经读取完了
intread(byte[] b)最多读取 b.length 字节的数据到 b 中,返回实际读取到的数量,返回-1代表已经读取完了
intread(byte[] b,int off,int len)最多读取 len - off 个字节的数据到 b 中,放在从off开始,返回实际读取的数量,-1代表已经读取完毕
voidclose()关闭字节流

注意:使用流对象,读写完文件之后,一定要及时关闭,如果没有关闭,就可能造成资源泄露

FileInputStream

构造方法说明
FileInputStream(File file)利用 File 构造文件输入流
FileInputStream(String name)利用文件路径构造文件输入流
public class Main {public static void main(String[] args) throws IOException {//这种写法更好try (InputStream inputStream = new FileInputStream(".\\.\\.\\test.txt")) {while (true) {int len = inputStream.read();if (len == -1) {break;}System.out.printf("%c",len);}}catch (IOException e) {e.printStackTrace();}}public static void main1(String[] args) throws IOException {InputStream inputStream = null;try {//创建实例就相当与在打开文件inputStream = new FileInputStream("./././test.txt");//通过逐个字节的方式把文件内容读取出来while (true) {//read无参版本默认每次读取一个字节//无参版本的read。返回值就是每次读取的字节//这个返回值就是 0~255int len = inputStream.read();//如过读到文件末尾(EOF)就会返回 -1if (len == -1) {break;}System.out.printf("%c",len);}} catch (IOException e) {e.printStackTrace();}finally {try {//关闭inputStream.close();} catch (IOException e) {e.printStackTrace();}}}
}

InputStream只是一个抽象类,要使用还需要具体的实现类,关于InputStream实现类有很多,基本可以认为不同的输入设备上都可以对应一个InputStream类,我们现在只关心从文件中读取,所有使用FileInputStream。它继承于InputStream。

注意:如果FileInputStream的创建写到 try()的括号里,就不需要手动close了,等代码执行完毕后会自动close.只要实现了Closeable接口就可以放到try里.

还可以利用byte数组来读取文件内容

public static void main(String[] args) {try (InputStream inputStream = new FileInputStream("./././test.txt")) {while (true) {byte[] bytes = new byte[1024];int len = inputStream.read(bytes);if (len == -1) {break;}String s = new String(bytes,0,len);System.out.println(s);}} catch (IOException e) {e.printStackTrace();}}

利用Scanner进行字符读取

上面的读取方法,直接使用InputStream进行读取是比较麻烦的,这个时候就可以使用常用的Scanenr类来进行读取

构造方法说明
Scanner(InputStream is, String charset)使用 charset 字符集进行 is 的扫描读取
public static void main(String[] args) {//如果要从文件读取出中文,借出 Scanner 就可以从文件中读取try (InputStream inputStream = new FileInputStream("./././test.txt")){//这中写法就不用调用 Scanner的 close 方法try (Scanner sc = new Scanner(inputStream,"utf-8")) {while (sc.hasNext()) {String str = sc.next();System.out.print(str);}}} catch (IOException e) {e.printStackTrace();}}

OutputStream

返回值方法说明
voidwrite(int b)文件写入,指定字节数据
voidwrite(byte[] b)将b这个字符数组中的全部数据写入输出流中
intwrite(byte[] b,int off,int len)将 b 这个字符数组中从 off 开始的数据写入 输出流中,一共写 len 个
voidclose()闭此输出流并释放与此流相关联的任何系统资源
voidfluch()强制刷新缓冲区

我们知道I/O的速度是很慢的,所以,大多的OutputStream为了减少设备操作的次数,为了提高效率,就可以减少直接访问磁盘的次数。使用缓冲区,就能很好的解决这个问题。

缓冲区其实是一段内存空间(这个内存是OutputStream里自带的),当我们使用write方法来写数据的时候,并不是直接把数据写到磁盘上,而是先放到缓冲区(内存中),如果缓冲区满了,或者手动调用flush,猜真的会把数据写到磁盘上。

内存和磁盘之间的缓冲区,往往是一个内存空间

CPU和内存之间,其实也有缓冲区(L1,L2,L3,cache)

代码实例:

public static void main(String[] args) {//一旦按照 OutputStream 的方式打开文件,就会把文件的原来的内容给清空try (OutputStream outputStream = new FileOutputStream("./././test.txt")) {/* 写入一个字符outputStream.write('h');outputStream.write('e');*///按照字节来写入byte[] buffer = new byte[] {'a','b','c','d'};//outputStream.write(buffer);//按照字符串来写入String s = "你好世界 !";//将String 转换成 byte数组,指定字符串为 UTF-8outputStream.write(s.getBytes("UTF-8"));//刷新缓冲区outputStream.flush();}catch (IOException e) {e.printStackTrace();}}

PrintWriter

PrintWriter 类中提供了我们熟悉的 print/println/printf 方法

public static void main(String[] args) {try (OutputStream outputStream = new FileOutputStream("./././test.txt")) {//利用 PrintWriter 类来包装一下 OutputStream 然后可以更方便的进行读写try (PrintWriter writer = new PrintWriter(outputStream)) {writer.println("这是第一行");writer.println("这是第二行");writer.println(200+300);writer.println("这一行是数字"+1024);}outputStream.flush();}catch (IOException e) {e.printStackTrace();}}

按字符读取文件(FileReader)

public static String readFile(String filePath) {StringBuilder result = new StringBuilder();try (FileReader fileReader = new FileReader(filePath)) {while (true) {//返回的是一个字符,但是不可能有负数,用int才能装下int ch = fileReader.read();if (ch == -1) {break;}result.append((char)ch);}} catch (IOException e) {e.printStackTrace();}return result.toString();}

练习

练习1:指定一个目录,扫描这个目录,找到文件名中包含了指定字符的文件.并提示用户是否要删除这个文件,根据用户的输入决定是否删除.

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//指定一个目录,扫描这个目录,找到文件名名中包含了指定字符的文件,并让用户选择是否要删除文件
public class TestDemo1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.print("请输入一个绝对路径 -> ");String rootPath = sc.next();//判断该路径是否存在File fileDir = new File(rootPath);if (!fileDir.exists()) {System.out.println("你输入的路径不正确,程序退出!");}//输入要查找的一个关键字System.out.println("请输入一个查找的关键字:");String keyWord = sc.next();//递归查找List<File> results = new ArrayList<>();KeyWordFindFile(fileDir,keyWord,results);//遍历结果判断是否需要删除for (File file : results) {System.out.println("是否删除文件(Y/N)"+file.getName());String input = sc.next();if (input.equals("Y")) {file.delete();System.out.println("删除成功");}}}/*** 递归查找文件名中包含关键字的文件* @param rootPath File对(绝对路径)* @param fileNameKeyWord 查找的关键字* @param result list*/private static void KeyWordFindFile(File rootPath,String fileNameKeyWord,List<File> result) {File[] files = rootPath.listFiles();for (File file : files) {if (file.isDirectory()) {//如果是目录就递归KeyWordFindFile(file,fileNameKeyWord,result);} else if (file.isFile()) {//判断文件名是否包含关键字if (file.getName().contains(fileNameKeyWord)) {result.add(file);}}}}
}

练习2:把文件复制到指定目录下

//把指定文件复制到另外一个路径,一定是文件public static void main(String[] args) throws IOException {System.out.print("请输要复制文件的绝对路径 -> ");Scanner sc = new Scanner(System.in);String originalPath = sc.next();//判断是否是文件File originalFile = new File(originalPath);if (!originalFile.isFile()) {System.out.println("输入文件绝对路径错误程序退出");return;}System.out.print("请输入文件要复制到的绝对路径(指定文件名) -> ");String targetPath = sc.next();File targetFile = new File(targetPath);//判断文件是否已经存在if (targetFile.exists()) {System.out.println("文件已存在,是否替换(Y/N)");String input = sc.next();if (input.equals("N")) {System.out.println("复制取消");return;}}//开始复制try (InputStream inputStream = new FileInputStream(originalFile);OutputStream outputStream = new FileOutputStream(targetFile)) {//一次性最多读取1024个字节byte[] bytes = new byte[1024];while (true) {int len = inputStream.read(bytes);if (len == -1) {break;}//读多少写多少outputStream.write(bytes,0,len);}//不flush也是可以的,在close后会自动flushoutputStream.flush();} catch (IOException e) {e.printStackTrace();}System.out.println("复制成功!");}

练习3:扫描指定目录,并找到 名称 或者内容中包含指定 字符 的所有普通文件(不包含目录)

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class TestDemo3 {//扫描指定目录,并找到 名称 或者内容中包含指定 字符 的所有普通文件(不包含目录)public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.print("请输入一个指定目录的绝对路径 -> ");String path = sc.next();File dirPath = new File(path);if (!dirPath.isDirectory()) {System.out.println("你输入的绝对路径不是一个目录。程序自动退出");return;}System.out.print("请输入一个要查找的关键字 -> ");String keyWord = sc.next();//递归遍历目录下的所有文件List<File> result = new ArrayList<>();getAllFile(dirPath,result,keyWord);for (File file : result) {System.out.println(file.getName());}}private static void getAllFile(File dirPath,List<File> result,String keyWord) {File[] files = dirPath.listFiles();if (files == null || files.length == 0) {return;}for (File file : files) {if (file.isDirectory()) {getAllFile(file,result,keyWord);} else if (file.isFile()) {//如果是文件就判断是否包含关键字if(containKeywords(file,keyWord)) {result.add(file);}}}}//判断文件内容是否包含关键字 keyWordprivate static boolean containKeywords(File file,String keyWord) {StringBuilder stringBuilder = new StringBuilder();//使用 Scanner 以UTF-8字符集读取try (InputStream inputStream = new FileInputStream(file);Scanner scanner = new Scanner(inputStream,"UTF-8")) {while (scanner.hasNext()) {String s = scanner.nextLine();stringBuilder.append(s);}} catch (IOException e) {e.printStackTrace();}return stringBuilder.indexOf(keyWord) != -1;}
}

代码实例

如何按字节进行数据读

try (InputStream input = new ...) {byte[] bytes = new byte[1024];while (true) {int len = input.read(bytes);if (len == -1) {break;}//0到len表示bytes读到的数据String reslult = new String(bytes,0,len);}
}

如何按字节进行数据写

try (OutputStream output = new ...) {byte[] bytes = new byte[1024];while (/* 还有未完成的业务数据 */) {// 将业务数据填入 buf 中,长度为 nint len = ...;output.write(bytes, 0, len);}output.flush();//刷新缓冲区
}

如何按字符进行数据读

try (InputStream is = ...) {try (Scanner scanner = new Scanner(is, "UTF-8")) {while (scanner.hasNextLine()) {String line = scanner.nextLine();// 根据 line 做业务处理}}
}

如何按字符进行数据写

try (OutputStream os = ...) {try (OutputStreamWriter osWriter = new OutputStreamWriter(os, "UTF-8")) {try (PrintWriter writer = new PrintWriter(osWriter)) {while (/* 还有未完成的业务数据 */) {writer.println(...);}writer.flush(); // 进行数据刷新操作}}
}

啥样的类可以放到 try()里,实现了 Closeble接口的就可以放入 try()里


相关文章:

Java文件IO

文章目录Java中的文件操作File常用构造方法方法文件内容的读写——数据流InputStreamFileInputStream利用Scanner进行字符读取OutputStreamPrintWriter按字符读取文件(FileReader)练习代码实例如何按字节进行数据读如何按字节进行数据写如何按字符进行数据读如何按字符进行数据…...

useSSL使用安全套接字协议(史上最全最详细)

useSSL使用安全套接字协议&#xff08;史上最全最详细&#xff09; SSL即为&#xff1a;Secure Sockets Layer 安全套接字协议。 useSSLfalse和useSSLtrue的区别&#xff1a; 在MySQL进行连接时&#xff1a; 如果MySQL的版本是5.7之后的版本必须要加上useSSLfalse&#xff0c…...

面向对象复习(2)

面向对象(2) 对象与引用 java语言中除基本类型之外的变量都称之为引用类型 java中的对象时通过引用对其操作的 Car bm new Car(); 右边的new Car是以Car类为模板,调用无参构造函数,在堆空间中创建一个Car对象 左边的Car bm 在栈中创建了一个Car类型的引用变量,所谓Car的…...

python中使用numpy包的向量矩阵相乘

一直对np的线性运算不太清晰&#xff0c;正好上课讲到了&#xff0c;做一个笔记整个理解一下 1.向量和矩阵 在numpy中&#xff0c;一重方括号表示的是向量vector&#xff0c;vector没有行列的概念。二重方括号表示矩阵matrix&#xff0c;有行列。 代码显示如下&#xff1a; …...

ElasticSearch 学习(一)

目录一、Elasticsearch 简介二、Elasticsearch 发展史三、Elasticsearch 功能四、Elasticsearch 特点五、Elasticsearch 应用场景一、Elasticsearch 简介 Elasticsearch 是一个实时的分布式搜索分析引擎&#xff0c;它能让你以前所未有的速度和规模&#xff0c;去探索你的数据…...

【新】华为OD机试 - 交换字符(Python)| 刷完获取OD招聘渠道

交换字符 题目 给定一个字符串 S 变化规则: 交换字符串中任意两个不同位置的字符 M S 都是小写字符组成 1 <= S.length <= 1000 输入 一串小写字母组成的字符串 输出 按照要求变换得到最小字符串 示例一 输入 abcdef输出 abcdef示例二 输入 bcdefa输出 acde…...

手把手教你解决传说中的NPE空指针异常

1. 前言最近有好几个初学java的小伙伴&#xff0c;甚至是学习到了JavaWeb、框架阶段的小伙伴也跑来问壹哥&#xff0c;该如何解决Java中的NullPointerException空指针异常。因为NPE是初学者特别常见的典型异常&#xff0c;所以壹哥在这里专门写一篇文章&#xff0c;来手把手地教…...

【pytorch安装】conda安装pytorch无法安装cpu版本(完整解决过程)

问题描述 在安装pytorch过程中&#xff0c;发现最后验证torch时总是返回结果为False&#xff0c;结果翻上去发现自己安装的是cpu版本的。 然后又通过conda去更换不同版本尝试&#xff0c;发现都是cpu版本的。 问题分析 通过conda安装pytorch是从源中搜索匹配指令中的文件&am…...

云计算ACP云服务器ECS实例题库

&#x1f618;作者简介&#xff1a;一名99年软件运维应届毕业生&#xff0c;正在自学云计算课程。&#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。&…...

面试题:作用域、变量提升、块级作用域、函数作用域、暂存性死区、var和let的区别

<script>var a 10;(function () {console.log(a)a 5console.log(window.a)var a 20;console.log(a)})() </script> 上述代码&#xff1a; 1、主要是涉及到变量提升和函数作用域&#xff0c;var a20这行代码会在函数作用域中提升var a 至最顶部&#xf…...

JAVA练习49-爬楼梯

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-爬楼梯 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 2月13日练习内容…...

深兰科技机器人商丘制造基地正式投产,助力商丘经济高质量发展

2月9日&#xff0c;深兰科技机器人商丘制造基地投产仪式在商丘市梁园区北航创新园隆重举行。商丘市人大常委会副主任、梁园区委书记张兵&#xff0c;梁园区区长薛天江、河南省装备制造业协会会长张桦&#xff0c;河南省机器人行业协会会长王济昌&#xff0c;深兰科技集团董事长…...

ES倒排索引/查询、写入流程

ES学习笔记 Elasticsearch学习笔记_巨輪的博客-CSDN博客 Elasticsearch学习之图解Elasticsearch中的_source、_all、store和index属性_BUse的博客-CSDN博客 倒排索引 倒排索引&#xff1a;ES倒排索引底层原理及FST算法的实现过程_es fst_Elastic开源社区的博客-CSDN博客 【…...

2023软考考哪个证书好?

软考有三个级别&#xff08;初级&#xff0c;中级和高级&#xff09;&#xff0c;这三个级别分别对应5个方向&#xff0c;下面这张图片呢&#xff0c;可以一目了然&#xff0c;一些小小建议&#xff01;&#xff01;&#xff01;遵循一个原则&#xff1a;首先选专业对口的科目&…...

一般人我劝你不要自学软件测试!!!

本人5年测试经验&#xff0c;在学测试之前对电脑的认知也就只限于上个网&#xff0c;玩个办公软件。这里不能跑题&#xff0c;我为啥说&#xff1a;自学软件测试&#xff0c;一般人我还是劝你算了吧&#xff1f;因为我就是那个一般人&#xff01; 软件测试基础真的很简单&…...

docker/docker-compose 安装mysql5.7

目录使用docker安装mysql5.7docker普通安装docker生产环境安装使用docker-compose 安装注意注意一:docker-compose权限问题注意二:docker pull 找不到镜像使用docker安装mysql5.7 docker普通安装 docker pull mysql:5.7 # 启动容器 docker run -p 3306:3306 --name mysql -e …...

【C++设计模式】学习笔记(6):Bridge 桥模式

目录 简介动机(Motivation)模式定义结构(Structure)要点总结笔记结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金…...

Allegro如何批量快速修改复用好的模块操作指导

Allegro如何批量快速修改复用好的模块操作指导 在做PCB设计的时候,相同模块可以用reuse复用的功能,可以大大提升效率,但是模块需要修改的时候,其它模块也要跟着修改,逐个再去复用一遍比较费时间,Allegro支持批量快速修改复用好的模块 前提是相同模块必须是相同的mdd文件…...

让我百思不得其解的infer究竟是怎么推导类型的?

情景再现 有这么一个条件类型的基本语法: T extends U ? X : Y; 如果占位符类型U是一个可以被分解成几个部分的类型&#xff0c;譬如数组类型&#xff0c;元组类型&#xff0c;函数类型&#xff0c;字符串字面量类型等。这时候就可以通过infer来获取U类型中某个部分的类型。 …...

E8-怎么实现根据表单内容自动生成标题

背景 可能有些小伙伴看到这个话题&#xff0c;觉得非常简单&#xff0c;在发起人步骤设置标题可编辑&#xff0c;在有关的控件中设置事件去更新标题就可以了呗。但如果想要标题字段里包含编号呢&#xff0c;而编号是在具体路径的高级设置里设置的&#xff0c;在某个出口生成的…...

《c语言深度解剖》--一套非常经典的笔试题

学习完c语言&#xff0c;需要对所学知识进行一个检测&#xff0c;下面有一套笔试题&#xff0c; 你有四十分钟进行检测&#xff0c;每道题五分&#xff0c;严格要求自己打分。 根据作者原话&#xff1a;在没有何提示的情况下,如果能得满分,那你可以扔掉本书了,因为你的水平已经…...

【数据结构与算法】单调队列 | 单调栈

&#x1f320;作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《数据结构与算法要啸着学》 &#x1f387;座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;…...

openh264解码h264视频帧主流程

一 解析一帧的入口int32_t WelsDecodeSlice (PWelsDecoderContext pCtx, bool bFirstSliceInLayer, PNalUnit pNalCur) {// 解码slicePDqLayer pCurDqLayer pCtx->pCurDqLayer;PFmo pFmo pCtx->pFmo;int32_t iRet;int32_t iNextMbXyIndex, iSliceIdc;PSlice pSlice &a…...

【个人笔记】C语言位域

一句话解释位域&#xff1a;指定结构体内变量的的位宽&#xff0c;从而节省空间 例子&#xff1a; #include <stdio.h> struct _test {int bit1:3; // 第一个字节0 ~ 2位 int :0; // 空域&#xff1a;表示第一个字节 3~7都为0int bit2:1; // 第二个字节第0位int :3;…...

ROS笔记(1)——ROS的核心概念

目录 节点与管理器 话题通信 服务通信 参数——全局共享字典 节点与管理器 节点——执行单元 &#xff08;1&#xff09;执行具体任务的进程、独立运行的可执行文件 &#xff08;2&#xff09;不同节点可使用不同的编程语言&#xff0c;可分布式运行在不同的主机 &#xff…...

动态SQL使用【JavaEE】

动态SQL使用 1. if 标签 判断一个参数是否有值&#xff0c;如果没值&#xff0c;那么就会隐藏 if 中的 sql 语法&#xff1a; <if test"username!null">username#{username} </if>表达式&#xff1a;username 的参数是否为空 如果结果为 true&#xff0c…...

leetcode刷题

1、stack栈相关 top()&#xff1a;返回一个栈顶元素的引用&#xff0c;类型为 T&。如果栈为空&#xff0c;返回值未定义。 push(const T& obj)&#xff1a;可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。 push(T&& obj)&#xff1…...

移动设备安全管理基础指南

什么是移动安全管理 &#xff08;MSM&#xff09; 移动安全管理是指为保护企业中的移动设备和企业数据而采取的行动。这些操作可以进一步被归类为反应性的或主动的&#xff0c;基于该操作是在数据和设备被破坏之前还是之后执行的。除了管理移动设备外&#xff0c;大多数MDM解决…...

【Java|多线程与高并发】 使用Thread 类创建线程的5种方法如何查看程序中的线程

文章目录前言线程创建1.继承Thread类重写run()方法如何查看程序中的线程?2.实现Runnable接口3.使用匿名内部类,继承Thread4.使用匿名内部类,实现Runnable5.⭐使用Lambda表达式,创建线程(重要)Thread 的常见构造方法总结前言 在这里主要补充说明一些问题,方便更好地理解下面的…...

零基础学MySQL(五)-- 详细讲解数据库中的常用函数

目录&#x1f387;一、聚合函数1️⃣count 函数&#xff08;1&#xff09;基本语法&#xff08;2&#xff09;基本练习&#xff08;3&#xff09;注意细节2️⃣sum 函数&#xff08;1&#xff09;基本语法&#xff08;2&#xff09;基本练习&#xff08;3&#xff09;注意细节3…...

宁波网站制作哪家优惠多/做百度推广的公司电话号码

一般说来&#xff0c;大家认为线程池的大小经验值应该这样设置&#xff1a;&#xff08;其中N为CPU的个数&#xff09;如果是CPU密集型应用&#xff0c;则线程池大小设置为N1如果是IO密集型应用&#xff0c;则线程池大小设置为2N1如果一台服务器上只部署这一个应用并且只有这一…...

新手做网站做那个/南宁seo外包靠谱吗

关于SSL/TLS介绍见文章 SSL/TLS原理详解。 关于证书授权中心CA以及数字证书等概念&#xff0c;请移步 OpenSSL 与 SSL 数字证书概念贴 。 openssl是一个开源程序的套件、这个套件有三个部分组成&#xff1a;一是libcryto&#xff0c;这是一个具有通用功能的加密库&#xff0c;里…...

优化网站和网站建设/昆山网站建设公司

CMPSC-121作业代做、代写C/C语言作业、代做Programming Techniques作业、代写C/C程序设计作业CMPSC-121: Intro to Programming Techniques (Fall 2018)Project 2 - Fall 2018 (100 points)Due Sunday, October 28 at 11:59pmObjectivesAfter this project, students should be…...

网站被入侵后需做的检测(1)/附子seo

1.用户分类 超级用户&#xff08;root&#xff1a;#&#xff09;&#xff1a;可以在Linux下几乎做任何事情&#xff0c;不受限制普通用户&#xff08;local&#xff1a;$&#xff09;&#xff1a;在Linux下做有限的事情 2.用户切换 &#xff08;1&#xff09;普通用户切换到…...

wordpress商业授权/首页排名优化公司

Activity的四种状态&#xff1a;--Active/Runing 一个新 Activity 启动入栈后&#xff0c;它在屏幕最前端&#xff0c;处于栈的最顶端&#xff0c;此时它处于可见并可和用户交互的激活状态。 --Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时…...

怎样给网站做百度推广/百度网址输入

本节书摘来自异步社区《Python数据分析》一书中的第1章&#xff0c;第1.9节&#xff0c;作者【印尼】Ivan Idris&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 1.9 从何处寻求帮助和参考资料 在流行的软件开发论坛Stack Overflow上&#xff0c;也有数以百计…...