• 【java】输入输出流


    标准输入流

    在这里插入图片描述

    package heima;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    public class P312 {
        public static void main(String[] args) throws IOException {
            //public static final InputStream in:标准输入流
            InputStream is =System.in;
    
    //        //1.只能输入字符
    //        int by;
    //        while ((by = is.read())!=-1){
    //            System.out.println((char) by);
    //        }
    //        //2.把字符转换为字符流
    //        InputStreamReader isr = new InputStreamReader(is);
    
            //3.实现字符流一次读取一行数据
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
            System.out.println("请输入一个字符串:");
            String line = br.readLine();
            System.out.println("你输入的字符串是:"+line);
    
            System.out.println("请输入一个整数:");
            int i = Integer.parseInt(br.readLine());
            System.out.println("你输入的整数是:"+i);
        }
    }
    
    
    • 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

    输出:
    在这里插入图片描述

    自己实现太麻烦,java提供了一个供我们使用的方法
    Scanner sc = new Scanner(System.in)

    标准输出流

    在这里插入图片描述

    package heima;
    
    import java.io.PrintStream;
    
    public class P313 {
        public static void main(String[] args) {
            //pulic sattic final PrintStream out:标准输出流
            PrintStream ps = System.out;
    
            //能够方便地打印各种数据
    //        ps.print("hello");
    //        ps.print(100);
    //
    //        ps.println("hello");
    //        ps.println(100);
    
            //System.out的本质是一个字节输出流
            System.out.println("hello");
            System.out.println(100);
    
            System.out.println();
    //        System.out.print();
        }
    
    }
    
    
    • 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

    在这里插入图片描述

    注意:直接System.out.print();不带参数,是错误的
    在这里插入图片描述

    字节打印流

    在这里插入图片描述

    转码:指转为对应的ASCII码

    package heima;
    
    import java.io.FileNotFoundException;
    import java.io.PrintStream;
    
    public class P314 {
        public static void main(String[] args) throws FileNotFoundException {
            //PrintStream(String fileName):使用指定的文件名创建新的打印流
            PrintStream ps = new PrintStream("C:\\Users\\路聃\\Desktop\\Java\\ps.txt");
    
            //写数据
            //字节输出流有的方法
            ps.write(97);   //a
    
            //使用特有方法写数据
            ps.print(97);   //97
    
            //释放资源
            ps.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    字符打印流

    在这里插入图片描述

    package heima;
    
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class P315 {
        public static void main(String[] args) throws IOException {
            //PrintWriter(String fileName):使用指定的文件名创建一个新的PrintWriter,而不需要自动执行行的刷新
    //        PrintWriter pw = new PrintWriter("C:\\Users\\路聃\\Desktop\\Java\\pw.txt");
    //
    //        pw.write("hello");
    //        pw.write("\r\n");
    //        pw.flush();
    //        pw.write("world");
    //        pw.write("\r\n");
    //        pw.flush();
    //
    //        pw.println("hello");//输出失败
    //        /*原因
    //            pw.write("hello");
    //            pw.write("\r\n");
    //         */
    
            //PrintWriter (Writer out,boolean autoFlush):创建一个新的PrintWriter
            PrintWriter pw = new PrintWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\pw.txt"),true);//true代表开启自动刷新flush()
    
            pw.println("hello");
            pw.println("world");
        }
    }
    
    
    • 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

    案例–复制java文件(文件打印流版本)

    package heima;
    
    import java.io.*;
    
    public class P316 {
        public static void main(String[] args) throws IOException {
            /*
            //根据数据源创建字符输入流对象
            BufferedReader br = new BufferedReader(new FileReader("C:\\IntelliJ IDEA Community Edition 2022.2.3\\study\\src\\heima\\P315.java"));
            //根据目的地创建字符输出流对象
            BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\ts.java"));
            //读写数据,复制文件
            String line;
            while ((line=br.readLine())!=null){
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
            //释放资源
            bw.close();
            br.close();
             */
    
            //根据数据源创建字符输入流对象
            BufferedReader br = new BufferedReader(new FileReader("C:\\IntelliJ IDEA Community Edition 2022.2.3\\study\\src\\heima\\P315.java"));
            //根据目的地创建字符输出流对象
            PrintWriter pw = new PrintWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\te.java",true));
            //读写数据,复制文件
            String line;
            while ((line=br.readLine())!=null){
                pw.println(line);
            }
    
            //释放资源
            pw.close();
            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
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    对象序列化

    序列化流

    在这里插入图片描述

    一定要在类中定义一个标记接口Serializable

    package heima;
    
    
    import heima.common.Student;
    
    import java.io.*;
    
    public class P317 {
        public static void main(String[] args) throws IOException {
            //ObjectOutputStream (OutputStream out):创建一个写入指定的OutputStrem的ObjectOutputStream
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( "C:\\Users\\路聃\\Desktop\\Java\\oos.txt"));
    
            //创建对象
            Student s = new Student("小林",30);
    
            //void writeObject(Object obj):将指定的对象写入ObjectOutputStream
            oos.writeObject(s);
    
            //释放资源
            oos.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    反序列化

    输出上面的序列流

    package heima;
    
    import heima.common.Student;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    
    public class P318 {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            //ObjectInputStream(InputStream in):创建从指定的InputStream读取的ObjectInputStream
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\路聃\\Desktop\\Java\\oos.txt"));
    
            //Objext readObject():从ObjectInputStream读取一个对象
            Object obj = ois.readObject();
    
            Student s = (Student) obj;
            System.out.println(s.getName()+","+s.getAge());
    
            ois.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    serialVersionID&transient

    在这里插入图片描述

    package heima;
    
    import heima.common.Student;
    
    import java.io.*;
    
    public class P319 {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            write();
    //        read();
        }
        //序列化
        private static void write() throws IOException {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\路聃\\Desktop\\Java\\oos.txt"));
            Student s = new Student("小林",30);
            oos.writeObject(s);
            oos.close();
        }
    
        //反序列化
        private static void read() throws IOException, ClassNotFoundException {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\路聃\\Desktop\\Java\\oos.txt"));
            Object obj = ois.readObject();
            Student s = (Student) obj;
            System.out.println(s.getName()+","+s.getAge());
            ois.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

    对上述代码,若在read()执行后,改动类Student内容,再执行write()则报错。
    原因

    需要对Student进行如下改动:
    在这里插入图片描述

    Properties作为Map集合的使用

    在这里插入图片描述

    package heima;
    
    import java.util.Objects;
    import java.util.Properties;
    import java.util.Set;
    
    public class P320 {
        public static void main(String[] args) {
            //创建集合对象
            //1.err --想当然的把Properties当作泛型
    //        Properties prop = new Properties();
            Properties prop = new Properties();
    
            //存储元素
            prop.put("item01","小林");
            prop.put("item02","小王");
            prop.put("item03","小雨");
    
            //遍历集合
            Set<Object> keySet = prop.keySet();
            for (Object key : keySet){
                Object value = prop.get(key);
                System.out.println(key+","+value);
            }
        }
    }
    
    
    • 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

    Properties作为集合的特有方法

    在这里插入图片描述

    package heima;
    
    import java.util.Properties;
    import java.util.Set;
    
    public class P321 {
        public static void main(String[] args) {
            //创建集合对象
            Properties prop = new Properties();
    
            //Object setProperty(String key,String value):设置集合的键和值,都是String类型,底层调用Hashtable方法put
            prop.setProperty("item01","小林");
            /* 方法来源
                Object setProperty(String key,String value){
                    return put(key,value);
                }
                Object put(Object key,Object value){
                    return map.put(key,value);
                }
                设计:把一个接受Object对象的方法,改为只能接受String对象,设计巧妙
             */
            prop.setProperty("item02","小张");
            prop.setProperty("item03","小文");
    
            //String getProperty(String key):使用此属性列表中指定的键搜索属性
            System.out.println(prop.getProperty("item01"));
    
            System.out.println(prop);
    
            //Set stringPropertyNames():从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
            Set<String> names = prop.stringPropertyNames();
            for (String key : names){
    //            System.out.println(key);//输出所以的键名
    
                String value = prop.getProperty(key);
                System.out.println(key+","+value);//输出键和对应的值
            }
        }
    }
    
    
    • 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与IO流相结合的方法

    在这里插入图片描述

    package heima;
    
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Properties;
    
    public class P322 {
        public static void main(String[] args) throws IOException {
            //把集合中的数据保存到文件
    //        myStore();
            //把文件中的数据加载到集合
            myLoad();
        }
        private static void myLoad() throws IOException, IOException {
            Properties prop = new Properties();
    
            //void load(Reader reader):
            FileReader fr = new FileReader("C:\\Users\\路聃\\Desktop\\Java\\fw.txt");
            prop.load(fr);
            fr.close();
    
            System.out.println(prop);
        }
    
        private static void myStore() throws IOException {
            Properties prop = new Properties();
    
            prop.setProperty("item01","小林");
            prop.setProperty("item02","小王");
            prop.setProperty("item03","小黄");
    
            //void store(Writer writer,String comments):
            FileWriter fw = new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\fw.txt");
            prop.store(fw,null);
            fw.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

    输出:

    先只执行myStore(),再只执行myLoad()

    在这里插入图片描述

    案例–游戏次数

    在这里插入图片描述

    package heima;
    
    import heima.common.GuessNumber;
    
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Properties;
    
    public class P323 {
        public static void main(String[] args) throws IOException {
            //从文件中读取数据到Properties集合,用load()方法实现
            Properties prop = new Properties();
    
            FileReader fr = new FileReader("C:\\Users\\路聃\\Desktop\\Java\\game.txt");
            prop.load(fr);
            fr.close();
    
            //通过Properties集合获取到玩游戏的次数
            String count = prop.getProperty("count");
            int number = Integer.parseInt(count);
    
            //判断次数是否到达3次了
            if (number >= 3){
                //如果到了
                System.out.println("游戏试玩已结束,想玩请充值(www.itcast.cn)");
            }else {
                //继续玩游戏
                GuessNumber.start();
    
                //次数+1,重新写回文件,用Properties的store()方法实现
                number++;
                //String.valueOf():转换位字符串
                prop.setProperty("count",String.valueOf(number));
                FileWriter fw = new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\game.txt");
                prop.store(fw,null);
                fw.close();
            }
    
        }
    }
    //1 load
    //2 store
    
    • 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

    GuessNumber.java

    package heima.common;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class GuessNumber {
        private GuessNumber(){}
    
        public static void start(){
            //要完成猜数字的游戏,首先要有一个要猜的数字,使用随机数生成该数字,范围1到200
            Random r = new Random();
            int number = r.nextInt(100)+1;
    
            while (true){
                Scanner sc = new Scanner(System.in);
    
                System.out.println("请输入你要猜的数字:");
                int guessNumber = sc.nextInt();
    
                //比较输入的数字喝系统产生的数据
                if (guessNumber > number){
                    System.out.println("你猜的的数字"+guessNumber+"大了");
                }else if (guessNumber <number){
                    System.out.println("你猜的数字"+guessNumber+"小了");
                }else {
                    System.out.println("恭喜你猜中了");
                    break;
                }
            }
        }
    }
    
    
    • 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
  • 相关阅读:
    物联网浏览器(IoTBrowser)-简单介绍
    房产中介小程序,二手房小程序带H5公众号,房产门户PC版,房产中介,房产经纪人
    专利交底书怎么写 -
    java计算机毕业设计springboot+vue社区问答网站与设计(源码+系统+mysql数据库+Lw文档)
    全面理解链表数据结构:各种节点操作、做题技巧,易错点分析与题目清单(C++代码示例,不断更新)
    【论文复现】——基于多尺度虚拟网格与坡度阈值的机载LiDAR 点云滤波方法
    centos7安装mysql5.7步骤(图解版)
    《十三》微信小程序中组件间通信
    子监督学习的知识点总结
    列的完整性约束——调整列的完整性约束
  • 原文地址:https://blog.csdn.net/m0_65431212/article/details/128109982