《JavaSE-第十四章》之文件(一)

news2024/11/19 18:44:00

前言

在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!”

博客主页:KC老衲爱尼姑的博客主页

博主的github,平常所写代码皆在于此

刷题求职神器

共勉:talk is cheap, show me the code

作者是爪哇岛的新手,水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


文章目录

  • File
    • 文件
      • 文件的类型
      • 文件系统
      • 文件路径
    • Java中操作文件
      • File
        • File的构造方法
        • File类的常用API
          • File类的判断文件类型、获取文件信息功能
          • File创建文件的功能
          • File删除文件的功能
          • File遍历文件夹
    • 字符集
      • 常见的字符集
        • ASCII字符集:
        • GBK:
        • Unicode码表:
        • 字符集的编码,解码操作
          • String编码
          • String解码
    • IO流
        • IO流体系
        • FileInputStream
        • FileOutputStream
        • 文件字符输入流:Reader
        • 文件字符输出流:FileWriter
      • 缓冲流概述
        • 字节缓冲流
        • 字符缓冲输入流
        • 字符缓冲输出流

File

文件

广义上的文件:

在Linux操作系统中会将其管理 的软硬件资源抽象成文件进行管理

如键盘,电脑需要读取用户从键盘上输入的东西,就是将键盘抽象成文件,读取该文件就能获取到用户的输入。

狭义上的文件:

存储在硬盘上的文件

比如普通文本,pdf文件,视频,音频,图片。

文件的类型

文件的类型通常以扩展名来体现,比如java文件的后缀是.java,一般的图片的后缀是.jpg,一般的文本文件的后缀是.txt。每种文件都有特定的格式,代表着该文件与二进制的 之间的映射关系。比如.md文件,其中可以包含图片,文字,字体颜色等。对于一种文件通常可以使用一个或者过个应用程序进行查看和编辑,一个应用程序可以解读一种或者多种文件。比如使用idea可以VS Code既可以打开普通文件又可以打开md文件。在操作系统上,一个扩展名通常关联一个程序,当用户双击某种文件时,操作系统会去寻找相关的程序,如果找到了会启动该程序,并将该文件的路径传递给它,程序再打开文件。

文件的类型可以大概分为以下两种:

  1. 文件文件

    比如文本文件,html文件,java文件。

  2. 二进制文件

    比如压缩文件,PDF文件,word文件。

区分文本文件与二进制文件的方法

在电脑上使用记事本打开,如果没有出现乱码则是文本文件,出现乱码则是二进制文件。

文件系统

文件一般存放在硬盘上,一台机器上可能有多个硬盘,但是操作系统都会隐藏物理硬盘的概念,提供一个逻辑上的统一结构,在windows中,可以有多个逻辑盘,如C,D,E等。每个盘都可以被格式化成一种不同的文件系统,

文件路径

在逻辑上,Windows中有多个根目录,每个根目录下有一棵子目录和文件构成的树。每个文件都有路径路径概念,路径有两种形式,一种是绝对路径:从盘符开始的路径,如:D:\game\植物僵尸。另一种是相对路径:是相对于当前目录而言,并且不以盘符开头。相对路径必须的有一个基准路径,以D:\game\植物僵尸为基准,在植物大战僵尸的目录下,要找到PlantsVsZombies.exe,则使用相对路径可以表示为./PlantsVsZombies.exe,此处的.表示为当前目录即D:\game\植物僵尸。

Java中操作文件

File

Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。该类相当于一个抽象的文件路径,能够在此路径中进行文件的创建,修改,删除等。但是不能读写文件的内容。

注意

  1. File对象可以定位文件和文件夹
  2. File封装的对象仅仅是一个路径名,该路径名可以存在 可以不存在。

File的构造方法

方法名称说明
public File(String pathname)根据文件路径创建文件对象
public File(String parent, String child)从父路径名字符串和子路径名字符串创建文件对象
public File(File parent, String child)根据父路径对应文件对象和子路径名字符串创建文件对象

代码示例

package com.kc.system.io;

import java.io.File;

public class FileDemo2 {
    public static void main(String[] args) {
        //定位到该绝对路径下的图片
        File f = new File("D:/picture/1.jpg");
       //输出文件的大小
        System.out.println(f.length());
        //使用相对路径定位到项目中的文件
        File file2 = new File("./bbb.txt");
        System.out.println(file2.length());
        File file3 = new File("D:/tools");
        System.out.println(file3.exists());
    }
}

File类的常用API

File类的判断文件类型、获取文件信息功能
方法名称说明
public boolean isDirectory()判断此抽象路径名表示的File是否为文件夹
public boolean isFile()判断此抽象路径名表示的File是否为文件
public boolean exists()判断此抽象路径名表示的File是否存在
public String getAbsolutePath()返回此抽象路径名的绝对路径名字符串
public String getPath()将此抽象路径名转换为路径名字符串
public String getName()返回由此抽象路径名表示的文件或文件夹的名称
public long lastModified()返回文件最后修改的时间(毫秒值)

代码示例

package com.kc.system.io;

import java.io.File;
import java.text.SimpleDateFormat;

public class FileDemo3 {
    public static void main(String[] args) {
        File  file = new File("D:\\game");
        //判断是否为文件
        System.out.println(file.isFile());
        //判断是否为文件夹
        System.out.println(file.isDirectory());
        //判断该文件存在
        System.out.println(file.exists());
        //获取绝对路径
        System.out.println(file.getAbsolutePath());
        //获得该路径表示的文件或者文件夹的名称
        System.out.println(file.getName());
        //将该路径转换成字符串
        System.out.println(file.getPath());
        //返回文件最后的修改时间
        System.out.println(  new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(file.lastModified()));
    }
}
File创建文件的功能
方法名称说明
public boolean createNewFile()创建一个新的空的文件
public boolean mkdir()只能创建一级文件夹
public boolean mkdirs()可以创建多级文件夹

代码示例

package com.kc.system.io;

import java.io.File;
import java.io.IOException;

public class FileDemo4 {
    public static void main(String[] args) throws IOException {
        File file = new File("D:/Demo");
        //创建新的空的文件
        System.out.println(file.createNewFile());
        //创建一级文件夹
         File file2 = new File("D:/test");
        System.out.println(file2.mkdir());
        //创建多级文件夹
        File file3 = new File("D:/test/C/C++");
        System.out.println( file3.mkdirs());
    }
}
File删除文件的功能
方法名称说明
public boolean delete()删除由此抽象路径名表示的文件或空文件夹

代码示例

package com.kc.system.io;

import java.io.BufferedReader;
import java.io.File;

public class FileDemo5 {
    public static void main(String[] args) {
        File file = new File("D:/Demo");
        System.out.println(file.delete());
        File file3 = new File("D:/test/C/C++");
        System.out.println(file3.delete());
    }
}

//结果
//true
//true

注意:

  1. delete方法默认只能删除文件和文件夹
  2. delete方法直接删除不走回收站
  3. 默认不能删除非空文件夹
File遍历文件夹
方法名称说明
public String[] list()获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
public File[] listFiles()获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回

代码示例

package com.kc.system.io;

import java.io.File;
import java.util.Arrays;

public class FileDemo6 {
    public static void main(String[] args) {
        File file = new File("D:/software");
        //获得该路径下文件的名称
        String[] list = file.list();
        System.out.println(Arrays.toString(list));
        File file2 = new File("D:/software");
        //获得该路径下所有文件对象的抽象路径
        System.out.println(Arrays.toString(file2.listFiles()));
        File file4 = new File("D:/demo");
        //文件夹不存在时
        System.out.println(Arrays.toString(file4.listFiles()));
        //抽象路径为文件(不是文件夹)时
        File file5 = new File("D:/demo.txt");
        System.out.println(Arrays.toString(file5.listFiles()));
        //当文件夹为空时
        File file6 = new File("D:/test");
        System.out.println(Arrays.toString(file6.listFiles()));
    }
}

//运行结果
//[nacicat, PyCharm Community Edition 2022.2, python, 新版navicat及破解软件, 新版navicat及破解软件_2.rar]
//[D:\software\nacicat, D:\software\PyCharm Community Edition 2022.2, D:\software\python, D:\software\新版navicat及破解软件, D:\software\新版navicat及破解软件_2.rar]
//[]
//null
//[]

字符集

字符集的基础知识

  1. 字符:计算机世界中关于文字和符合的统称,如一个汉字,一个字符,一个标点符号等。
  2. 字符编码:,由于计算机只能识别二进制,而十进制于二进制是可以互相转换的,所以人们对现实世界中字符用十进制进行编号,这些字符转换成计算机能够识别的二进制的过程,则被称为字符编码。
  3. 字符集:由于每个国家的文字不一样的,文字的个数也不相同,进行编号的规则也有所差异,这种编号规则就是字符集。

常见的字符集

ASCII字符集:

  • ASCII(American Standard Code for Information Interchange,美国信息交换标准代码):包括了数字、英文、符号。
  • SCII使用1个字节存储一个字符,一个字节是8位,总共可以表示128个字符信息,对于英文,数字来说是够用的。

GBK:

  • window系统默认的码表。兼容ASCII码表,也包含了几万个汉字,并支持繁体汉字以及部分日韩文字。
  • 注意:GBK是中国的码表,一个中文以两个字节的形式存储。但不包含世界上所有国家的文字。

Unicode码表:

  • unicode(又称统一码、万国码、单一码)是计算机科学领域里的一项业界字符编码标准。
  • 容纳世界上大多数国家的所有常见文字和符号。
  • 由于Unicode会先通过UTF-8,UTF-16,以及 UTF-32的编码成二进制后再存储到计算机,其中最为常见的就是UTF-8。

注意

  1. Unicode是万国码,以UTF-8编码后一个中文一般以三个字节的形式存储。
  2. UTF-8也要兼容ASCII编码表。
  3. 技术人员都应该使用UTF-8的字符集编码。
  4. 编码前和编码后的字符集需要一致,否则会出现中文乱码。

汉字存储和解析过程

在这里插入图片描述

字符集的编码,解码操作

String编码
方法名称说明
byte[] getBytes()使用平台的默认字符集将该 String编码为一系列字节,将结果存储到新的字节数组中
byte[] getBytes(String charsetName)使用指定的字符集将该 String编码为一系列字节,将结果存储到新的字节数组中
String解码
方法名称说明
String(byte[] bytes)通过使用平台的默认字符集解码指定的字节数组来构造新的 String
String(byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来构造新的 String

代码示例

package com.kc.system.io;

import java.io.UnsupportedEncodingException;

public class Demo6 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "今天天气真好";
        //指定编码
        byte[] bytes = str.getBytes("UTF-8");
        //解码 将字节转换成中文(编码前后的字符集需要一致,否则会乱码)
        String s = new String(bytes,"UTF-8");
        System.out.println(s);
    }
}

IO流

现实世界中有水流,电流。所谓的IO流就是对文件读写,当程序需要读取数据时,就可以想象有一个数据源,而数据源与程序之间就有一条管道,管道中流动的东西就是数据,这些数据就从数据源流向程序,数据源可以是硬盘,内存。同理当程序需要向文件写入数据时就会开启一个通往目的地管道,需要写入的数据就会像水流一般流过去。

在这里插入图片描述

注意

  1. 输入和输出是相对于内存而言
  2. 流只能单方向流动
  3. 输入流用来读
  4. 输出流用来读

流的分类

按流的方向分

  • 输出流
  • 输入流

按流中数据最小的单位分

  • 字符流(任意文件)
  • 字节流(只能操作纯文本文件)

字节流使用

IO流体系

在这里插入图片描述

FileInputStream

作用:以内存为基准,把磁盘文件中的数据以字节的形式读取到内存中去。

构造器说明
public FileInputStream(File file)创建字节输入流管道与源文件对象接通
public FileInputStream(String pathname)创建字节输入流管道与源文件路径接通
方法名称说明
public int read()每次读取一个字节返回,如果字节已经没有可读的返回-1
public int read(byte[] buffer)每次读取一个字节数组返回,如果字节已经没有可读的返回-1

代码示例

package com.kc.system.io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class InputStreamDemo {
    public static void main(String[] args) throws IOException {
        InputStream inputStream = new FileInputStream("bbb.txt");
        int val;
        while ((val=inputStream.read())!=-1) {
            System.out.print(val+" ");
        }
        if (inputStream!=null) {
            inputStream.close();
        }
    }
}
//运行结果
//97 98 51 97 98 99 100 99 100 


package com.kc.system.io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class InputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        InputStream inputStream = new FileInputStream("bbb.txt");
        byte[] buffer = new byte[3];//用于存储从文件中读取的内容
        int len; // 记录每次读取的字节数。
        while ((len = inputStream.read(buffer)) != -1) {
            // 读取多少倒出多少
            System.out.print(new String(buffer, 0 , len));
        }
        if (inputStream!=null) {
            inputStream.close();
        }
    }
}
//运行结果
//ab3abcdcd

FileOutputStream

作用:以内存为基准,把内存中的数据以字节的形式写出到磁盘文件中去的流。

方法名称说明
public FileOutputStream(File file)创建字节输出流管道与源文件对象接通
public FileOutputStream(File file,boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileOutputStream(String filepath)创建字节输出流管道与源文件路径接通
public FileOutputStream(String filepath,boolean append)创建字节输出流管道与源文件路径接通,可追加数据

文件字节输出流(FileOutputStream)写数据出去的API

方法名称说明
public void write(int a)写一个字节出去
public void write(byte[] buffer)写一个字节数组出去
public void write(byte[] buffer , int pos , int len)写一个字节数组的一部分出去。

流的关闭与刷新

方法名称说明
flush()刷新流,还可以继续写数据
close()关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据

代码示例

package com.kc.system.io;


import java.io.FileOutputStream;
import java.io.OutputStream;

public class OutputStreamDemo {
    public static void main(String[] args) throws Exception {
        //append设置为true表示为可以在文件后追加数据,不会将第一次的数据给刷了
        OutputStream outputStream = new FileOutputStream("bbb.txt",true);
        outputStream.write(97);
        outputStream.write(98);
        outputStream.write(99);
        byte [] buffer = new byte[]{100,101,102};
        outputStream.write(buffer);
        byte[] bytes = "1223".getBytes();
        outputStream.write(bytes,0,2);
        //为了避免频繁对硬盘操作,是先将数据放到缓冲区,然后数据在将数据磁写到文件
        outputStream.flush();//关闭前要刷新缓冲区,将剩余的数据全部写到文件
        if (outputStream!=null) {
            outputStream.close();
        }
    }
}

文件字符输入流:Reader

作用:以内存为基准,把磁盘文件中的数据以字符的形式读取到内存中去。

构造器说明
public FileReader(File file)创建字符输入流管道与源文件对象接通
public FileReader(String pathname)创建字符输入流管道与源文件路径接通
方法名称说明
public int read()每次读取一个字符返回,如果字符已经没有可读的返回-1
public int read(char[] buffer)每次读取一个字符数组,返回读取的字符个数,如果字符已经没有可读的返回-1

代码示例

package com.kc.system.io;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Arrays;

public class FileWriteDemo {
    public static void main(String[] args) throws IOException {
        Reader reader = new FileReader("bbb.txt");
//        int read = 0;
//        while((read=reader.read())!=-1) {
//            System.out.print((char)read+" ");
//        }
        char [] arr = new char[3];
        int read = 0;
        while ((read=reader.read(arr))!=-1) {
            System.out.print(Arrays.toString(arr));
        }
        reader.close();
    }
}
运行结果
[a, b, c][d, e, f][1, 2, f]

字符流的好处:读取中文字符不会出现乱码,因为是一个字符一个字符读取的。

文件字符输出流:FileWriter

作用:以内存为基准,把内存中的数据以字符的形式写出到磁盘文件中去的流

构造器说明
public FileWriter(File file)创建字符输出流管道与源文件对象接通
public FileWriter(File file,boolean append)创建字符输出流管道与源文件对象接通,可追加数据
public FileWriter(String filepath)创建字符输出流管道与源文件路径接通
public FileWriter(String filepath,boolean append)创建字符输出流管道与源文件路径接通,可追加数据

文件字符输出流(FileWriter)写数据出去的API

方法名称说明
void write(int c)写一个字符
void write(char[] cbuf)写入一个字符数组
void write(char[] cbuf, int off, int len)写入字符数组的一部分
void write(String str)写一个字符串
void write(String str, int off, int len)写一个字符串的一部分

流的关闭与刷新

方法说明
flush()刷新流,还可以继续写数据
close()关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据

代码示例

package com.kc.system.io;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
        //数据追加
        Writer writer = new FileWriter("bbb.txt",true);
        writer.write("124");
        writer.write(new char []{'a','b','c','d'},0,2);
        writer.write(new char []{'e','f','g','h'});
        writer.write(new String("zxcvb"),0,3);
        writer.flush();
        writer.write("1244434");
        if (writer!=null) {
            writer.close();
        }
    }
}

缓冲流概述

缓冲流自带缓冲区,先是将要操作的数据存放在缓冲区,然后才和内存或者硬盘交互,可以提高字节流,字符流读写数据的性能。

字节缓冲流性能优化原理:

在这里插入图片描述

字节缓冲输入流自带了8KB缓冲池,以后我们直接从缓冲池读取数据,所以性能较好。
字节缓冲输出流自带了8KB缓冲池,数据就直接写入到缓冲池中去,写数据性能极高了

字节缓冲流

  • 字节缓冲输入流:BufferedInputStream,提高字节输入流读取数据的性能,读写功能上并无变化。
  • 字节缓冲输出流:BufferedOutputStream,提高字节输出流读取数据的性能,读写功能上并无变化。
构造器说明
public BufferedInputStream(InputStream is)可以把低级的字节输入流包装成一个高级的缓冲字节输入流管道,从而提高字节输入流读数据的性能
public BufferedOutputStream(OutputStream os)可以把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能

代码示例

package com.kc.system.io;


import java.io.*;

/**
 * 复制文件夹下的文件
 *1.首先将文件读入内存
 * 2.将文件写到目标路径
 * 硬盘--->内存---->硬盘
 */
public class BufferDemo {
    public static void main(String[] args) {

     try(
          //这里面只能放置资源对象,用完会自动关闭:自动调用资源对象的close方法关闭资源
          //1.创建一个字节p输入流管道与图片接通
          InputStream inputStream = new FileInputStream("D:/picture/1.jpg");
          // 2.把原始的字节输入流包装成高级的缓冲字节输入流
          InputStream in = new BufferedInputStream(inputStream);
          // 3、创建一个字节输出流管道与目标文件接通
          OutputStream outputStream = new FileOutputStream("D:/picture/3.jpg");
          // 4.把字节输出流管道包装成高级的缓冲字节输出流管道
          OutputStream out = new BufferedOutputStream(outputStream);
     ){
        byte [] buffer = new byte[4];
        int size = 0;
        while ((size=in.read(buffer))!=-1) {
            out.write(buffer,0,size);
        }
     } catch (FileNotFoundException e) {
         e.printStackTrace();
     } catch (IOException e) {
         e.printStackTrace();
     }
    }
}

字符缓冲输入流

字符缓冲输入流:BufferedReader。
作用:提高字符输入流读取数据的性能,除此之外多了按照行读取数据的功能。

构造器说明
public BufferedReader(Reader r)可以把低级的字符输入流包装成一个高级的缓冲字符输入流管道,从而提高字符输入流读数据的性能
方法说明
public String readLine()读取一行数据返回,如果读取没有完毕,无行可读返回nul

代码示例一

package com.kc.system.io;

import java.io.*;


public class BufferReaderDemo {
    public static void main(String[] args) {
       try(Reader reader = new FileReader("bbb.txt");
           BufferedReader bufferedReader = new BufferedReader(reader);
       ){
        char [] buffer = new char[4];
        int len = 0;
         while ((len=bufferedReader.read(buffer))!=-1) {
             System.out.println(new String(buffer,0,len));
         }
       } catch (FileNotFoundException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       }
    }
}

字符缓冲输出流

字符缓冲输出流:BufferedWriter。
作用:提高字符输出流写取数据的性能,除此之外多了换行功能

构造器说明
public BufferedWriter(Writer w)可以把低级的字符输出流包装成一个高级的缓冲字符输出流管道,从而提高字符输出流写数据的性能
方法说明
public void newLine()换行操作

代码示例二

package com.kc.system.io;


import java.io.*;
public class BufferWriterDemo {
    public static void main(String[] args) {
        try(Writer write = new FileWriter("bbb.txt");
            BufferedWriter bufferedWriter = new BufferedWriter(write);){
            bufferedWriter.write(97);
            bufferedWriter.write(new  char[]{'b','c','d','e','f'});
            bufferedWriter.newLine();
            bufferedWriter.write(new String("efasdfg"));
            write.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

文件操作的类虽然看起来很多,但是只有用好一组类,其它的类基本上都是类似的使用。

最后的话

各位看官如果觉得文章写得不错,点赞评论关注走一波!谢谢啦!

blic void newLine() | 换行操作 |

代码示例二

package com.kc.system.io;


import java.io.*;
public class BufferWriterDemo {
    public static void main(String[] args) {
        try(Writer write = new FileWriter("bbb.txt");
            BufferedWriter bufferedWriter = new BufferedWriter(write);){
            bufferedWriter.write(97);
            bufferedWriter.write(new  char[]{'b','c','d','e','f'});
            bufferedWriter.newLine();
            bufferedWriter.write(new String("efasdfg"));
            write.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

文件操作的类虽然看起来很多,但是只有用好一组类,其它的类基本上都是类似的使用。

最后的话

各位看官如果觉得文章写得不错,点赞评论关注走一波!谢谢啦!

在这里插入图片描述

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

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

相关文章

Go 语言中的并发编程(Let‘s Go 二十八)

Go从底层就支持并发编程,同时实现垃圾回收机制。 先了解并发相关的几个名词概念。 进程:系统进行资源分配和调度的基本单位,使系统结构的基础,它是一个实体。 线程:是程序中一个单一的顺序执行流程,是进程…

python做了个自动关机工具,再也不会耽误我下班啦

上班族经常会遇到这样情况,着急下班结果将关机误点成重启,或者临近下班又通知开会,开完会已经迟了还要去给电脑关机。 【阅读全文】 今天使用PyQt5做了个自动关机的小工具,设置好关机时间然后直接提交即可,下班就可以…

什么是JWT及在JAVA中如何使用?

目录 1、为什么使用JWT? 2、JWT 的 格式 3、使用 JWT 就绝对安全 吗? 4、JWT 的 鉴权 流程 5、JWT 入门案例 5.1 引入依赖 5.2 生成Token 5.3 解析Token 5.4 工具类 JSON Web token简称JWT, 是用于对应用程序上的用户进行身份验证的标记。 也就…

测试中台初始设置

1.0 测试资源池 存在测试资源之后,将测试资源进行统一的管理,针对不同的测试场景和目的来定义不同的测试环境。将测试资源进行组合,测试平台可以对测试资源池进行统一的功能。 2.0 可用性测试及冒烟测试 可用性测试和冒烟测试都是快速验证…

基于Ubuntu搭建CTFd平台(全网最全)

前言: 最近在看《CTF安全竞赛入门》这本书,里面提到了搭建CTFd平台用于练习,学者可以在本地虚拟机上搭建。 所需系统:Ubuntu20.04 怎么安装虚拟机和配置Ubuntu这里就不再赘述了。 记得给Ubuntu配置VM tools1,方便把w…

软考中级(软件设计师)——面向对象程序设计(C++Java二选一的题15分-目标3分)

软考中级(软件设计师)——面向对象程序设计(C&Java二选一的题15分-目标3分) 目录 软考中级(软件设计师)——面向对象程序设计(C&Java二选一的题15分-目标3分) C语法要点 C类的定义: C派生类的定义: C类的外定义函数: C虚函数与…

Python Flask框架-开发简单博客-开篇介绍

作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他拥有的,而不是他会的。所以可以不学无数,但不能一无所有! 技术领域:WEB安全、网络攻防 关…

PHP基础学习第十六篇(了解数组、创建数组、数组排序、总结数组的使用)

一、什么是数组 数组是一个能在单个变量中存储多个值的特殊变量。 如果有一个项目清单(例如:序号名单),将其存储到单个变量中,如下所示: $a1;$b2;$c3; 然而,如果想要遍历数组并找出特定的一…

School assignment

目录 一、常用控制类汇编指令 二、编程实现统计寄存器AX中“1”和“0”的个数 三、编程实现从键盘输入10个1位整数 四、编程实现从键盘输入两个10进制的2位整数的和 五、编写程序练习直接、间接、相对、基址变址寻址 一、常用控制类汇编指令 MOV 传送字或字节. MOVSX 先…

JVM虚拟机

"天下事有难易乎?为之则易,不为则难" 一、初识JVM JVM是一个跨语言的平台,为那些能够跨平台运行的程序提供一个平台,JVM本身与java语言没有必然的联系,它只与特定的二进制文件格式.class文件所关联&#xff…

人生重开模拟器(Python实现)

文章目录人生重开模拟器介绍代码实现打印初始界面设置初始属性设置角色性别设置角色出生点针对每一岁,生成人生经历人生重开模拟器介绍 人生重开模拟器是由VickScarlet上传至GitHub的一款简单的文字网页游戏。 玩家点击“立即重开”并设置角色的初始属性后&#xf…

HTML 学习总结

超级详细的 HTML 学习笔记,一篇入门系列!!耐心读一遍 复习必备!! 目录 简要 认识标签 基本结构 常见标签 1. 注释 ---> ctrl / 2. 标题标签 ---> h1 h2 h3 h4 h5 h6 3. 段落标签 ---> p 4. 换行 ---> br …

Git | 一文带你零基础快速上手Git

👑 博主简介:    🥇 Java领域新星创作者    🥇 阿里云开发者社区专家博主、星级博主、技术博主 🤝 交流社区:BoBooY(优质编程学习笔记社区) 前言:本文适合零基础小白…

Docker

目录1、docker介绍1.1 docker是什么1.2 容器与虚拟机的比较2、docker安装2.1 docker 基本组成2.2 安装步骤2.3 阿里云镜像加速2.4 run干了什么3、docker常用命令3.1 帮助命令及启动命令3.2 镜像命令3.3 容器命令4、Docker镜像4.1 镜像是什么?4.2 分层镜像 UnionFS 联…

时间复杂度和空间复杂度

文章目录一、算法的复杂度二、时间复杂度1.时间复杂度概念2.大O的渐进表示法3.常见时间复杂度计算举例3.1 实例1 【 O(N)】3.2 实例2 【O(NM)】3.3 实例3 【O(1)】3.4 实例4 【O(N)】3.5 实例5 【O(N^2)】3.6 实例6 【O(logN)】3.7 实例7 【O(N)】3.8 实例8【O(2^N)】三、空间复…

新的3D地图制图技术改变了全球定位的游戏规则

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 在人类技术发展的历史长河…

市场裁猿~ 行业内卷~ Android 开发突破重围?

往日光鲜亮丽的互联网企业在今年彻底进入了寒冬,往年的高不可攀,低成本运营,在今年都不再是护身符。更是有不少互联网大厂开启了裁员模式,其中就有百度、阿里巴巴、快手、汽车之家等知名企业。 从今年三月起直到现在互联网各厂裁员…

【微信小程序系列:二】小程序常用功能:文字可复制、跳转地图、扫一扫、拨打电话、调整屏幕亮度、监听截屏...

一.先言: (~ ̄▽ ̄)~,hello,微信小程序系列第二篇,介绍下小程序里的常用功能api,可以快速copy使用~ 二.文字可复制: 小程序页面里的文字默认是没有长按复制功…

自动泊车停车位检测算法

转自:https://zhuanlan.zhihu.com/p/522630354 图1:泊车示意图一、背景介绍 自动泊车大体可分为4个等级: 第1级,APA 自动泊车:驾驶员在车内,随时准备制动,分为雷达感知和雷达视觉感知两种方式。…

手机批发业务-商品备选区

样式 代码 <!doctype html> <html lang"en"><head><meta charset"UTF-8"><meta name"author" content"huyiwei"><meta name"generator" content"HBuilder X"><title>…