IO流基本流

目录

什么是IO流

IO流的体系

字节流 

FileOutputStream

FileInputStream

字符集

字符流

FileReader

FileWriter

字节流和字符流的使用场景


什么是IO流

内存不能永久化存储,程序停止,数据丢失,所以要添加一个存档功能,存储到硬盘的文件,我们要知道文件在哪里和如何传输,文件的位置也就是File类:路径,而IO流就是解决如何传输的问题,IO流就是一个存储和读取数据的解决方案.因为IO流跟File是息息相关的,所以需要先回顾一下,可以查看这一篇文章Java File类

File 表示系统中的文件或者文件夹的路径

获取文件信息(大小,文件名,修改时间)  (判断文件的类型)  (创建文件/文件夹)  (删除文件/文件夹) ...

但是要注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据.如果我们要读写文件里面存储的数据就要学习本篇文章所学的IO流.

IO流   用于读写文件中的数据(可以读写文件,或网络中的数据)

问:IO流中,谁在读,谁在写?以谁为参照物看读写的方向呢?

答:以程序为参照物读写,回答内存也可以,因为程序就是运行在内存当中的

所以我们要进行分类,先让大家有一个整体的认知,再一种一种地去学习

IO流的体系

 

字节流 

FileOutputStream

操作本地文件的字节输出流,可以把程序中的数据写到本地文件中

书写步骤:

  1. 创建字节输出流
  2. 写数据
  3. 释放资源
public class ByteStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*
         *演示:字节输出流FileOutputStream
         * 实现需求:写出一段文字到本地文件中.(暂时不写中文)
         *
         * 实现步骤:
         *      创建对象
         *      写出数据
         *      释放资源
         */

        //1.创建对象
        //写出  输出流 OutputStream
        //本地文件 File
        FileOutputStream fos = new FileOutputStream("Myio\\a.txt");
        //2.写出数据
        fos.write(97);
        //3.释放资源
        fos.close();
    }
}

如果不释放资源:

public class ByteStreamDemo1 {
    public static void main(String[] args) throws IOException {
       /*
        void write(int b)   一次写一个字节数据
        void write(byte[] b)  一次写一个字节数组数据
        void write(byte[] b,int off,int len)  一次写一个字节数组的部分数据
                   数组      起始索引   个数
        */

        //1.创建对象
        FileOutputStream fos = new FileOutputStream("Myio\\a.txt");
        //2.写出数据
//        fos.write(97);//a
//        fos.write(98);//b

       byte[] bytes = {97,98,99,100,101};
//        fos.write(bytes);
        fos.write(bytes,1,2);//b c

        //3.释放数据
        fos.close();
    }
}

public class ByteStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*
            换行写:

            续写:

         */

        //1.创建对象
        FileOutputStream fos = new FileOutputStream("Myio\\a.txt",true);
        //2.写出数据
        String str = "asdfgh";
        byte[] arr = str.getBytes();
//        System.out.println(Arrays.toString(arr));
        fos.write(arr);

        //<h1>换行</h1>
        //再次写出一个换行符
        //windows: \r\n 回车换行
        //Linux:   \n
        //Mac:     \r
       /*
          细节:
                在windows操作系统当中,java对回车换行进行了优化
                虽然完整的是\r\n,但是我们写其中一个\r或者\n
                java也可以实现换行,因为java在底层会补全
          建议:
                不要省略,还是写全了.
        */
        /*
        <h1>续写</h1>
            如果想要续写,打开续写开关即可
            开关位置:创建对象的第二个参数
            默认false:表示关闭续写,此时创建对象会清空文件
            手动传递true:表示打开续写,此时创建对象不会清空文件
         */

        String wrap = "\r\n";
        byte[] bytes = wrap.getBytes();
        fos.write(bytes);

        String str2 = "666";
        byte[] arr2 = str2.getBytes();
        fos.write(arr2);
        //3.释放资源
        fos.close();
    }
}

FileInputStream

操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来.

书写步骤:

  1. 创建字节输入流对象
  2. 读数据
  3. 释放资源
import java.io.FileInputStream;
import java.io.IOException;

public class ByteStreamDemo1 {
    public static void main(String[] args) throws IOException {
        //1.创建对象FileInputStream
        FileInputStream fis = new FileInputStream("Myio\\a.txt");
        //2.读取数据
        int b1 = fis.read();// 97
        System.out.println(b1);


        //3.释放资源
        fis.close();
    }
}

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

public class ByteStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*
            字节输入流循环读取
         */

        //1.创建对象
        FileInputStream fis = new FileInputStream("Myio\\a.txt");
        //2.循环读取
        int b;
        /**
         * read :表示读取数据,而且是读取一个数据就移动一次指针
         * 所以一定要定义一个第三方变量 b
         */
        while((b=fis.read())!= -1){
            System.out.print((char)b);
        }

        //3.释放资源
        fis.close();
    }
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*
        *   练习:
        *       文件拷贝
        *       把D:\yjy\movie.mp4拷贝到当前模块下
        *
        *    注意:
        *   选择一个比较小的文件,不要太大,大文件拷贝后面会学
        *
        *
         */

        //1.创建对象
        FileInputStream fis = new FileInputStream("D:\\yjy\\movie.mp4");
        FileOutputStream fos = new FileOutputStream("Myio\\copy.mp4");
        //2.拷贝
        //核心思想:边读边写
        int b;
        while((b=fis.read())!=-1){
            fos.write(b);
        }
        //3.释放资源
        //规则:先开的流最后在关闭
        fos.close();
        fis.close();
        //还可以统计一下拷贝时间,单位毫秒 复习System这个类里面的方法
    }
}

因为FileInputStream一次读写一个字节,所以速度比较慢

 

修改成这样就可以避免啦! 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*
        *public int read(byte[] buffer)   一次读一个字节数组数据
        *
         */

        //1.创建对象
        FileInputStream fis = new FileInputStream("Myio\\a.txt");
        //2.读取数据
        byte[] bytes = new byte[2];
        //一次读取多个字节数据 具体越多 跟数组的长度有关
        //返回值 本次读取到多少个字节数据
        int len1 = fis.read(bytes);
        System.out.println(len1);
        String str1 = new String(bytes,0,len1);
        System.out.println(str1);

        int len2 = fis.read(bytes);
        System.out.println(len2);
        String str2 = new String(bytes,0,len2);
        System.out.println(str2);




        //3.释放资源
        fis.close();
    }
}

用这个方法改写一下拷贝文件的练习:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamDemo1 {
    public static void main(String[] args) throws IOException {
        long start = System.currentTimeMillis();


        //1.创建对象
        FileInputStream fis = new FileInputStream("D:\\yjy\\movie.mp4");
        FileOutputStream fos = new FileOutputStream("Myio\\copy.mp4");
        //2.拷贝
        int len;
        byte[] bytes = new byte[1024*1024*5];
        while((len=fis.read(bytes))!=-1){
            fos.write(bytes,0,len);
        }
        //3.释放资源
        fos.close();
        fis.close();

        long end = System.currentTimeMillis();
        System.out.println(end-start);

    }
}

之前我们所有的异常都是直接抛出处理,但是也要学习一下try...catch异常处理

以后工作中都是抛出处理 会学springboot框架会把我们抛出的异常统一处理,这个代码我们只需要了解即可.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamDemo1 {
    public static void main(String[] args) {

        //1.创建对象
        FileInputStream fis=null;
        FileOutputStream fos=null;

        try {
            long start = System.currentTimeMillis();
            fis = new FileInputStream("D:\\yjy\\movie.mp4");
            fos = new FileOutputStream("Myio\\copy.mp4");
            //2.拷贝
            int len;
            byte[] bytes = new byte[1024*1024*5];
            while((len=fis.read(bytes))!=-1){
                fos.write(bytes,0,len);
            }


            long end = System.currentTimeMillis();
            System.out.println(end-start);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            //3.释放资源
            if(fos!=null){//防止如果文件不存在导致空指针异常
                try {
                    fos.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

还可以简化:

我们在前面说,字节流读取文件的时候,文件中不要有中文

想要知道乱码出现的原因,这就是要知道我们今天要说到的字符集

字符集

原因2:编码和解码的时候用的是不同的码表

如何不产生乱码?

  1. 不要用字节流读取文本文件
  2. 编码解码时使用同一个码表,同一个编码方式

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class ByteStreamDemo1 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        /*
            Java中编码的方法
                public byte[] getBytes()    使用默认方法进行编码
                public byte[] getBytes(String charsetName)  使用指定方法进行编码


            Java中解码的方法
                String(byte[] bytes)        使用默认方式进行解码
                String(byte[] bytes,String,charseName)       使用指定方法进行解码

         */

        //1.编码
        String str = "ai你哟";
        byte[] byte1 = str.getBytes(); // eclipse 是GBK   Idea是UTF-8
        System.out.println(Arrays.toString(byte1));

        byte[] byte2 = str.getBytes("GBK");
        System.out.println(Arrays.toString(byte2));

        //解码
        String str2 = new String(byte1);
        System.out.println(str2);

        String str3 = new String(byte1,"GBK");
        System.out.println(str3);
        
    }
}

第二个乱码原因直接都调成utf-8即可

那么我们来解决第一个问题,是否存在一种流,默认也是一次读取一个字节,当遇到中文时,一次读多个字节

字符流

FileReader

public class CharStream {
    public static void main(String[] args) throws IOException {
        //1.创建对象并关联本地文件
        FileReader fr = new FileReader(new File("Myio\\a.txt"));
        //2.读取数据 read()
        //字符流的底层也是字节流,默认也是一个字节一个字节读取的
        //如果遇到中文就会一次读取多个,GBK一次读两个字节,UTF-8一次读取三个字节

        //read()细节:
        //1.read():默认也是一个字节一个字节的读取的,如果遇到中文就会一次读取多个
        //最终把这个十进制作为返回值
        //这个十进制的数据也表示在字符集上的数字
        //英文:文件里面二进制数据:0110 0001
        //        read()方法进行读取,解码并转成十进制97
        //中文:文件里面的二进制数据 11100110 10110001 10001001
        //        read()方法进行读取,解码并转成十进制27721

        //我如果想看到中文汉字,就是把这些十进制数据,再进行强转

        int ch;
        while((ch=fr.read())!=-1){
            System.out.print((char)ch);
        }
        //3.释放资源
        fr.close();
    }
}
import java.io.FileReader;
import java.io.IOException;

public class CharStream {
    public static void main(String[] args) throws IOException {
        //1.创建对象
        FileReader fr= new FileReader("Myio\\a.txt");
        //2.读取数据
        char[] chars = new char[2];
        int len;
        //read(chars):读取数据,解码,强转三步合并了,把强转之后的字符放到数组当中
        //空参的read+强转类型转换
        while((len=fr.read(chars))!=-1){
            //把数组中的数据变成字符串再进行打印
            System.out.print(new String(chars,0,len));
        }
        //3.释放资源
        fr.close();
    }
}

FileWriter

public class CharStream {
    public static void main(String[] args) throws IOException {
//        FileOutputStream fos = new FileOutputStream("Myio\\a.txt");
//
//        fos.write(97);//字节流 每次只能操作一个字符
//
//        fos.close();

        FileWriter fw = new FileWriter("Myio\\a.txt",true);

        //fw.write(25105);//根据字符集的编码方式进行编码,把编码之后的数据写到文件中去
//        fw.write("牛逼呀!");//符号也是分中文和英文的 中文3 英文1
        char[] chars = {'a','b','c','d','我'};
        fw.write(chars);

        fw.close();
    }
}

文本文件内容:ab我

问题一:   如果文件超出8192

问题2:如果在中间加了一个FileWriter

字节流和字符流的使用场景

import java.io.*;


public class CharStream {
    public static void main(String[] args) throws IOException {
        //拷贝一个文件夹,考虑子文件夹

        //1.创建对象表示数据源
       File src = new File("D:\\aaa\\src");
       //2.创建对象表示目的地
        File dest = new File("D:\\aaa\\dest");
        //3.调用方法开始拷贝
        copydir(src,dest);
    }

    /**
     * 作用:拷贝文件夹
     * 参数一:数据源
     * 参数二:目的地
     * @param src
     * @param dest
     */

    private static void copydir(File src, File dest) throws IOException {
        dest.mkdirs();
        //递归
        //1.进入数据源
        File[] files = src.listFiles();
        //2.遍历数组
        for (File file : files) {
            if(file.isFile()){
                //3.判断文件,拷贝 文件开始 文件结束
                FileInputStream fis = new FileInputStream(file);//a.txt
                FileOutputStream fos = new FileOutputStream(new File(dest,file.getName()));//也叫a.txt
                byte[] bytes = new byte[1024];
                int len;
                while((len=fis.read(bytes))!=-1){
                    fos.write(bytes,0,len);
                }
                fos.close();
                fis.close();
            }else{
                //4.判断文件夹,递归
                copydir(file,new File(dest,file.getName()));
            }
        }
    }
}

加密代码

import java.io.*;


public class CharStream {
    public static void main(String[] args) throws IOException {
        /**
         *  ^ : 异或
         *      两边相同:false
         *      两边不同:true
         *
         */
        //100 : 1100100
        //10:      1010
        //______________
        //      1101110
        //十进制:110
//        System.out.println(100^10);//110
//        System.out.println(110^10);//100

        //1.创建对象关联原始文件
        FileInputStream fis = new FileInputStream("Myio\\冰冰.jpg");
        //2.创建对象关联加密文件
        FileOutputStream fos = new FileOutputStream("Myio\\ency.jpg");
        //3.加密处理
        int b;
        while((b=fis.read())!=-1){
            fos.write(b^2);
        }
        //释放资源
        fos.close();
        fis.close();
    }
}

解密代码

import java.io.*;


public class CharStream {
    public static void main(String[] args) throws IOException {

        //1.创建对象关联原始文件
        FileInputStream fis = new FileInputStream("Myio\\ency.jpg");
        //2.创建对象关联加密文件
        FileOutputStream fos = new FileOutputStream("Myio\\redu.jpg");
        //3.加密处理
        int b;
        while((b=fis.read())!=-1){
            fos.write(b^2);
        }
        //释放资源
        fos.close();
        fis.close();
    }
}

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;


public class CharStream {
    public static void main(String[] args) throws IOException {
        //1.读取数据
        FileReader fr = new FileReader("Myio\\a.txt");
        StringBuilder sb = new StringBuilder();
        int ch;
        while((ch=fr.read())!=-1){
            sb.append((char)ch);
        }
        fr.close();
        System.out.println(sb);
        //2.排序
        //2-1-9-4-7-8
        String str = sb.toString();
        String[] arrStr = str.split("-");

        ArrayList<Integer> list = new ArrayList<>();
        for (String s : arrStr) {
            int i = Integer.parseInt(s);
            list.add(i);
        }
//        System.out.println(list);
        Collections.sort(list);
        System.out.println(list);
        //3.写出
        FileWriter fw = new FileWriter("Myio\\a.txt");
        for (int i = 0; i < list.size(); i++) {
            if(i==list.size()){
                fw.write(list.get(i) + "");
            }else{
                fw.write(list.get(i)+"-");
            }
        }
        fw.close();
    }
}
public class CharStream {
    public static void main(String[] args) throws IOException {
        //1.读取数据
        FileReader fr = new FileReader("Myio\\a.txt");
        StringBuilder sb = new StringBuilder();
        int ch;
        while((ch=fr.read())!=-1){
            sb.append((char)ch);
        }
        fr.close();
        System.out.println(sb);
        //2.排序  Stream流

        Integer[] arr = Arrays.stream(sb.toString().split("-"))
                .map(Integer::parseInt).sorted().toArray(Integer[]::new);
//                .map(new Function<String, Integer>() {
//                    @Override
//                    public Integer apply(String s) {
//                        return Integer.parseInt(s);
//                    }
//                })

        System.out.println(Arrays.toString(arr));

        //3.写出
        FileWriter fw = new FileWriter("Myio\\a.txt");
        String s = Arrays.toString(arr).replace(", ","-");
        String result = s.substring(1,s.length()-1);
        System.out.println(s);
        fw.write(result);
        fw.close();
    }
}

细节一:文件中的数据不要换行 因为会有\r\n

细节二:bom头 也就是在文件前有一个隐藏的字符标记 有隐藏的数据 里面记录了一些文件的信息,比如说字符编码

如果你选择了这个那很可能这个文件的大小会比你预算的要多因为包含bom头

idea中可以设置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java实现二叉树(下)

1.前言 http://t.csdnimg.cn/lO4S7 在前文我们已经简单的讲解了二叉树的基本概念&#xff0c;本文将讲解具体的实现 2.基本功能的实现 2.1获取树中节点个数 public int size(TreeNode root){if(rootnull){return 0;}int retsize(root.left)size(root.right)1;return ret;}p…

Python 全栈 Web 应用模板:成熟架构,急速开发 | 开源日报 No.223

tiangolo/full-stack-fastapi-template Stars: 15.6k License: MIT full-stack-fastapi-template 是一个现代化的全栈 Web 应用模板。 使用 FastAPI 构建 Python 后端 API。使用 SQLModel 进行 Python SQL 数据库交互&#xff08;ORM&#xff09;。Pydantic 用于数据验证和设…

excel里如何的科学计数法的数字转换成数值?

比如下图&#xff0c;要想把它们转换成3250跟1780&#xff0c;有什么快捷的办法吗&#xff1f; 科学计数法在excel里的格式&#xff0c;与我们常规在数学上写的有差异。这个转换可以这样做&#xff1a; 1.转换后的效果&#xff1a; 2.问题分析 题目中所附截图&#xff0c;单元…

HTML重要标签重点及属性(表格表单列表)——之转生在异世界学前端

表格标签 table是用于定义表格的标签 tr是用于定义表格的行 td是用来定义表格的列&#xff0c;th是表头一般只有一个表头会加粗 表格属性border是设置边框值为1;1是有边框&#xff0c; align设置居中对齐方式center&#xff0c;left&#xff0c;right cellpadding设置文字…

Linux操作系统中关于用户管理的操作

创建新用户 useradd 【选项】 用户名 在/etc/passwd中以追加的方式在passwd的最后一行添加用户信息。 可以使用命令tail -n 1/etc/passwd查看文件的最后一行内容。 ls /home/首先/home/这是普通用户的家目录&#xff0c; 在/home/下会有一个跟用户名同名的家目录&#xf…

Arrow, 一个六边形的 Python 时间库

文章目录 Arrow, 一个六边形的 Python 时间库第一部分&#xff1a;背景介绍第二部分&#xff1a;库是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解决方案第…

Mac 软件清单

~自留备用~ Macbook用了几年之后, 512G的内置硬盘有些紧张了, 这几天总是提示空间不足, 就重装了下系统, 重装之后竟然不记得有些软件的名字和下载链接, 特此记录 Office 办公套件 直接从微软官网下载Office 安装包https://officecdnmac.microsoft.com/pr/C1297A47-86C4-4C1F…

前端三剑客 —— JavaScript (第六节)

目录 内容回顾 BOM编程 DOM编程* document对象 document对象的属性 document对象的方法 DOM对象节点 操作DOM对象内容 操作DOM对象的属性 --- DOM对象.属性名称 --- DOM对象[属性名称] --- 调用系统API &#xff08;Application Program interface&#xff09;&#…

汇编语言知识点整理(应付考试专用,想学习找其他的)

1 基础知识 1.1 信息在计算机内部的表示和存储 1.1.1 信息存储的基本概念 信息在计算机内部是以二进制数据的形式在存储器中存取的。介绍两个基本概念&#xff1a; 位&#xff08;Bit&#xff09; 计算机中最小的数据单位&#xff0c;一位有0、1两状态。Bit是计算机中最小…

对常见FTP客户端/服务器的调查与分析

前言 主要是想看看常见的服务器和客户端是如何实现协议中要求的功能的&#xff0c;。 比如RF959要求的记录结构&#xff08;Record Structure&#xff09;、页结构&#xff08;Page Structure&#xff09;、Block Mode、Compress Mode&#xff0c;看起来就很抽象。 实测发现…

【算法】回溯:与递归,dfs的同质与分别,剪枝与恢复现场的详细理解,n皇后的回溯解法及算法复杂度分析。

目录 ​编辑 1.什么是回溯 2.关于剪枝 3.关于恢复现场 4.题目&#xff1a;二叉树的所有路径&#xff08;凸显恢复现场&#xff1a;切实感受回溯与深搜&#xff09; 问题分析 ①函数设置为&#xff1a;void Dfs(root) ②函数设置为&#xff1a;void Dfs(root,path) 解题思想&…

Day101:漏洞发现-漏扫项目篇NucleiYakitGobyAfrogXrayAwvs联动中转被动

目录 特征类-三方Poc调用&模版Poc调用 案例1&#xff1a;单点对某特征点进行安全评估 Goby-综合类 Nuclei-较综合类 Afrog-特征类 Yakit-可特征可综合 案例2&#xff1a;新型对某特征点进行安全评估 综合类-主动漏扫&中转联动&被动联动 案例1&#xff1a;…

给自己的机器人部件安装单目摄像头并实现gazebo仿真功能

手术执行器添加摄像头 手术执行器文件夹surgical_new内容展示如何添加单目摄像头下载现成的机器人环境文件启动仿真环境 手术执行器文件夹surgical_new内容展示 进入src文件夹下选择进入vision_obliquity文件夹 选择launch 有两个可用gazebo中rviz展示的launch文件&#xff0…

当我们使用git 上传码云的时候报错:Push rejected Push to origin/master was rejected

在我们推送成果去git&#xff08;码云&#xff09;的过程中报错&#xff1a;Push rejected Push to origin/master was rejected 这个问题是我们在推的时候被拒绝了 控制台报错&#xff1a; 18:46:19.665: [zengqingqingandluoxuwen] git -c credential.helper -c core.quote…

软件无线电安全之GNU Radio基础 -上

GNU Radio介绍 GNU Radio是一款开源的软件工具集&#xff0c;专注于软件定义无线电&#xff08;SDR&#xff09;系统的设计和实现。该工具集支持多种SDR硬件平台&#xff0c;包括USRP、HackRF One和RTL-SDR等。用户可以通过GNU Radio Companion构建流程图&#xff0c;使用不同…

嵌入式学习54-ARM3(中断和时钟)

知识零碎&#xff1a; import &#xff0c;定义表示这是一个外部变量的标号&#xff0c;不是在本程序定义的 export &#xff0c;表示本程序里面用到的变量提供给 其他模块 调用的。 按键模块中&#xff0c;K1和K6所连接的高电阻&#xff0c;根据外部变化变化 …

HiveQL练习(hive3.x)

零、准备工作 1. Hive环境安装 参见搭建Hive 3.x环境&#xff08;CentOS 9 Hadoop3.x&#xff09; 2. 准备数据 在虚拟机HOME目录创建如下文件内容&#xff1a; cd /root vi emp.csv内容如下&#xff1a; 7369,SMITH,CLERK,7902,1980/12/17,800,,20 7499,ALLEN,SALESMAN…

SpringMVC--获取请求参数 / 域对象共享数据

目录 1. SpringMVC 获取请求参数 1.1. 通过ServletAPI获取 1.2. 控制器方法形参获取 1.3. RequestParam 1.4. RequestHeader 1.5. CookieValue 1.6. 通过POJO获取请求参数 1.7. 解决获取请求参数的乱码问题 2. 域对象共享数据 2.1. 三大域对象 2.2. 准备工作 2.3. S…

8:系统开发基础--8.5:系统设计、8.6:系统测试 、8.7:软件维护 、8.8:软件质量保证、8.9:软件文档

转上一节&#xff1a; http://t.csdnimg.cn/X0GjWhttp://t.csdnimg.cn/X0GjW 8.5&#xff1a;系统设计 考点1&#xff1a;系统设计概述 1&#xff1a;软件设计的任务与活动 体系结构设计&#xff1a;定义软件系统各主要部件之间的关系。 数据设计&#xff1a;基于E-R图确定…

免费的 ChatGPT 网站(六个)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、insCode二、讯飞星火三、豆包四、文心一言五、通义千问六、360智脑 现在智能…