Java中IO体系

news2024/11/24 19:54:42

File

File类

byh456yq345567u

File: 表示计算机中所有的文件和文件夹; [计算机硬盘上除了文件就是文件夹]

如何创建File对象 :
	File(String pathname) : 传入文件路径[String],创建File对象并指向这个路径的文件/文件夹
    File(String parent, String child) :传入文件路径[String],创建File对象并指向这个路径的文件/文件夹 [文件路径拆分成了父路径和子路径]
	File(File parent, String child) :  以子父路径的形式创建一个File对象但是File对象的父路径是File类型  
        
    创建File对象做了哪些事情 :
        1. 创建File对象
        2. 在堆内存中开辟了内存空间
        3. 文件不存在 : 不会创建文件
        4. 文件存在 : 不会覆盖源文件
        5. 创建File对象只会让一个File类型的对象指向路径结尾的文件/文件夹 [其他的事情什么都没有发生] 

rgfvr5tg4e2365y

File类的静态常量

static String pathSeparator -> ;
          与系统有关的路径分隔符,为了方便,它被表示为一个字符串。 
static char pathSeparatorChar -> ;
          与系统有关的路径分隔符。 
static String separator -> \
          与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。 
static char separatorChar -> \
          与系统有关的默认名称分隔符。 

File类的创建功能

//创建文件
* boolean createNewFile() : 创建File对象指向的文件 //只会创建文件
    文件存在,会创建失败;[不会覆盖源文件]
//创建文件夹
boolean mkdir() : 创建File对象指向的单级文件夹 //只会创建文件夹 
* boolean mkdirs() : 创建File对象指向的单级文件夹或者多级文件夹 //只会创建文件夹  
    
//返回值 : 是否创建成功     

相对路径和绝对路径[重点]

相对路径和绝对路径 : 对文件/文件夹的路径的一种表达形式!
    
绝对路径 : 文件/文件夹的完整路径 [1. 绝对能找到文件所在的位置 2. 以盘符开头]    
    
相对路径 : 相对于参照物的路径 [1. 比绝对路径表达要简单 2. 不以盘符开头 3. 不能表示计算机中所有的文件/文件夹] 
    参照物 : 当前项目的根目录[IO体系]
        
    
寄快递 :
	绝对路径 -> 地球:亚洲\\中国\\湖北\\武汉\\江夏区\\茅店山中路\\东湖网谷\\6栋\\4楼\\尚硅谷\\403\\谈斌
    相对路径 //参照物 : 你已经在东湖网谷了[举例]
        -> 6栋\\4楼\\尚硅谷\\403\\谈斌
        
注意 : 如果你的模块结构比较混乱,那么也有可能用不了相对路径!        

File类的删除功能[了解]

boolean delete() : 删除File对象指向的文件/空文件夹 [不走回收站]

File类的判断功能

//重要的
 boolean exists() : 判断文件是否存在
 boolean isDirectory() : 判断file对象指向的是否是一个文件夹[是文件夹就返回true] 
 boolean isFile() : 判断file对象指向的是否是一个文件[是文件就返回true]   

//理解     
 boolean isAbsolute() : 判断创建File对象时是否用的是绝对路径
 boolean isHidden() : 判断创建File对象指向的文件/文件夹是否是隐藏文件/文件夹    

File类的获取功能

//重要
String getName() : 获取File对象指向的文件/文件夹的名称 [文件的名称 : 文件名.后缀名]

//理解    
//获取File对象指向的文件/文件夹的绝对路径
File getAbsoluteFile()  -> 返回的是 File对象
String getAbsolutePath() -> 返回的是 String对象 
    
//获取File对象指向的文件/文件夹的父路径  [不管你如何分隔子父路径,这里的父路径都是路径结尾的文件/文件夹的前置所有路径]  
String getParent() -> 返回的是 String对象   
File getParentFile() -> 返回的是 File对象  
    
String getPath() : 获取创建File对象时传入的路径 
 
long length() : 获取File对象指向的文件的大小 [大小 : 所占用的字节数] 
    //获取不了文件夹的大小 [文件夹无大小]
//示例1
    public static void main(String[] args) throws IOException {
        //绝对路径
        File file1 = new File("E:\\img\\av\\fdse456ygfr.6a7kw12qdww0.jpg");
        //判断是目录还是文件
        boolean isdirectory = file1.isDirectory();
        boolean isfile = file1.isFile();
        System.out.println("directory = " + isdirectory);
        System.out.println("isfile = " + isfile);
        //文件字节大小
        long fileSize = file1.length();
        System.out.println("fileSize = " + fileSize);
        //获取文件父级目录aA
        String file1Parent = file1.getParent();
        File parentFile1 = file1.getParentFile();
        System.out.println("file1Parent = " + file1Parent);
        System.out.println("parentFile1 = " + parentFile1);
        //判断路径是否存在
        File file2 = new File("E:\\imgs\\1.png");
        System.out.println("file2.exists() = " + file2.exists());
        //相对路径
        File file3 = new File("data.txt");
        System.out.println("file3.length() = " + file3.length());
        //获取文件定义时使用的路径
        System.out.println("file3.getPath() = " + file3.getPath());
        //获取文件的绝对路径
        System.out.println("file3.getAbsoluteFile() = " + file3.getAbsoluteFile());
        //获取文件名称(带后缀)
        System.out.println("file1.getName() = " + file1.getName());
        //获取文件最后修改的时间
        System.out.println("file1.lastModified() = " + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(file1.lastModified()));
    }
//示例2
	    public static void main(String[] args) throws IOException {
        //创建文件
        File f1 = new File("data1.txt");
        boolean exists1=f1.exists();
        System.out.println("f1.exists() = " + exists1);
        boolean newFile1=f1.createNewFile();
        System.out.println("f1.createNewFile() = " + newFile1);

        //创建一级文件夹
        File f2 = new File("E:\\aaa");
        System.out.println("f2.exists() = " + f2.exists());
        boolean mkdir1=f2.mkdir();
        System.out.println("mkdir1 = " + mkdir1);

        //创建多级文件夹
        File f3 = new File("E:\\bbb\\ccc");
        boolean mkdir2=f3.mkdirs();
        System.out.println("mkdir2 = " + mkdir2);

        //删除文件夹
        boolean d1 = f2.delete();
        boolean d2 = f3.delete();
        System.out.println("d1 = " + d1);
        System.out.println("d2 = " + d2);

        //多级文件夹下的文件创建
        File f4 = new File("E:\\ddd\\eee");
        File f5 = new File(f4, "bbb.txt");
        f4.mkdirs();
        f5.createNewFile();

        File f6 = new File("test");
        File f7 = new File(f6,"test.txt");
        f6.mkdirs();
        f7.createNewFile();

        File f8 = new File("day_17\\test");
        File f9 = new File(f8,"test.txt");
        f8.mkdirs();
        f9.createNewFile();
    }

File类的遍历功能

File类的遍历功能 :
	File[] listFiles() : 获取File对象指向的文件夹下的文件/文件夹 
        注意 :
			1. 只能获取当根目录下的文件和文件夹 [子文件夹中的文件和文件夹获取不到的]
            2. 如果File对象指向的是一个文件,返回 null [会出现空指针异常]
            3. 如果File对象指向的是一个空文件夹,返回一个长度为0File数组  
                
File类的带过滤条件的遍历功能 :            
	File[] listFiles(FileFilter filter)  
        FileFilter : 文件过滤器接口 
            抽象方法 : boolean accept(File file)
                //重写accept方法就是在编写文件过滤的条件[为true就通过,为false就不通过]
//示例1
    public static void main(String[] args) {
        String path="E:\\img";
        File file = new File(path);
        getFileList(file);
    }
    public static void getFileList(File root){
        if(root.isFile()){
            System.out.println("  文件有:"+root.getName());
            return;
        }
        System.out.println("文件夹有:"+root.getName());
        File[] files = root.listFiles();
        for (File file : files) {
            getFileList(file);
        }
    }
//示例2
    public static void main(String[] args) {
        String path="E:\\aaa";
        File file = new File(path);
        File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {                
                return pathname.getName().endsWith(".txt")|| pathname.isDirectory();
            }
        });
        for (File file1 : files) {
            System.out.println("file1 = " + file1);
        }
    }

IO流的概述[重点]

by45yujherset6hrftghrsawt

hufuirf8r35n34534dfg

IO: IO流是操作计算机硬盘上文件内容的技术手段 [实现了硬盘数据和内存[代码]数据进行交互的技术手段]
    //集合 : 临时存储的容器
    
I : input -> 输入 []
O : output -> 输出 [xi]: 水流 [IO流技术让代码和硬盘中的文件建立连接(管道),数据以字节/字符的形式在管道内传输] 
    
何时使用输入流,何时使用输出流 : [参照物 : 当前Java代码]
	读取硬盘文件内的数据 : 输入流
    往硬盘文件中写数据 : 输出流  
        
IO流的分类 : 
	1. 按照流向来分 :
		输入流 -> Input / Read
        输出流 -> Output / Write
            
    2. 按照操作的文件类型分 : 
			/*
            硬盘中文件类型分为两大类 :
                字节文件 -> 计算机硬盘里所有的文件都是字节文件 [计算机中一切皆字节]
                字符文件 -> 文件内全是字符的文件是字符文件 [.txt,.java,.html,.js...]  
                    //office全家桶 : 都不是字符文件而是字节文件! [.word,.ppt...]
                    //鉴别字符文件的办法 : 使用windows自带的记事本工具能打开并阅读的文件是字符文件
            */
		字节流 -> 可以操作所有文件的流 [操作字符文件不方便] -> 流的名称以Stream结尾
        字符流 -> 只能操作计算机中字符文件[不可以操作其他的字节文件] -> 流的名称以Reader/Writer结尾
            
认识流 :
	OutputStream : 字节输出流 
    FileReader : 字符输入流 
    InputStreamReader : 字符输入流 [转换流: 可以把字节输入流转换成字符输入流]   
    PrintStream : 字节输出流 [Print : 打印(输出)]    

字节流

OutputStream / InputStream -> 根节点
*FileOutputStream / FileInputStream -> 常用的字节流 [文件字节流]    
BufferedOutputStream / BufferedInputStream -> 高效字节流 [缓冲字节流]  

OutputStream / InputStream

OutputStream / InputStream : 字节输出流 / 字节输入流  --> 字节流的根节点 [抽象类]

FileOutputStream / FileInputStream

FileOutputStream / FileInputStream : 文件字节输出流 / 文件字节输入流         
FileOutputStream 文件字节输出流
FileOutputStream 文件字节输出流 
    构造方法 : 
		//形参的含义 : 传入目标文件的路径 [目标文件 : 要写入数据的文件]
		* FileOutputStream(String name)
        FileOutputStream(File file)   
            
    创建FileOutputStream对象做了哪些事情 :
        1. 创建了FileOutputStream对象
        2. 在堆内存中开辟了内存空间
        3. 创建流对象并指向路径结尾的文件 [不能指向一个文件夹]
        4. 如果文件不存在 : 会帮忙创建新文件 [文件的前置路径要正确]
        5. 如果文件存在 : 会帮忙创建新文件去覆盖老文件 [文件的前置路径要正确] 
            
    写数据的功能 : write
       * void write(int b) : 写单个字节
        void write(byte[] b) : 写多个字节 [写整个字节数组]
       ** void write(byte[] b, int off, int len) : 写多个字节 [写字节数组的一部分]
        	int off : 其实索引 [从哪个索引开始写]
            int len : 写几个字节    
                
    注意事项 :
		1. 如何换行 ["\r\n"换行符]
        2. 如何写字符串 [String -> byte : byte[] getBytes() ]
        3. 写汉字字符串的一部分要注意一个汉字占用几个字节[查看平台的编码格式] :
            GBK : 一个汉字占用2个字节
            UTF-8 : 一个汉字占用3个字节
        4. 如何实现追加写的功能
            //第一个参数 : 目标文件的地址
            //第二个参数 : 追加写开关 [默认是关闭的]
            FileOutputStream(String name, boolean append)
            FileOutputStream(File file, boolean append)
FileInputStream 文件字节输入流
FileInputStream 文件字节输入流 [没有追加读]
    构造方法 :
		//形参的含义 : 传入源文件的路径 [源文件 : 需要读数据的文件]
		* FileInputStream(String name)
        FileInputStream(File file)     
            
     FileInputStream创建对象做了哪些事情 :
        1. 创建了FileInputStream对象
        2. 在堆内存中开辟了内存空间
        3. 创建流对象并指向路径结尾的文件 [不能指向一个文件夹]
        4. 源文件不存在 : 报错 [源文件必须存在]   
            
     读数据的功能 : read	
         *int read() : 一次读一个字节 [把读到的字节返回给调用者]
         //byte[] b : 读数据的容器
         **int read(byte[] b) : 一次读一个字节数组 [批量读] -> 把读到的字节个数返回给调用者,读到的字节数据存到字节数组中
         int read(byte[] b, int off, int len) : 一次读一个字节数组的一部分
         	int off : 其实索引 [从哪个索引开始读]
            int len : 读几个 	
                
      注意事项 :
		1. ASCII码表中的字符都是占用1个字节数
        2. 输出时不要加换行,因为字节输入流可以读到文件中的换行符
        3. 字节输入流一次读一个字节读文件,读到文件末尾返回 -1
        4. 字节流操作字符文件不方便,会出现乱码问题    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlX08HsT-1671370759363)(null)]

BufferedOutputStream / BufferedInputStream

BufferedOutputStream / BufferedInputStream : 高效字节输出流 / 高效字节输入流 
    带Buffered的流都是高效的流,带有自动刷新缓冲区[小推车]功能的流 ;

创建流对象的方法 : //包装流 : 流本身不具备读写能力,真正读写的流对象还是基本流
	BufferedOutputStream(OutputStream out) 
	BufferedInputStream(InputStream in) 
        
读写方法 :  //相较于基本流没有新增新的读写功能
	写的方法 : write -> BufferedOutputStream
        * void write(int b) : 写单个字节
        void write(byte[] b) : 写多个字节 [写整个字节数组]
       ** void write(byte[] b, int off, int len) : 写多个字节 [写字节数组的一部分]
        
    读的方法 : read -> BufferedInputStream   
         *int read() : 一次读一个字节 [把读到的字节返回给调用者]
         //byte[] b : 读数据的容器
         **int read(byte[] b) : 一次读一个字节数组 [批量读] -> 把读到的字节个数返回给调用者,读到的字节数据存到字节数组中
         int read(byte[] b, int off, int len) : 一次读一个字节数组的一部分
        
高效流什么时候使用 : 当源文件足够大的时候使用高效流的效率更高;

高效字节输出流的追加写功能如何实现 :
	BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream("目标文件地址",true));

字符流

Writer / Reader -> 根节点
FileWriter / FileReader -> 文件字符流
*BufferedWriter / BufferedReader -> 最常用的字符流 [高效字符流/字符缓冲流]  

Writer / Reader

Writer / Reader : 字符流的根节点 [抽象类]
    1. 字符流只能操作字符文件
    2. 字符流的本质其实也是字节流 [只是对字节流进行高度封装] -> 字符流 = 字节流 + 编码格式;
	3. 字符流都是缓冲流[带缓冲区的流,但是不带Buffered就不带自动刷新的功能,所以不算高效流]

FileWriter / FileReader

FileWriter / FileReader : 文件字符输出流 / 文件字符输入流 [普通字符流]
FileWriter 文件字符输出流
FileWriter 文件字符输出流的构造方法 :
	//直接传入目标文件的地址
	* FileWriter(String fileName) 
    FileWriter(File file) 
    //带有追加写功能的字符输出流对象
    //[追加写功能 : FileOutputStream(文件字节输出流) / FileWriter(文件字符输出流)]
    FileWriter(String fileName, boolean append)
    FileWriter(File file, boolean append)     
        
	FileWriter 文件字符输出流写数据的方法 :  write
        * 1. 一次写一个字符 -> void write(int c) 
        2. 一次写一个字符数组 -> void write(char[] cbuf)  
        **3. 一次写一个字符数组的一部分 -> void write(char[] cbuf, int off, int len)  
        4. 一次写一个字符串 -> void write(String str) 
        5. 一次写一个字符串的一部分 -> void write(String str, int off, int len) 
FileReader 文件字符输入流
FileReader 文件字符输入流的构造方法 :
    //直接传入源文件的地址
    * FileReader(String fileName) 
    FileReader(File file) 
        
    FileReader 文件字符输入流读数据的方法 :  read
        * 1. 一次读一个字符 ->  int read()  
        ** 2. 一次读一个字符数组 -> int read(char[] cbuf) 
        3. 一次读一个字符数组的一部分 -> int read(char[] cbuf, int off, int len)  
        //文件字符输入流没有读字符串的功能!![读字符串功能的类 : BufferedReader]
        //4. 一次读一个字符串
        //5. 一次读一个字符串的一部分

BufferedWriter / BufferedReader

BufferedWriter / BufferedReader : 高效字符输出/输入流 
    1. Buffered : 高效 -> 带自动刷新的缓冲区 
    2. 回忆BufferedOutputStream / BufferedInputStream的使用技巧[创建对象上] 
        //高效流本身不具备读写能力,需要在创建高效流对象时,传入基本流对象
        
BufferedWriter / BufferedReader 的构造方法 :
	BufferedWriter(Writer out) 
    BufferedReader(Reader in)  
        
BufferedWriter / BufferedReader 的常规读写方法 :
	BufferedWriter的写数据方法 :
		* 1. 一次写一个字符 -> void write(int c) 
        2. 一次写一个字符数组 -> void write(char[] cbuf)  
        **3. 一次写一个字符数组的一部分 -> void write(char[] cbuf, int off, int len)  
        ***4. 一次写一个字符串 -> void write(String str) 
        5. 一次写一个字符串的一部分 -> void write(String str, int off, int len) 
            
   BufferedReader的读数据方法 :
		* 1. 一次读一个字符 ->  int read()  
        ** 2. 一次读一个字符数组 -> int read(char[] cbuf) 
        3. 一次读一个字符数组的一部分 -> int read(char[] cbuf, int off, int len)  

BufferedWriter / BufferedReader 的特殊功能[重点]

BufferedReader 有特殊的读数据的方法 :
	String readLine() : 读一行数据 [读字符串] //弊端 : 不读每行结尾的换行符 
        
BufferedWriter 有特殊写换行符的方法 :
	void newLine() : 根据不同系统写换行符 
//示例
public static void main(String[] args) throws IOException {
        copyStreamCh("E:\\io\\test.txt", "E:\\io\\testcopy.txt");
        copyStreamByteArray("E:\\io\\test\\1.webp", "E:\\io\\test\\1copy.webp");
        copyBufferedCh("E:\\io\\test.txt", "E:\\io\\testcopy.txt");
        copyBufferedByteArray("E:\\io\\test\\1.webp", "E:\\io\\test\\1copy.webp");
        copyString("E:\\io\\test.txt", "E:\\io\\testcopy.txt");
        copyStringArray("E:\\io\\test.txt", "E:\\io\\testcopy.txt");
        copyBufferedString("E:\\io\\test.txt", "E:\\io\\testcopy.txt");
        copyBufferedStringArray("E:\\io\\test.txt", "E:\\io\\testcopy.txt");
        copyBufferedStringLine("E:\\io\\test.txt", "E:\\io\\testcopy.txt");
    }

    //文件字节流一次一个字节复制文件
    public static void copyStreamCh(String oldFile, String newFile) throws IOException {
        FileInputStream fis = new FileInputStream(oldFile);
        FileOutputStream fos = new FileOutputStream(newFile);
        int readData;
        while ((readData = fis.read()) != -1) {
            fos.write(readData);
        }
        fis.close();
        fos.close();
    }

    //文件字节流一次一个字节数组复制文件
    public static void copyStreamByteArray(String oldFile, String newFile) throws IOException {
        FileInputStream fis = new FileInputStream(oldFile);
        FileOutputStream fos = new FileOutputStream(newFile);
        byte[] bytes = new byte[1024];
        int len;
        while ((len = fis.read(bytes)) != -1) {
            fos.write(bytes, 0, len);
        }
        fis.close();
        fos.close();
    }

    //高效文件字节流一次一个字节复制文件
    public static void copyBufferedCh(String oldFile, String newFile) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(oldFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
        int readData;
        while ((readData = bis.read()) != -1) {
            bos.write(readData);
        }
        bis.close();
        bos.close();
    }

    //高效文件字节流一次一个字节数组复制文件
    public static void copyBufferedByteArray(String oldFile, String newFile) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(oldFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
        byte[] bytes = new byte[1024];
        int len;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }
        bis.close();
        bos.close();
    }

    //文件字符流一次一个字符复制文件
    public static void copyString(String oldFile, String newFile) throws IOException {
        FileReader fr = new FileReader(oldFile);
        FileWriter fw = new FileWriter(newFile);
        int readData;
        while ((readData = fr.read()) != -1) {
            fw.write(readData);
            fw.flush();
        }
        fr.close();
        fw.close();
    }

    //文件字符流一次一个字符数组复制文件
    public static void copyStringArray(String oldFile, String newFile) throws IOException {
        FileReader fr = new FileReader(oldFile);
        FileWriter fw = new FileWriter(newFile);
        char[] chars = new char[1024];
        int len;
        while ((len = fr.read(chars)) != -1) {
            fw.write(chars, 0, len);
            fw.flush();
        }
        fr.close();
        fw.close();
    }

    //高效文件字符流一次一个字符复制文件
    public static void copyBufferedString(String oldFile, String newFile) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(oldFile));
        BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
        int readData;
        while ((readData = br.read()) != -1) {
            bw.write(readData);
        }
        br.close();
        bw.close();
    }

    //高效文件字符流一次一个字符数组复制文件
    public static void copyBufferedStringArray(String oldFile, String newFile) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(oldFile));
        BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
        char[] chars = new char[1024];
        int len;
        while ((len = br.read(chars)) != -1) {
            bw.write(chars, 0, len);
        }
        br.close();
        bw.close();
    }

    //高效文件字符流一次一行复制字符文件
    public static void copyBufferedStringLine(String oldFile, String newFile) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(oldFile));
        BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
        String line;
        while ((line = br.readLine()) != null) {
            bw.write(line);
            bw.newLine();
        }
        br.close();
        bw.close();
    }

"杂"流 [掌握]

InputStreamReader / OutputStreamWriter -> 转换流 
System.in / System.out -> 系统标准输入/输出流
ObjectInputStream / ObjectOutputStream -> 反序列化流/序列化流 [对象操作流]
PrintStream / PrintWriter -> 打印字节流 / 打印字符流 [都是输出流! 打印流只有输出没有输入]    

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

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

相关文章

【机器学习---02】机器学习相关名词解释

文章目录1. 损失函数、期望风险、经验风险2. 经验风险最小化和结构风险最小化2.1 结构风险(正则化)2.2 两者的定义3. 训练误差 与 测试误差4. 过拟合 与 欠拟合4.1 过拟合及解决方法4.2 交叉验证4.3 欠拟合5. 泛化误差 与 泛化误差上界5.1 泛化误差5.2 泛…

Filter Listener Ajax学习笔记

1 Filter Filter用于请求的过滤,如请求时,做登录的全局性校验 1.1 示例 在创建Filter前,可以通过启动Tomcat访问index.jsp http://localhost:8080/Mvc-Demo/index.jsp添加Filter后,重新启动Tomcat,并再次访问index…

8、java常见名词总结

一、JMM 1.1、JMM简介 JMM 是Java内存模型( Java Memory Model),简称JMM。它本身只是一个抽象的概念,并不真实存在,它描述的是一种规则或规范,是和多线程相关的一组规范。通过这组规范,定义了…

babel-plugin-transform-remove-console 项目打包去除console

安装babel-plugin-transform-remove-console 项目打包去除console npm install babel-plugin-transform-remove-console --save-dev 在vue项目中babel.config.js中: module.exports {plugins: ["transform-remove-console",], }; 如果只想在生产环境…

Java+SSM影院订票系统|电影院购票系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下 后台框架:Spring、SpringMVC、MyBatis UI界面:BootStrap、jQuery 、JSP 数据库:MySQL 系统分为前台订票和后台管理: 1.前台订票 用户注册、用户登录、查看电影列表、分类查看 电影搜索、查…

C语言基础篇 —— 5.0 详解C语言变量的四大属性

文章目录概述C语言变量四大属性存储类概念解析Linux 内存映像并解析作用域概念解析局部变量的代码块作用域函数名和全局变量的文件作用域同名变量的掩蔽规则生命周期概念解析栈变量的生命周期堆变量的生命周期数据段、bss段变量的生命周期代码段、只读段的生命周期链接属性概念…

Linux——虚拟机安装Linux系统

实验1-2 虚拟机安装Linux系统 VMware 9.0 虚拟机Linux镜像ISO文件相关工具可以在这里边找到 http://pan.baidu.com/s/1ntA18FJ 或者请自行下载使用 创建新的虚拟机,如下图: 下一步:选择安装配置类型为“典型”如下图: 下一步&…

k8s之Ingress

Ingress和Ingress控制器介绍 Ingress官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/ Ingress控制器官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress-controllers/ 在k8s中将一个…

Multipartfile判断文件类型的简单处理办法。

通过浏览器上传的文件在后台需要验证文件类型。如果单纯匹配后缀名的方式是有风险的,容易被换了后缀的病毒文件给破坏掉。 比如: 如果我上传已修改的文件。(把xlsx改成了jpg) 这样,无法识别出来真实的内容。 所以为了…

java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分布式微服务+高并发高可用高性能知识序幕就此拉开(六:Hystrix之熔断、降级、限流)~整起

Hystrix 中文文档:https://www.apiref.com/spring-cloud-zh/dalston/#_circuit_breaker_hystrix_clients服务雪崩:服务 A 调用了服务 B,服务 B 再调用了服务 C,但是因为某些原因,服务 C 顶不住了,这个时候大…

Strimzi Kafka Bridge(桥接)实战之三:自制sdk(golang版本)

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《Strimzi Kafka Bridge(桥接)实战》的第三篇,前文咱们掌握了Strimzi Kafka Bridge的基本功能:基于http提供各种kafk…

特海国际通过港交所上市聆讯:翻台率下滑明显,张勇夫妇为实控人

撰稿|汤汤 来源|贝多财经 近日,海底捞(HK:06862)海外业务分拆公司特海国际控股有限公司(下称“特海国际”)通过港交所上市聆讯。据贝多财经了解,特海国际将以介绍形式于港交所主板上市。所谓介绍形式&…

数据挖掘Java——Apriori算法的实现

一、Apriori算法的前置知识 Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和向下封闭检测两个阶段来挖掘频繁项集。 关联规则挖掘是数据挖掘中最活跃的研究方法之一,最初的动机是针对购物篮分析问题提出的,其目…

[附源码]Node.js计算机毕业设计工会会员管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

【Linux学习】多线程

目录前言一、初识线程1. 线程的概念2. 线程的优缺点3. 线程异常4. 线程的用途二、Linux中的线程和进程1. 进程和线程的区别2. 进程中的线程共享三、Linux线程控制1. POSIX线程库2. 创建线程3. 线程终止4. 线程等待5. 线程分离四、Linux线程互斥1. 线程互斥的概念2. 互斥量mutex…

蓝桥杯基础算法(一)—— 快速排序

文章目录1. 基本思想2. 图解过程3. 代码模板4. 例题讲解🍑 快速排序🍑 第 k 个数1. 基本思想 快速排序是 Hoare 于 1962年 提出的一种二叉树结构的交换排序方法。 其基本思想为: (1)确定分界点:在数组中…

从零开始的MySQL(1)

目录1.MySQL的安装2.MySQL的基本操作2.1 展示数据库2.2 创建数据库2.3 选中数据库2.4 删除数据库2.5 常用数据类型2.5.1 整形2.5.2 浮点数2.6 创建表2.7 查看表2.7 查看表结构2.8 删除表3.数据库增删改查3.1 单行插入3.2 多行插入3.3 插入日期3.4 select查询3.4.1 select3.4.2 …

Jprofiler监控服务器的cpu

现象&#xff1a;压测过程中&#xff0c;发现应用服务器的cpu使用率比较高>80%&#xff0c;我们就可以判断服务器的cpu使用率太高了。 一般cpu太高有两种情况&#xff0c; 1.接口的性能非常好&#xff0c;比如响应时间<10ms&#xff0c;tps很高&#xff0c;此时的cpu使用…

CSDN官方插件猿如意可以用ChatGPT啦!

什么是 ChatGPT Chat GPT 是一种由 AI 技术驱动的自然语言处理工具&#xff0c;可让您与聊天机器人进行类似人类的对话等它是基于OpenAI的GPT-3架构进行构建的&#xff0c;并经过训练&#xff0c;以便能够回答人类的问题并进行自然对话ChatGPT可以回答关于各种话题的问题&#…

基于SSM广州旅游攻略网站的设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;