【java】输入输出流

news2024/11/25 0:30:43

文章目录

  • 标准输入流
  • 标准输出流
  • 字节打印流
  • 字符打印流
  • 案例--复制java文件(文件打印流版本)
  • 对象序列化流
    • 序列化流
    • 反序列化流
    • serialVersionID&transient
    • Properties作为Map集合的使用
    • Properties作为集合的特有方法
    • Properties与IO流相结合的方法
  • 案例--游戏次数

标准输入流

在这里插入图片描述

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);
    }
}

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

自己实现太麻烦,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();
    }

}

在这里插入图片描述

注意:直接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();
    }
}

字符打印流

在这里插入图片描述

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");
    }
}

案例–复制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();
    }
}

对象序列化流

序列化流

在这里插入图片描述

一定要在类中定义一个标记接口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();
    }
}

反序列化流

输出上面的序列流

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();
    }
}

在这里插入图片描述

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();
    }
}

对上述代码,若在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<String,String> prop = new Properties<String,String>();
        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);
        }
    }
}

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<String> stringPropertyNames():从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
        Set<String> names = prop.stringPropertyNames();
        for (String key : names){
//            System.out.println(key);//输出所以的键名

            String value = prop.getProperty(key);
            System.out.println(key+","+value);//输出键和对应的值
        }
    }
}

在这里插入图片描述

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();
    }
}

输出:

先只执行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

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;
            }
        }
    }
}

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

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

相关文章

必备模块知识——超声波传感器

一、超声波传感器 1、什么是超声波 人们能听到声音是由于物体振动产生的&#xff0c;它的频率在20HZ-20KHZ范围内&#xff0c;超过20KHZ称为超声波&#xff0c;低于20HZ的称为次声波。常用的超声波频率为几十KHZ-几十MHZ。 2、什么是超声波传感器&#xff08;常用的HC-SR04超…

基于PHP+MySQL教室预约管理系统的设计与实现

随着我国国民教育的提高,大学生的数量一直在不断的增加,根据网络资料的查询,发现2012年的大学生人数为600万,这是一个不小的数量,说明了我国教育的进步是巨大的。但是问题也随之产生,每年如此多的大学生就需要大学不断的扩建,可是还是不能满足如此多的学生对教室的使用,所以如何…

【学习笔记】深度学习入门:基于Python的理论与实现-与学习相关的技巧

CONTENTS六、与学习相关的技巧6.1 参数的更新6.2 权重的初始值6.3 Batch Normalization6.4 正则化6.5 超参数的验证六、与学习相关的技巧 6.1 参数的更新 神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题&#xff0c;解决这个问题的过程称为…

YOLOv7(目标检测)数据集、训练、推理过程

一、环境安装&#xff1a; pip install -r requirements.txt pip install torch1.8.2cu111 torchvision0.9.2cu111 torchaudio0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html -i https://pypi.tuna.tsinghua.edu.cn/simple二、修改配置环境 直接看下面…

[附源码]SSM计算机毕业设计血库管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

JavaScript -- 03. 运算符介绍

文章目录运算符1 算数运算符1.1 基础符号1.2 自动类型转换2 赋值运算符3 一元4 自增和自减4.1 自增运算符4.2 -- 自减运算符5 逻辑运算符5.1 逻辑非5.2 逻辑与5.3 逻辑或6 关系运算符7 相等运算符7.1 7.2 7.3 !7.4 !8 条件运算符&#xff08;三元表达式&#xff09;9 运算符的…

专栏 | 解析“全闪对象存储”(三)

在上一节“对象存储的使用场景”中&#xff0c;我们介绍了对象存储在大规模非结构化数据存储、云存储、大数据和数据湖等场景的使用。 那么&#xff0c;优秀对象存储产品是怎样的&#xff1f;如何设计、实现&#xff1f;本节&#xff0c;我们来分析、探讨这些问题。 通过前两…

推荐系统-召回-概述(四):热门推荐

无论个性化多么重要&#xff0c;热门推荐都是推荐系统里不可或缺的一部分。其一、根据“二八定律”&#xff0c;电商系统中的20%的头部内容被80%的流量消费&#xff0c;因此&#xff0c;在产品早期&#xff0c;仅仅推荐热门内容&#xff0c;实施成本不高&#xff0c;且效果也会…

【Android App】利用腾讯地图获取地点信息和规划导航线路讲解及实战(附源码和演示视频 超详细必看)

需要源码请点赞关注收藏后评论区留言~~~ 一、获取地点信息 至于如何集成腾讯地图和调用腾讯地图接口此处不再赘述&#xff0c;有需要请参见我之前的博客 腾讯地图用来搜索POI地点的工具是TencentSearch&#xff0c;通过它查询POI主要分为下列四个步骤&#xff1a; &#xff0…

MySQL---基于CentOS7

在Linux上安装MySQL 本章简单阐述一下&#xff0c;mysq基于centos7的安装步骤 在VM上模拟安装 MySQL版本为&#xff1a;8.0.30 文章目录在Linux上安装MySQL1. MySQL下载卸载MariaDB查看版本卸载2.安装解压mysql压缩包重命名创建用户和组修改权限编写配置文件配置PATH变量初始化…

基于PHP+MySQL集训队员管理系统的设计与实现

ACM是国际大学生程序设计竞赛,这是一个展示大学生风采的平台,但是在ACM报名的时候可能会有很多的队员,管理员对队员的管理是一个繁琐且复杂的过程,通常的管理模式是手工进行管理,这在很大程度上有一些弊端,为了改成这一现状需要一个对应的管理系统出现。 本设计尝试用PHP开发一…

机组运行约束对机组节点边际电价的影响研究(Matlab代码实现)

目录 1 概述 2 日前市场单时段节点电价出清优化模型 2.1 目标函数 2.2 约束条件 3 算例及运行结果 4 结论 5 参考文献 6 Matlab代码及详细文章讲解 1 概述 基于节点边际电价(locational marginal priLMP)的现货巾划lm易能量价值&#xff0c;节点电本确定节点电价&a…

高校部署房产管理系统可实现那些目标?

随着技术的不断进步和升级&#xff0c;以及高校房屋建筑物数量的不断扩充&#xff0c;建立房屋资产管理信息系统进行信息化、数字化、图形化房屋资产管理已经是势在必行。数图互通自主研发FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发…

易基因科技|单细胞甲基化测序低至2500元/样

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。12月活动来袭&#xff5e; 限时特惠&#xff01;单细胞甲基化测序低至2500元/样&#xff01; 易基因高通量单细胞DNA甲基化测序&#xff1a;单细胞DNA甲基化组学研究很大程度上受制于建库…

P3 创建Tensor

前言&#xff1a; 这里面主要讲解一下创建一个Tensor 对象的不同方法 目录&#xff1a; numpy 创建 list 创建 empty 创建 set_default_type 随机数创建 torch.full arange&linespace ones|zeros|eye r…

Springboot毕业设计毕设作品,微信网上图书商城购物小程序设计与实现

功能清单 【后台管理员功能】 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 录入资讯&#xff1a;录入资讯标题、内容等信息 管理资讯&#xff1a;查看已录入资讯列表&#xff0c;支持删除和修改 广告设置&#xff1a;上传图片和设置小程序首页轮播图广告地…

【Pandas数据处理100例】(八十九):Pandas使用date_range()生成date日期

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

Oracle 11g RAC 原地升级到 19c

作者 | JiekeXu来源 |公众号 JiekeXu DBA之路&#xff08;ID: JiekeXu_IT&#xff09;如需转载请联系授权 | (个人微信 ID&#xff1a;JiekeXu_DBA)大家好&#xff0c;我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle 11g RAC 原地升级到 19c&#xff0c;欢迎点…

Android kotlin在实战过程问题总结与开发技巧详解

1、介绍 目前Android开发中&#xff0c;分为两派&#xff0c;Java派和Kotlin派&#xff0c;Java是宇宙开发第一语言&#xff0c;地位一直处于领先位置&#xff0c;但是Java会出现一个空指针的情况&#xff0c;所以kotlin的出现&#xff0c;填补了java的一些缺陷&#xff0c;但是…

擎创技术流 | ClickHouse实用工具—ckman教程(5)

哈喽~友友们&#xff0c;又到了一期一会的技术分享时刻了&#xff0c;本期继续以视频形式与大家分享&#xff0c;话不多说&#xff0c;我们直接上干货&#xff0c;建议收藏分享马住 戳↓↓↓链接&#xff0c;一键回看前期内容&#xff1a; 擎创技术流 | ClickHouse实用工具—c…