• IO流学习


    一. 文件


    概念

    文件就是保存数据的地方,比如大家经常使用的word文档,text文档,excel文档,可以是音频也可以是视频还可以是文件。


    文件流

    文件在程序中是以流的形式来操作的。

    • 输入流:磁盘(文件)中的数据加载到程序(内存)中。
    • 输出流:程序(内存)中的数据加载到磁盘(文件)中。

    常见的文件的操作

    常见文件对象的相关的构造器和方法

    • 相关方法

      • new File(String path) // 根据路径构建一个File对象
      • new File(File parent, String child) // 根据父目录文件 + 子路径 构建
      • new File(String parent, String child) // 根据父目录 + 子目录路径 构建
    • @Test的使用:

    package Pac;
    
    import org.junit.jupiter.api.Test;
    
    import java.io.File;
    import java.io.IOException;
    
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     *
     */
    
    public class FileCreate {
        public static void main(String[] args) {
    
        }
    
        //方式1:new File(String path) // 根据路径构建一个File对象
        @Test
        public void create01(){
            String filePath = "e:\\news1.txt";
            File file = new File(filePath);
            try{
                file.createNewFile();
                System.out.println("news1.txt文件创建成功~");
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    
        //方式2: new File(File parent, String child) // 根据父目录文件 + 子路径 构建
        //e:\\new2.txt
        @Test
        public void create02(){
            File parentFile = new File("e:\\");
            String fileName = "news2.txt";
            File file = new File(parentFile,fileName);   //在这里里,仅仅是在内存里面有file
            try{
                file.createNewFile();                    //执行了create才是真正将file写在磁盘里面
                System.out.println("news2.txt文件创建成功~ ");
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    
        //方式3:new File(String parent, String child) // 根据父目录 + 子目录路径 构建
        @Test
        public void create03(){
            String parentPath = "e:\\";
            String filePath = "news3.txt";
            File file = new File(parentPath, filePath);
    
            try{
                file.createNewFile();
                System.out.println("news3.txt文件创建成功~");
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 获取文件的相关的信息
      • getName、getAbsolutePath、getParent、length、exits、isFile、isDirectory
    package Pac;
    
    import org.junit.jupiter.api.Test;
    
    import java.io.File;
    
    /**
     *
     */
    
    public class FileInformation {
        public static void main(String[] args) {
    
        }
        //获取文件的信息
        @Test
        public void info(){
            //先创建文件的对象
            File file = new File("e:\\news1.txt");
    
            //调用相应的方法,得到对应的信息
            System.out.println("文件名字 = " + file.getName());
    
            // 常用的文件的方法: getName、getAbsolutePath、getParent、length、exits、isFile、isDirectory
            System.out.println("文件的绝对路径 = " + file.getAbsolutePath());
    
            System.out.println("文件的父目录 = " + file.getParent());
    
            System.out.println("文件的大小 = " + file.length());
    
            System.out.println("文件是否存在" + file.exists());
    
            System.out.println("是否是一个文件" + file.isFile());
    
            System.out.println("是否是一个目录" + file.isDirectory());
    
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=52010:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-launcher\1.7.0\junit-platform-launcher-1.7.0.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit5-rt.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Mud;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\Administrator\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 Pac.FileInformation,info
    文件名字 = news1.txt
    文件的绝对路径 = e:\news1.txt
    文件的父目录 = e:\
    文件的大小 = 14
    文件是否存在true
    是否是一个文件true
    是否是一个目录false
    
    Process finished with exit code 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 目录的操作和文件的删除
      • mkdir创建一级目录、mkdirs创建多级目录、delete删除空目录或者文件
    package Pac;
    
    import org.junit.jupiter.api.Test;
    
    import java.io.File;
    
    public class Directory_ {
        public static void main(String[] args) {
    
            //
        }
    
        //判断E盘中 E:\\news1.txt是否存在,如果存在则删除
        @Test
        public void m1(){
            String filePath = "d:\\news1.txt";
            File file = new File(filePath);
            if(file.exists()){
                if(file.delete()){
                    System.out.println(filePath + "删除成功");
                } else{
                    System.out.println(filePath + "删除失败");
                }       
            }else{
                System.out.println("该文件不存在......");
            }
    
        }
    
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    二. IO流原理及其分类

    • 按照操作的数据单位不同:字节流(8 bit), 字符流(按字符)
    • 按数据流的流向分为:输入流、输出流
    • 按照流的角色分为:节点流,处理流 / 包装流
    抽象基类字节流字符流
    输入流InputStreamReader
    输出流OutputStream Writer
    • Java的IO流共涉及40多个类,实际上非常的规则,都是从如上4个抽象基派生出来的。
    • 由这四个类派生出来的子类的名称都是其父类名作为子类名的后缀的。

    IO体系图


    2.1 InputStreamOutputStream

    • InputStream抽象类是所有类字节输入流的超类

    • InputStream抽象类的常用子类

        1. FileInputStream: 文件输入流
        1. BufferedInputStream: 缓冲字节输入流
        1. ObjectInputStream: 对象字节输入流
    • OutputStream抽象类的常用子类

        1. FileOutputStream: 文件输出流

    FileInputStream

    在这里插入图片描述

    package PacinputStream;
    
    import org.junit.jupiter.api.Test;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    public class FileInputStream_ {
    
        public static void main(String[] args) {
    
        }
    
    	
         //单个字节的读取,运行效率比较低
        @Test
        public void readFile01() {
            String filePath = "e:\\hello.txt";
            int readData = 0;
            //创建了FileInputStream对象,用于读取hello.txt文件
            FileInputStream fileInputStraem = null;
            try {
                //创建了FileInputStream对象,用于读取hello.txt文件
                fileInputStraem = new FileInputStream(filePath);
                // 从该输入流读取最多b.length字节的数据到字节数组。 此方法将阻塞,直到某些输入可用。
                // 如何返回-1,表示读取完毕
                while((readData = fileInputStraem.read()) != -1){
                    System.out.print((char)readData);
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //当文件读取完毕的时候,一定要关闭流,释放资源
                try {
                    fileInputStraem.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=53612:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-launcher\1.7.0\junit-platform-launcher-1.7.0.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit5-rt.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Mud;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\Administrator\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 PacinputStream.FileInputStream_,readFile01
    hello world,刘建成
    
    
    Process finished with exit code 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6


    package PacinputStream;
    
    import org.junit.jupiter.api.Test;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    public class FileInputStream_ {
    
        public static void main(String[] args) {
    
        }
    
        /**
         * 单个字节的读取,效率比较低
         * ->使用read(byte[] b)
         */
    
        @Test
        public void readFile01() {
            String filePath = "e:\\hello.txt";
            int readData = 0;
            //创建了FileInputStream对象,用于读取hello.txt文件
            FileInputStream fileInputStraem = null;
            try {
                //创建了FileInputStream对象,用于读取hello.txt文件
                fileInputStraem = new FileInputStream(filePath);
                // 从该输入流读取一个字节的数据。 如果没有输入可用,此方法将阻止。 
                // 如何返回-1,表示读取完毕
                while((readData = fileInputStraem.read()) != -1){
                    System.out.print((char)readData);
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //当文件读取完毕的时候,一定要关闭流,释放资源
                try {
                    fileInputStraem.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
    
    
        //优化代码:
    
        /**
         * 使用read(byte[] b)读取文件
          * @param b
         */
        
        @Test
        public void readFile02() {
            String filePath = "e:\\hello.txt";
            int readData = 0;
            //定义一个字节数组
            byte[] buf = new byte[8];   //一次性读取8个字节
            int readLen = 0;
            
            //创建了FileInputStream对象,用于读取hello.txt文件
            FileInputStream fileInputStraem = null;
            try {
                //创建了FileInputStream对象,用于读取hello.txt文件
                fileInputStraem = new FileInputStream(filePath);
                
                // 从该输入流读取最多b.length字节的数据到字节数组。 此方法将阻塞,直到某些输入可用。
                
                // 如何返回-1,表示读取完毕
                while((readLen = fileInputStraem.read(buf)) != -1){ //实际读取到的值
                    System.out.print(new String(buf,0,readLen));       //显示
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //当文件读取完毕的时候,一定要关闭流,释放资源
                try {
                    fileInputStraem.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=53812:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-launcher\1.7.0\junit-platform-launcher-1.7.0.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit5-rt.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Mud;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\Administrator\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 PacinputStream.FileInputStream_,readFile02
    hello world
    
    
    Process finished with exit code 0
    
    • 1
    • 2
    • 3
    • 4
    • 5


    FileOutputStream

    在这里插入图片描述

    package PacoutputStream;
    
    import org.junit.jupiter.api.Test;
    
    import java.io.*;
    
    public class OutputStream_ {
    
        /**
         * 要求:请使用FileOutputStream在a.txt文件中写入“Hello,world”。 [如果文件不存在,会创建文件]
         * (注意:前提是目录已经存在)
         * @param args
         */
    
        public static void main(String[] args) {
    
        }
    
        /**
         * 演示使用FileOutputStream写入文件,将数据写到文件中,如果该文件不存在则创建该文件
         *
         */
        @Test
        public void writeFile(){
            //创建按我们的FileOutputStream对象
            String filePath = "e:\\a.txt";
    
            FileOutputStream fileOutputStream = null;
            try {
                //得到fileOutputStream对象
    
                fileOutputStream = new FileOutputStream(filePath,true);
                //写入一个字节
    //            fileOutputStream.write('H');
    
    
                //1.这种方法是写入覆盖原来的内容
                //写入字符串
                 String str = "hello,world!";
                 //str.getBytes()可以将字符串转成字符数组
                 fileOutputStream.write(str.getBytes());
                /**从位于偏移量 off的指定字节数组写入 len字节到该文件输出流。
                 * public void write(byte[] b,
                 *                   int off,
                 *                   int len)
                 *            throws IOException
                 *
                 * 从位于偏移量off的指定字节数组写入len字节到文件的输出流
                 *
                 */
                str = "hi,world,Martin!";
                fileOutputStream.write(str.getBytes(),0,str.length());
    
                //2.如果不希望覆盖原先的内容
                /**
                 * public FileOutputStream(File file,
                 *                         boolean append)
                 *                  throws FileNotFoundException
                 *
                 * file-要写入的文件
                 * append-如果为True,则写入文件的末尾,而不是开头。追加文件,而非覆盖。
                 */
                fileOutputStream.write(str.getBytes(),0,str.length());
    
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //将流关闭
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
    
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81


    FileInputStream 和 FileOutputStream

    package PacoutputStream;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileCopy {
        public static void main(String[] args) {
            //完成文件拷贝,将e://Koala.jpg 拷贝c:\\
            //思路分析
            //1. 创建的文件的输入流,将文件读入到程序
            //2. 创建文件的输出流,将读取到的文件的数据写入到指定的位置
    
            //在完成程序时,应该是读取部分数据就写入到指定的文件中,这里是使用的循环操作。
            //而不是将读取全部数据,直接写入全部数据。
            String srcFilePath = "e:\\Koala.jpg";
            String destFilePath = "d:\\Koala.jpg";
    
            FileInputStream fileInputStream = null;
            FileOutputStream fileOutputStream = null;
    
            try {
                fileInputStream = new FileInputStream(srcFilePath);
                fileOutputStream = new FileOutputStream(destFilePath);
    
                //定义一个字节数组,提高读取效率
                byte[] buf = new byte[1024];
                int readLen = 0;
                while((readLen = fileInputStream.read(buf)) != -1){
                    //读取到后,就写入到文件,通过fileOutputStream
                    //即,是一边读一边写
                    fileOutputStream.write(buf,0,readLen);
    
                }
                System.out.println("拷贝ok~");
    
    
            } catch (IOException e) {
    
                e.printStackTrace();
    
            } finally {
                //关闭释放资源
                try {
                    //如果输入流不等于空,则关闭输入流
                    if(fileInputStream != null){
                        fileInputStream.close();
                    }
                    //如果输出流不等于空,则关闭输出流
                    if(fileOutputStream != null){
                        fileOutputStream.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
    
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=54854:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Mud;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\Administrator\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar" PacoutputStream.FileCopy
    拷贝ok~
    
    Process finished with exit code 0
    
    • 1
    • 2
    • 3
    • 4

    2.2 ReaderWriter

    • FileReader: 字符流,按照字符来操作
      • FileReader相关方法:
        • new FileReader(File/String)
        • read : 每次读取单个字符,返回该字符,如果文件末尾返回-1
        • read(char[]) : 批量读取多个字符到数组,返回读取到的字符数,如果到文件末未返回-1
      • 相关的API
        • new String(char[]) : 将char[]转换成String
        • new String(char[], off, len) : 将char[]指定的部分转换为String
    • FileWriter:字符流,按照字符来操作
      • FileWriter相关方法:

        • new FileWriter(File/String): 覆盖模式,相当于流的指针在首端, 这里的覆盖模式是指,对于原来的文件。我们可以覆盖掉,如果在同一个try里面,则实际上是进行的追加的。try结束了之后,再重新覆盖的。
        • new FileWriter(File/String, true): 追加模式,相当于流的指针在尾端
        • write(int): 写入单个字符
        • write(char[]): 写入指定数组
        • write(Char[], off, len): 写入指定数组的指定部分
        • write(String): 写入整个字符串
        • write(Strng, off, len): 写入字符串的指定的部分
      • 相关的API

        • String
        • toCharArray: 将String转换为char[]
      • FileWriter使用后,必须要关闭(close)或者刷新(flash),否则写入不到指定的文件



    FileReader

    在这里插入图片描述

    
    package PacReader;
    
    import org.junit.jupiter.api.Test;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    /**
     *
     */
    
    public class FileReader_ {
        public static void main(String[] args) {
    
        }
    
        /**
         * 单个字符读取文件
         */
        @Test
        public void readFile01() {
    
            String flaPath = "e:\\story.txt";
            FileReader fileReader = null;
            int data = ' ';
            //1.先创建一个FileReader对象
            try {
                fileReader = new FileReader(flaPath);
                //循环读取,使用read方法,单个字符读取
                while((data=fileReader.read()) != -1){
                    System.out.print((char)data);
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if(fileReader != null){
                        fileReader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
        /**
         * 多个字符读取文件
         */
        @Test
        public void readFile02() {
    
            String flaPath = "e:\\story.txt";
            FileReader fileReader = null;
            int readLen = 0;
            char[] buf = new char[8];
            //1.先创建一个FileReader对象
            try {
                fileReader = new FileReader(flaPath);
                //循环读取,使用read(buf)方法,返回的是实际读取到的字符数
                //如果返回-1,说明文件结束
                while((readLen=fileReader.read(buf)) != -1){
                    System.out.print(new String(buf,0,readLen));
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if(fileReader != null){
                        fileReader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86


    FileWriter

    在这里插入图片描述



    三. 节点流和处理流

    3.1 节点流

    • 节点流可以从一个特定的数据源读写数据, 如: FileReaderFileWriter[源码]

    3.2 处理流

    • 处理流也叫包装流,是连接在已存在的流(节点流或处理流)之上,为程序提供更加强大的读写功能,如: BufferedReaderBufferedWriter[源码]

    3.3 节点流和处理流的区别和联系

      1. 节点流是底层流/低级流,直接和数据源相接
      1. 处理流(包装流)包装节点流,既可以消除不同节点流实现差异,也可以提供更方便的方法来完成输入输出。[源码理解]
      1. 处理流(也叫包装流),对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连。[模拟修饰器设计模式]


    BufferedReader

    在这里插入图片描述

    在这里插入图片描述

    从这里可以看出,BufferedReader里面有一个Reader属性。个属性只要是Reader的子类都是可以的。

    在这里插入图片描述


    实现具体的BufferedReader代码

    package PacReader01;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    
    /**
     * 演示BufferedReader的使用
     */
    public class BufferedReader_ {
        public static void main(String[] args) throws Exception{
            String filePath = "E:\\a.java";
            //创建BufferedReader对象,节点流对象为FileReader
            BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
    
            //读取
            /**
             * bufferedReader.readLine();表示按行读取;当返回为null时,表示读取完毕
             */
            String line;    //按行读取,效率高
            while((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
    
            //关闭流,仅仅需要关闭外层流就可以了。因为底层会去自动的关闭节点流
            //FileReader
            bufferedReader.close();
    
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31


    BufferedWriter

    在这里插入图片描述

    在这里插入图片描述
    从这里可以看出,BufferedWriter里面有一个Reader属性。这个属性只要是Writer的子类都是可以的。
    在这里插入图片描述


    实现具体的BufferedWriter代码

    package PacReader01;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    /**
     * 演示BufferedWriter的使用
     */
    
    public class BufferedWriter_ {
        public static void main(String[] args) throws IOException {
            String filePath = "e:\\\\ok.txt";
            //创建一个BufferedWriter
            //说明:
            //	1. new FileWriter(filePath,true) 表示以追加的方式写入
            //  2. new FileWriter(filePath)      表示以覆盖的方式写入
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath, true));
    
            bufferedWriter.write("hello1,思格露教育");
            //bufferedWriter插入一个和系统相关的换行符
            bufferedWriter.newLine();
    
            bufferedWriter.write("hello2,思格露教育");
            //bufferedWriter插入一个和系统相关的换行符
            bufferedWriter.newLine();
    
    
            bufferedWriter.write("hello3,思格露教育");
            //bufferedWriter插入一个和系统相关的换行符
            bufferedWriter.newLine();
    
    
            //关闭外层流即可,传入的new FileWriter(filePath) 会在底层关闭
            bufferedWriter.close();
    
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40


    四. Properties类


    (在程序中,不可能将所有的信息完全放在程序里面,如IP地址、用户名和密码,因为这样的话在每一次访问不同的数据库,将会重新更新一次源代码,这肯定是不行的。我们将这一些动态配置信息,放在一个单独的配置文件里面,在不更改源码的情况下,来实现这一部分信息的更新。这种需求是有的。)


    4.1 配置文件引出Properties

    • 看一个需求:
      • com.hspedu.properties_Properties01.java 如下一个配置文件 mysql.properities
        •   	ip = 192.168.0.13 
          
          • 1
        •   	user = root
          
          • 1
        •     pwd = 12345
          
          • 1
      • 请问编程读取ipuserpwd的值是多少?


    按照顺序读取每一行数据:

    在这里插入图片描述

    package com.hspedu.properties_;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Properties01 {
        public static void main(String[] args) throws IOException {
    
    
            //读取 mysql.properties 文件,并得到 ip. user 和 pwd
            BufferedReader br = new BufferedReader(new FileReader("src\\mysql.properties"));
            String line = "";
            while ((line = br.readLine()) != null){ //循环读取
                System.out.println(line);
            }
            br.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=50613:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Pro" com.hspedu.properties_.Properties01
    ip=192.168.100.100
    user=root
    pwd=12345
    
    Process finished with exit code 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    按照顺序读取某一行数据: (Properties方法)

    package com.hspedu.properties_;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Properties01 {
        public static void main(String[] args) throws IOException {
    
    
            //读取 mysql.properties 文件,并得到 ip. user 和 pwd
            BufferedReader br = new BufferedReader(new FileReader("src\\mysql.properties"));
            String line = "";
            while ((line = br.readLine()) != null){ //循环读取
            
                String[] split = line.split("="); //对每一行按照=号来拆
                System.out.println(split[0] + "值是: " + split[1]);
    
    //            System.out.println(line);
            }
            br.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=50644:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Pro" com.hspedu.properties_.Properties01
    ip值是: 192.168.100.100
    user值是: root
    pwd值是: 12345
    
    Process finished with exit code 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    按照上面的方法是完全可以实现功能的,但是里面的代码在访问数据的时候还得改代码,较麻烦,并不是特别方便。

    按照顺序读取某一种数据: (Properties方法)

    package com.hspedu.properties_;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Properties01 {
        public static void main(String[] args) throws IOException {
    
    
            //读取 mysql.properties 文件,并得到 ip. user 和 pwd
            BufferedReader br = new BufferedReader(new FileReader("src\\mysql.properties"));
            String line = "";
            while ((line = br.readLine()) != null){ //循环读取
                String[] split = line.split("="); //对每一行按照=号来拆
    
                //如果我们要求指定的ip值,其他的直接过滤掉了
                if("ip".equals(split[0])){
                    System.out.println(split[0] + "值是: " + split[1]);
                }
            }
            br.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=50666:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Pro" com.hspedu.properties_.Properties01
    ip值是: 192.168.100.100
    
    Process finished with exit code 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5


    4.2 Properties类

    • 基本介绍:
      • 1). 专门用于读写配置的集合类
        • 配置文件格式:
          • 键=值
          • 键=值
        • 注意:
          • 键值对之间不需要有空格,值不需要用引号包起来。默认类型是String.
      • 2). Properties 常见方法
        • load : 加载配置文件的键值对到Properties对象
        • list : 将数据显示到指定的设备
        • getProperty(key) : 根据键获取值
        • setProperty(key,value) : 设置键值对到Properties对象
        • store : 将Properties中的键值对存储到配置文件,在idea中,保存信息到配置文件,如果含有中文,会存储为unicode


    案例1:


    使用Properties类完成对mysql.properties的读取,看代码:

    package com.hspedu.properties_;
    
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Properties;
    
    public class Properties02 {
    
        public static void main(String[] args) throws IOException {
            //使用Properties类来读取mysql.properties文件
    
            //1. 创建Properties对象
            Properties properties = new Properties();
            //2. 加载指定的配置文件
            properties.load(new FileReader("src\\mysql.properties"));
    
            //3. 把键值对显示到控制台
            properties.list(System.out);
    
    
    
    
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=50864:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Pro" com.hspedu.properties_.Properties02
    -- listing properties --
    user=root
    pwd=12345
    ip=192.168.100.100
    
    Process finished with exit code 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    package com.hspedu.properties_;
    
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Properties;
    
    public class Properties02 {
    
        public static void main(String[] args) throws IOException {
            //使用Properties类来读取mysql.properties文件
    
            //1. 创建Properties对象
            Properties properties = new Properties();
            //2. 加载指定的配置文件
            properties.load(new FileReader("src\\mysql.properties"));
    
            //3. 把键值对显示到控制台
            properties.list(System.out);
    
            //4. 根据key获取对应的值
            String user = properties.getProperty("user");
            String pwd = properties.getProperty("pwd");
    
            System.out.println("用户名:" + user);
            System.out.println("密码:" + pwd);
    
    
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=50885:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Pro" com.hspedu.properties_.Properties02
    -- listing properties --
    user=root
    pwd=12345
    ip=192.168.100.100
    用户名:root
    密码:12345
    
    Process finished with exit code 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10


    案例2:


    使用Properties类完成 mysql2.properties 的读取,看代码:

    package com.hspedu.properties_;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    public class Properties03 {
        public static void main(String[] args) throws IOException {
            //使用Properties类创建配置文件,或者是修改配置文件
    
            Properties properties = new Properties();
    
            //创建文件
            //如果该文件没有key,就创建
            //如果该文件有key,就修改
            properties.setProperty("charset","utf8");
            properties.setProperty("user","汤姆");        //保存时,是中文的 unicode码
            properties.setProperty("pwd","abc111");
    
            //将key-value存储到文件中即可
            properties.store (new FileOutputStream("src\\mysql2.properties"),null);
            System.out.println("保存配置文件成功~");
            
            
            //修改某个键值对
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    "C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=50919:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Pro" com.hspedu.properties_.Properties03
    保存配置文件成功~
    
    Process finished with exit code 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    #Mon Aug 08 01:02:05 CST 2022
    user=\u6C64\u59C6
    pwd=abc111
    charset=utf8
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    系统打印服务已关闭,竟然是它的问题!
    龙芯 Loongson 架构 UOS 系统编译 Qt 5.15.2 源码
    darknet框架GPU编译安装
    正点原子linux阿尔法开发板使用—pinctrl和gpio子系统
    springBoot自动装配
    Linux——基本指令
    Python通过setup.py安装的模块怎么卸载
    CAP&Base理论
    ​专业图像处理软件 Photoshop 2023 mac版本更新(ps2023中文)
    61二次型—— 二次型的规范形
  • 原文地址:https://blog.csdn.net/qq_25355771/article/details/126156683