Java的第十四篇文章——文件和IO流

news2024/11/24 4:42:37

目录

学习目标

1. FIle类

1.1 File类的构造方法

1.2 FIle类的创建方法

1.3 File类的删除方法

1.4 File类的判断方法

1.4.1 绝对路径和相对路径

1.5 File类的获取的方法

1.6 File类的方法listFIles()

2. IO流对象

2.1 IO流对象的分类

2.1.1 按照操作的文件类型分类

2.1.2 按照数据的流向分类

2.1.3 IO流对象的分类归纳

3. 字节输出流

3.1 FileOutputStream

3.2 字节输出流写入文件的步骤

3.3 写入单个字节

3.4 写入字节数组

3.5 追加写入和换行

3.6 IO异常处理

4. 字节输入流

4.1 FileInputStream

4.2 字节输入流读取单个字节

4.3 字节输入流读取字节数组

5. 文件复制

6. 字节流的缓冲流

6.1 BufferedOutputStream 构造方法

6.2 BufferedInputStream 构造方法

7. 字符流

7.1 OutputStreamWriter类

7.2 InputStreamReader类

7.3 便捷类

7.4 字符输出流的缓冲流

7.6 字符流复制文本文件

8. 字符流和字节流的区别

9. 打印流

10. 基本数据类型流(现阶段作用不大)


学习目标

  • IO流对象的分类

  • 字节流

  • 字符流

  • 转换流

  • 打印流

  • 对象序列化

  • 基本数据类型操作流

1. FIle类

  • 文件夹 Directory:存储文件的容器,防止文件重名而设置,文件归类,文件夹本身不存储任何数据,计算专业数据称为 目录

  • 文件 File,存储数据的,同一个目录中的文件名不能相同

  • 路径 Path:一个目录或者文件在磁盘中的位置

    • c:\jdk8\jar 是目录的路径,是个文件夹的路径

    • c:\jdk8\bin\javac.exe 是文件的路径

  • File类,描述目录文件和路径的对象

  • 平台无关性

1.1 File类的构造方法

  • File (String pathname)传递字符串的路径名

  • File(String parent,String child)传递字符串的父路径,字符串的子路径

  • File(File parent,String child)传递File类型的父路径,字符串的子路径

public static void main(String[] args) {
        fileMethod03();
    }
    /**
     * File(File parent,String child)传递File类型的父路径,字符串的子路径
     */
    public static void fileMethod03(){
        File parent = new File("C:/Java/jdk1.8.0_221");
        String child = "bin";
        File file = new File(parent,child);
        System.out.println(file);
    }

    /**
     * File(String parent,String child)传递字符串的父路径,字符串的子路径
     * C:\Java\jdk1.8.0_221\bin
     * C:\Java\jdk1.8.0_221 是 C:\Java\jdk1.8.0_221\bin 的父路径
     */
    public static void fileMethod02(){
        String parent = "C:/Java/jdk1.8.0_221";
        String child = "bin";
        File file = new File(parent,child);
        System.out.println(file);
    }

    /**
     * File (String pathname)传递字符串的路径名
     */
    public static void fileMethod(){
        //字符串的路径,变成File对象
        File file = new File("C:\\Java\\jdk1.8.0_221\\bin");
        System.out.println(file);
    }

1.2 FIle类的创建方法

  • boolean createNewFile()创建一个文件,文件路径写在File的构造方法中

  • boolean mkdirs()创建目录,目录的位置和名字写在File的构造方法中

boolean mkdir() : 创建此抽象路径名指定的目录。
boolean mkdirs() : 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。

    //创建文件夹 boolean mkdirs()
    public static void fileMethod02(){
        File file = new File("C://Java//1.txt");
        boolean b = file.mkdirs();
        System.out.println("b = " + b);
    }

    //创建文件 boolean createNewFile()
    public static void fileMethod() throws IOException {
        File file = new File("C://Java//1.txt");
        boolean b = file.createNewFile();
        System.out.println("b = " + b);
    }

1.3 File类的删除方法

  • boolean delete() 删除指定的目录或者文件,路径写在File类的构造方法

    • 不会进入回收站,直接从磁盘中删除了,有风险

    public static void fileMethod03(){
        File file = new File("C:/Java/aaa");
        boolean b = file.delete();
        System.out.println("b = " + b);
    }

1.4 File类的判断方法

  • boolean exists() 判断构造方法中的路径是否存在

  • boolean isDirectory()判断构造方法中的路径是不是文件夹

  • boolean isFile()判断构造方法中的路径是不是文件

  • boolean isAbsolute() 判断构造方法中的路径是不是绝对路径

1.4.1 绝对路径和相对路径

  • 绝对路径

    • 在磁盘中的路径具有唯一性

    • Windows系统中,盘符开头 C:/Java/jdk1.8.0_221/bin/javac.exe

    • Linux或者Unix系统,/开头,磁盘根 /usr/local

    • 互联网路径:www.baidu.com

      • https://item.jd.com/100007300763.html

      • https://pro.jd.com/mall/active/3WA2zN8wkwc9fL9TxAJXHh5Nj79u/index.html

  • 相对路径

    • 必须有参照物

    • C:/Java/jdk1.8.0_221/bin/javac.exe

    • bin是参考点:父路径 C:/Java/jdk1.8.0_221

    • bin是参考点:子路径 javac.exe

    • bin参考点:父路径使用 ../表示

   /**
     * boolean isAbsolute() 判断构造方法中的路径是不是绝对路径
     * 不写绝对形式的路径,写相对形式的,默认在当前的项目路径下
     */
    public static void fileMethod04(){
        File file = new File("C:/Java/jdk1.8.0_221/bin/javac.exe");
        boolean b = file.isAbsolute();
        System.out.println("b = " + b);

        File file2 = new File("javac.exe");
        b = file2.isAbsolute();
        System.out.println("b = " + b);
    }

1.5 File类的获取的方法

  • File getAbsoluteFile() 获取绝对路径,返回值是File类型

  • File getParentFile() 获取父路径,返回值是File类型

  • String getName() 获取名字,File构造方法中的路径的名字

  • String getPath() 获取File构造方法中的路径,完整的路径转成String返回

  • long length()获取文件的字节数

/**
* File类的获取方法
* - File getAbsoluteFile() 获取绝对路径,返回值是File类型
* - File getParentFile() 获取父路径,返回值是File类型
*/
public static void fileMethod02(){
    File file = new File("C:\\Java\\jdk1.8.0_221\\bin\\java.exe");
    //获取绝对路径
    File absoluteFile = file.getAbsoluteFile();
    System.out.println("absoluteFile = " + absoluteFile);
    //获取父路径
    File parentFile = file.getParentFile().getParentFile();
    System.out.println("parentFile = " + parentFile);
    //文件的字节数
    long length = file.length();
    System.out.println("length = " + length);
}

/**
* File类获取方法
* - String getName() 获取名字,File构造方法中的路径的名字
* - String getPath() 获取File构造方法中的路径,完整的路径转成String返回
*/
public static void fileMethod(){
    File file = new File("C:\\Java\\jdk1.8.0_221\\bin\\java.exe");
    //getName()获取名字
    String name = file.getName();
    System.out.println("name = " + name);

    //getPath()构造方法参数,转成字符串
    String path = file.getPath();
    System.out.println("path = " + path);
}

1.6 File类的方法listFIles()

返回值是File[] 数组,存储了多个File对象,方法的作用是遍历当前的文件夹。

    public static void main(String[] args) {
        //fileMethod();

        foreachDir(new File("C:\\Java\\jdk1.8.0_221"));
    }
    /**
     * 目录的递归遍历 : 传递参数,遍历哪个路径,传递过来
     */
    public static void foreachDir(File dir){
        System.out.println(dir);
        //listFiles()遍历目录  C:\Java\jdk1.8.0_221
        File[] files = dir.listFiles();
        //遍历数组,取出数组中的File对象
        //是遍历到的所有文件的全路径 (绝对路径)
        for(File f : files){
            //判断遍历到的路径是不是文件夹
            if(f.isDirectory()) //C:\Java\jdk1.8.0_221\jre  ,进入继续遍历
                //递归调用自己,传递路径
                foreachDir(f);
            else
                System.out.println(f);
        }
    }

    /**
     * 遍历目录
     */
    public static void fileMethod(){
        File file = new File("C:\\Java\\jdk1.8.0_221");
        File[] files = file.listFiles();
        for(File f : files){
            System.out.println(f);
        }
    }

2. IO流对象

IO:Input Output IO作用是将数据从一个设备中流入到另一个设备

数据文件,从磁盘中流向内存中,从磁盘中流向移动存储设备,从一台计算机流向另一台计算机

一切都是字节:任何数据文件都是字节组成,字节是计算机中最小的存储单元 (Java源码、游戏、音乐、电影)

2.1 IO流对象的分类

2.1.1 按照操作的文件类型分类

  • 文本类型文件 -- 选择流对象字符流

    • 什么是文本文件 : 使用文本工具,记事本,notepad++ ,editplus 打开文件后人类可以直接阅读

  • 非文本类型文件 -- 选择流对象字节流

2.1.2 按照数据的流向分类

  • 输入流 : Java程序从其它地方读取数据

  • 输出流 : Java程序中的数据,写入到其它地方

2.1.3 IO流对象的分类归纳

  • 字节输出流 : OutputStream 抽象类

  • 字节输入流 : InputStream 抽象类

  • 字符输出流 : Writer 抽象类

  • 字符输入流 : Reader 抽象类

3. 字节输出流

java.io.OutputStream是所有字节输出流的超类:可以写入任何类型文件

  • 写入字节的方法 write

    • void write(int b) 写入单个字节

    • void write(byte[] b)写入字节数组

    • void write(byte[] b,int off,int len) 写入数组的一部分,开始索引,写入的个数

3.1 FileOutputStream

  • 构造方法 : FileOutputStream(File file)

  • 构造方法 : FileOutputStream(String file)

    • 创建字节输出流对象,绑定参数就是要写入的数据目的

JVM很聪明 : 任何一个操作系统都具备IO的能力,JVM依赖操作系统实现IO功能,IO流对象使用完毕后,要释放资源

3.2 字节输出流写入文件的步骤

  • 创建字节输出流对象,构造方法中,绑定文件路径,写入目的

  • 调用流对象的方法write写入数据

  • 释放资源

3.3 写入单个字节

    /**
     * 写入单个字节
     * new FileOutputStream("c:/1.txt"); 文件没有就创建,有了就覆盖
     */
    public static void writeByte() throws IOException {
        //创建字节输出流对象,构造方法中,绑定文件路径,写入目的
        FileOutputStream fos = new FileOutputStream("c:/1.txt");
        //写入单个字节
        fos.write(45);
        fos.write(49);
        fos.write(48);
        fos.write(48);
        //释放资源
        fos.close();
    }

3.4 写入字节数组

    /**
     * 写入字节数组
     */
    public static void writeByteArray() throws IOException {
        //创建字节输出流对象,构造方法中,绑定文件路径,写入目的
        FileOutputStream fos = new FileOutputStream("c:/1.txt");
        byte[] bytes = {97,98,99,100,101,102};
        //写入字节数组
        fos.write(bytes);
        //写入字节数组中文
        fos.write("你好,我好,大家好".getBytes());
        //写入数组一部分
        fos.write(bytes,1,3);
        //释放资源
        fos.close();
    }

3.5 追加写入和换行

  • 追加写入,FileOutputStream构造方法的第二个参数写true

  • 换行写入,使用Windows系统的换行符号 \r\n

    /**
     * 追加写入和换行
     */
    public static void writeAppend()throws IOException {
        //创建字节输出流对象,构造方法中,绑定文件路径,写入目的
        FileOutputStream fos = new FileOutputStream("c:/1.txt",true);
        fos.write(65);
        //写入换行符号
        fos.write("\r\n".getBytes());
        fos.write(66);
        //释放资源
        fos.close();
    }

3.6 IO异常处理


    /**
     *  try catch异常处理 : close()写在finally
     */
    public static void write2()  {
        //提升作用域 : try外定义变量,try创建对象
        FileOutputStream fos = null;
        FileOutputStream fos2 = null;
        try {
            //创建字节输出流对象,构造方法中,绑定文件路径,写入目的
            fos = new FileOutputStream("c:/1.txt");
            fos2 = new FileOutputStream("c:/2.txt");
            //写入单个字节
            fos.write(45);
            fos.write(49);
            fos.write(48);
            fos.write(48);
        }catch (IOException ex){
            ex.printStackTrace();
        }finally {
            //释放资源
            try {
                //流对象创建失败,fos变量的值是空,不能调用close
                if(fos != null)
                    fos.close();
            }catch (IOException ex){
                ex.printStackTrace();
            }

            //释放资源
            try {
                //流对象创建失败,fos变量的值是空,不能调用close
                if(fos2 != null)
                    fos2.close();
            }catch (IOException ex){
                ex.printStackTrace();
            }
        }
    }


    /**
     *  try catch异常处理 : close()写在finally
     */
    public static void write()  {
        //提升作用域 : try外定义变量,try创建对象
        FileOutputStream fos = null;
        try {
            //创建字节输出流对象,构造方法中,绑定文件路径,写入目的
            fos = new FileOutputStream("q:/1.txt");
            //写入单个字节
            fos.write(45);
            fos.write(49);
            fos.write(48);
            fos.write(48);
        }catch (IOException ex){
            ex.printStackTrace();
        }finally {
            //释放资源
            try {
                //流对象创建失败,fos变量的值是空,不能调用close
                if(fos != null)
                    fos.close();
            }catch (IOException ex){
                ex.printStackTrace();
            }
        }
    }

4. 字节输入流

java.io.InputStream是所有字节输入流的超类 : 可以读取任何类型文件

  • 读取字节的方法 read()

    • int read() 读取单个字节,读取到流的末尾返回 -1

    • int read(byte[] b)读取字节数组,读取到流的末尾返回 -1

4.1 FileInputStream

  • 构造方法 : FileInputStream(File file)

  • 构造方法 : FileInputStream(String file)

    • 创建字节输入流对象,绑定参数就是要读取的数据源文件

4.2 字节输入流读取单个字节

    /**
     * 字节输入流,读取单个字节
     * int read() 读取单个字节
     */
    public static void readByte()throws IOException {
        //创建字节输入流对象,绑定数据源文件
        FileInputStream fis = new FileInputStream("c:/1.txt");
        //读取单个的字节
        //循环读取,条件 read()!=-1就行
        int r = 0;
        while ( (r = fis.read()) !=-1){
            System.out.print((char) r);
        }
        //释放资源
        fis.close();
    }

4.3 字节输入流读取字节数组

    /**
     * 字节输入流,读取字节数组
     * int read(byte[] b) 读取字节数组
     * 返回值 : 返回读取到的字节个数
     * String类的构造方法 new String(字节数组,开始索引,转换的个数)
     */
    public static void readByteArray()throws IOException{
        //创建字节输入流对象,绑定数据源文件
        FileInputStream fis = new FileInputStream("c:/1.txt");
        byte[] bytes = new byte[50];
        //定义变量,保存read方法的返回值
        int r = 0 ;
        while ( (r=fis.read(bytes)) !=-1){
            System.out.print(new String(bytes,0,r));
        }

        fis.close();
    }

5. 文件复制

实现文件的复制功能,操作系统中的Ctrl+C,Ctrl+V一样。原理上就是字节搬家

   /**
     * 文件复制,就是IO流对象的读写
     * 提高效率使用数组
     */
    public static void copy_1()throws IOException {
        //字节输入流,绑定数据源文件
        FileInputStream fis = new FileInputStream("c:/1.avi");
        //字节输出流,绑定要复制的目的文件
        FileOutputStream fos =  new FileOutputStream("e:/1.avi");
        //字节数组缓冲
        byte[] bytes = new byte[1024];
        //定义变量,保存读取方法read的返回值
        int r = 0;
        //循环读取数据源文件
        while ( (r=fis.read(bytes)) != -1){
            //字节输出流,写入字节数组,0索引开始,写入读取到的个数
            fos.write(bytes,0,r);
        }
        fos.close();
        fis.close();
    }

6. 字节流的缓冲流

使用字节流的缓冲流,提高原有流对象的读写性能

字节流缓冲区流,流的本质上也是字节流

  • BufferedOuputStream 继承OutputStream

    • 方法write() 写入单个的字节,或者字节数组

  • BufferedInputStream 继承InputStream

    • 方法read()读取单个字节,读取字节数组

6.1 BufferedOutputStream 构造方法

BufferedOuputStream (OutputStream out) 传递字节输出流

Buffered开头的流,称为缓冲流,FileOutputStream基础流

new BufferedOuputStream (new FileOutputStream()) 传递哪个基础流,就对哪个基础流高效操作

6.2 BufferedInputStream 构造方法

BufferedInputStream(InputStream in) 传递字节输入流

new BufferedInputStream(new FileInputStream())

  /**
     *  文件复制,缓冲流实现,高效
     */
    public static void copy_2()throws IOException {
        //字节输入流,绑定数据源文件
        FileInputStream fis = new FileInputStream("c:/1.avi");
        //字节输出流,绑定要复制的目的文件
        FileOutputStream fos =  new FileOutputStream("e:/1.avi");
        //创建字节输入流的缓冲流,提高原有字节输入流的效率
        BufferedInputStream bis = new BufferedInputStream(fis);
        //创建字节输出流的缓冲流,提高原有字节输出流的效率
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        //字节数组缓冲
        byte[] bytes = new byte[1024];
        //定义变量,保存读取方法read的返回值
        int r = 0;
        while ( (r = bis.read(bytes)) !=-1){
            bos.write(bytes,0,r);
        }
        bis.close();
        bos.close();
}

7. 字符流

只能操作文本文件

  • Writer类,是所有字符输出流的父类 (写入文本文件)

    • write(int c)写入单个字符

    • write(char[] ch)写入字符数组

    • write(char[] ch,int off,int len)写入字符数组一部分,开始索引,写入的个数

    • write(String str)写入字符串

    • void flush() 刷新该流的缓冲 (写入数据,先写入到内存),只有刷新了数据才会到达目的文件

  • Reader类,是所有字符输入流的父类 (读取文本文件)

    • int read()读取单个字符

    • int read(char[] ch)读取字符数组

7.1 OutputStreamWriter类

OutputStreamWriter继承Writer,是字符的输出流,同时又是转换流

字符流 = 字节流 + 编码表

OutputStreamWriter 转换流 : 字符流通向字节流的桥梁,字符转成字节

  • 构造方法:

    • OutputStreamWriter(OutputStream out)传递任意字节输出流

    • OutputStreamWriter(OutputStream out,String 编码表名)传递任意字节输出流

  • 转换流写入字符文件,UTF-8编码

    /**
     *  使用编码表,UTF-8
     */
     public static void writeUTF8()throws IOException {
         //创建字节输出流
         FileOutputStream fos = new FileOutputStream("c:/utf.txt");
         //创建转换流对象,构造方法传递字节的输出流
         OutputStreamWriter osw = new OutputStreamWriter(fos);
         //写入字符串
         osw.write("你好");
         //刷新流
         osw.flush();
         //资源是否
         osw.close();
     }
  • 转换流写入字符文件GBK编码

    /**
     * 使用编码表,GBK
     */
    public static void writeGBK()throws IOException{
        //创建字节输出流
        FileOutputStream fos = new FileOutputStream("c:/gbk.txt");
        //创建字符输出流,转换流,构造方法传递字节输出流,指定编码表名
        OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
        //写入字符串
        osw.write("你好");

        osw.close();
    }

字符输出流write完后,必须刷新,也就是调用f字符输出流的flush函数

7.2 InputStreamReader类

InputStreamReader继承Reader,字符输入流,读取文本文件

字节流通向字符流的桥梁,字节流转成了字符流

  • 构造方法:

    • InputStreamReader(InputStream out)传递任意字节输入流

    • InputStreamReader(InputStream out,String 编码表名)传递任意字节输入流

    /**
     * 读取GBK文件
     */
    public static void readGBK() throws IOException{
        //创建字节流对象,绑定数据源
        FileInputStream fis = new FileInputStream("c:/gbk.txt");
        //创建转换流对象,绑定字节输入流,指定编码表
        InputStreamReader isr = new InputStreamReader(fis,"GBK");
        //读取字符数组
        char[] chars = new char[1024];
        //保存读取方法read的返回值
        int r = 0 ;
        r = isr.read(chars);
        //数组转成字符串
        System.out.println(new String(chars,0,r));

        isr.close();
    }

    /**
     * 读取UTF文件
     */
    public static void readUTF8()throws IOException {
        //创建字节流对象,绑定数据源
        FileInputStream fis = new FileInputStream("c:/utf.txt");
        //创建转换流对象,绑定字节输入流
        InputStreamReader isr = new InputStreamReader(fis);
        //读取字符数组
        char[] chars = new char[1024];
        //保存读取方法read的返回值
        int r = 0 ;
        r = isr.read(chars);
        //数组转成字符串
        System.out.println(new String(chars,0,r));

        isr.close();
    }

7.3 便捷类

注:也就是没了字节流,直接传入文件对象。

  • FileWriter 继承 OutputStreamWriter

    • 是字符的输出流,写入文本文件

    • 直接采用默认的编码表

    • FileWriter构造方法直接传递字符串的文件名即可

public static void main(String[] args) throws IOException {
    //创建字符输出流的便捷类
    FileWriter fw = new FileWriter("day20/hehe.txt");
    //写入字符串
    fw.write("谢谢");
    fw.close();
}
  • FileReader 继承 InputStreamReader

    • 是字符的输入流,读取文本文件

    • 直接采用默认的编码表

    • FileReader构造方法直接传递字符串的文件名即可

public static void main(String[] args)throws IOException {
    //创建字符输入流对象,绑定数据源
    FileReader  fr = new FileReader("day20/hehe.txt");
    //读取字符数组
    char[] chars = new char[1024];
    int r = 0;
    while ( (r = fr.read(chars)) !=-1){
        System.out.print(new String(chars,0,r));
    }
    fr.close();
}

7.4 字符输出流的缓冲流

BufferedWriter : 字符流的缓冲流,继承Writer,写入文本文件

  • 特殊的方法 : newLine() 写入文本换行符,平台无关性

  • 构造方法: BufferedWriter(Writer w)可以传递任意字符输出流

    /**
     * 字符输出流的缓冲区,写入换行
     */
    public static void write() throws IOException {
        //创建字符输出流的便捷类
        FileWriter fw = new FileWriter("day20/xixi.txt");
        //创建字符输出流的缓冲流,构造方法传递 fw流
        BufferedWriter bfw = new BufferedWriter(fw);
        bfw.write("第一行");
        bfw.newLine();
        bfw.write("第二行");
        bfw.flush();
        bfw.close();
    }

7.6 字符流复制文本文件

错误的应用,不能保证复制后和源文件是一致的!

8. 字符流和字节流的区别

(1)字节流的write和read方法的传参只能是字节,而字符流可以的write和read方法的传参可以是字符串。

(2)各自的“父亲”不一样。

9. 打印流

  • PrintStream : 字节输出流

  • PrintWriter : 字符输出流

  • 打印流特性 :

    • 打印流负责输出打印,不关心数据源

    • 方便的打印各种形式数据

    • 打印流永远不会抛出IOException

    • 具有自动刷新,需要加上参数true

/**
* 打印流输出,在打印流的构造方法中,传递流(字节,字符)
* 自动刷新 : 构造方法第二个参数写true,第一个参数必须是IO流对象,不能是字符串
* 调用方法: println,printf,format 三个其中的一个,启用自动刷新
*/
public static void print()throws IOException {
    //便捷类
    FileWriter fw = new FileWriter("day20/print.txt");
    //创建打印流对象,传递便捷类
    PrintWriter pw = new PrintWriter(fw,true);
    pw.println(1.5); //方便打印,原样输出
}

10. 基本数据类型流(现阶段作用不大)

  • DataInputStream

    • 基本数据类型读取流

    • 构造方法,传递字节输入流

  • DataOutputStream

    • 基本数据类型的写入流

    • 构造方法,传递字节输出流

 public static void main(String[] args) throws IOException {
        read();
    }
    /**
     * DataInputStream读取基本类型
     * readInt() 读取到文件结束 : 抛出 EOFException
     */
    public static void read()throws IOException{
        //创建基本类型输入流,构造方法绑定字节输入流
        DataInputStream dis = new DataInputStream(new FileInputStream("day20/data.txt"));
        //读取基本类型
        while (true) {
            try {
                int i = dis.readInt();
                System.out.println("i = " + i);
            }catch (IOException ex){
                //ex.printStackTrace();
                break;
            }
        }
        dis.close();
    }

    /**
     *  DataOutputStream写入基本类型
     */
    public static void write()throws IOException {
        //创建基本数据类型输出流
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("day20/data.txt"));
        //写入基本数据类型
        dos.writeInt(6);
        dos.writeInt(16);
        dos.writeInt(26);
        dos.writeInt(-1);
        dos.writeInt(100);

        dos.close();
    }

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

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

相关文章

【简单认识MySQL的MHA高可用配置】

文章目录 一、简介1、概述2、MHA 的组成3.MHA 的特点4、MHA工作原理 二、搭建MHA高可用数据库群集1.主从复制2.MHA配置 三、故障模拟四、故障修复步骤: 一、简介 1、概述 MHA(Master High Availability)是一套优秀的MySQL高可用…

Java网络编程基础概念

一、网络编程入门 1.1、软件结构 c/s结构:指客户端和服务器结构。如下图 B/S结构:指浏览器和服务器结构。如下图 共同点:无论哪一种架构,都离不开网络的支持。因此就设计到网络编程(在一定的协议下,实…

android app控制ros机器人二

Ros-Mobile的使用基本熟悉,接下来熟悉代码,记录中间的问题。 GitHub - ROS-Mobile/ROS-Mobile-Android: Visualization and controlling application for Android 使用android studio打开项目后有bug。 BUG: 1.FAILURE: Build failed wit…

nvidia-smi输出的结果代表什么

nvidia-smi(NVIDIA System Management Interface) 是基于nvml的gpu的系统管理接口,主要用于显卡的管理和状态监控。 nvidia-smi简称NVSMI,提供监控GPU使用情况和更改GPU状态的功能,是一个跨平台工具,支持所有标准的NVIDIA驱动程序支持的Linu…

CMIP6数据处理及在气候变化、水文、生态等领域中的应用

气候变化对农业、生态系统、社会经济以及人类的生存与发展具有深远影响,是当前全球关注的核心议题之一。IPCC(Intergovernmental Panel on Climate Change,政府间气候变化专门委员会)的第六次评估报告明确;指出&#x…

低代码平台浅析:JNPF快速开发平台

目录 一、前言 二、低代码平台体验简述 三、关于平台 平台简介: 四、场景及用户分析 五、产品分析 1、着重讲一下JNPF的编辑器 2、业务流程 六、总结 一、前言 低代码平台能够改变了应用交付和管理的模式,大幅缩减交付周期,最终帮助业务加速创…

使用深度学习模型CNN进行实时情绪检测研究(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 💥1 概述 使用深度学习模型CNN进行实时情绪检测是一种应用广泛的研究方向。下面是一个简要的步骤: 1. 数据收集和标注:收集包含…

华为OD机试真题 Java 实现【阿里巴巴找黄金宝箱(III)】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、那么问题来了,如果有两个满足的怎么办? 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为O…

类和对象(下篇)

目录 1.再谈构造函数1.1构造函数体赋值1.2初始化列表1.3explicit关键字 2.Static成员2.1概念2.2特性 3.友元3.1友元函数3.2友元类 4.内部类5.再次理解类和对象总结 1.再谈构造函数 1.1构造函数体赋值 如下为对象赋初值构造函数体的语句,不能称作初始化。 class D…

Ubuntu18.04系统安装视频剪辑软件shotcut

Snap Store安装 使用的是最新的Ubuntu 18.04 LTS(Bionic Beaver),其本身已安装Snap 如果没有安装,则可以使用以下命令安装SNAP $ sudo apt-get install snapd安装shotcut $ sudo snap install shotcut --classic启动shotcut $…

8.JAVA NIO核心之选择器(Selector)

highlight: arduino-light 选择器(Selector)概述 选择器Selector是 SelectableChannle 对象的多路复用器,Selector 可以同时监控多个SelectableChannel的 IO 状况,也就是说,利用 Selector可使一个单独的线程管理多个 Channel。Selector 是非阻…

shift语句的使用

[rootvm1 scripts]# help shift shift: shift [n]Shift positional parameters.Rename the positional parameters $N1,$N2 ... to $1,$2 ... If N isnot given, it is assumed to be 1.Exit Status:Returns success unless N is negative or greater than $#.说明&#xff1a…

SWMM模型:水文水动力模型在城市内涝、城市排水、海绵城市规划设计中深度应用

查看原文>>>最新水文水动力模型在城市内涝、城市排水、海绵城市规划设计中深度应用 随着计算机的广泛应用和各类模型软件的发展,将排水系统模型作为城市洪灾评价与防治的技术手段已经成为防洪防灾的重要技术途径。本文聚焦于综合利用GIS及CAD等工具高效地进…

Rust vs Go:常用语法对比(十二)

题图来自 Rust vs Go in 2023[1] 221. Remove all non-digits characters Create string t from string s, keeping only digit characters 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 删除所有非数字字符 package mainimport ( "fmt" "regexp")func main() { s : hei…

07 |「注解、反射、多线程、锁」

前言 函数 文章目录 前言一、注解二、反射1、作用 三、多线程1、基本概念2、实现方式1)继承 Thread 类2)实现Runnable接口3、常用 API 四、锁1、为什么2、锁 一、注解 注解不影响程序逻辑,但会被编译器在不同阶段(编译、执行&…

【小白必看】利用Python生成个性化名单Word文档

文章目录 前言所需文件及文件格式说明excel数据如下word 模板如下文件目录格式及生成后的文件 导入所需的模块:打开 Excel 文件:选择工作表:获取数据列表:遍历数据并生成 Word 文档:完整代码结束语 前言 对于需要批量…

【Python机器学习】实验03 logstic回归

文章目录 简单分类模型 - 逻辑回归1.1 准备数据1.2 定义假设函数Sigmoid 函数 1.3 定义代价函数1.4 定义梯度下降算法gradient descent(梯度下降) 1.5 绘制决策边界1.6 计算准确率1.7 试试用Sklearn来解决2.1 准备数据(试试第二个例子)2.2 假设函数与前h相同2.3 代价函数与前相…

找不到vcruntime140_1.dll,无法继续执行此代码如何解决

最近我在使用电脑时遇到了一个问题,即出现了vcruntime140_1.dll文件丢失的错误提示。这让我感到非常困惑和烦恼,因为我无法正常运行一些软件和游戏。 vcruntime140_1.dll是一个Windows系统文件,它是Microsoft Visual C Redistributable的一部…

maven本地仓库地址修改+maven国内镜像设置+maven运行所需pos.xml文件配置基本写法

1,maven本地仓库地址修改 maven在使用过程中,本地项目仓库其空间占用会越来越大,但是其默认仓库位置往往是以C盘为主,C盘作为系统盘常常会遇到所在盘空间占满的情况,所以我们将其改至其他硬盘空间位置为适合做法&#…

Vue style中的 scoped 属性

Vue 中存在 scoped 属性,HTML5中也存在一个 scoped 属性,而且,这两者都是针对 css 样式处理的属性,所以很多文章在 解释 Vue scoped 的时候,都会把两者混为一谈,直接进把 HTML5 scoped 的定义搬到 Vue scop…