Java_IO流05:打印流、数据流、标准输入、输出流(了解)

简介: Java_IO流05:打印流、数据流、标准输入、输出流(了解)

@[toc]

处理流之三标准输入、输出流

关于System类可参考文章:Java中System类、Math类、BigInteger与BigDecimal分别是什么?

  • System.inSystem.out分别代表了系统标准的输入和输出设备(控制台的输出输入)
  • 默认输入设备是:键盘,输出设备是:显示器
  • System.in的类型是InputStream
  • System.out的类型是PrintStream,其是OutputStream的子类 FilterOutputStream 的子类
  • 重定向:通过System类的setIn,setOut方法对默认设备进行改变。

    • public static void setIn(InputStream in)
    • public static void setOut(PrintStream out)

练习题引入:

题目:从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续 进行输入操作,直至当输入“e”或者“exit”时,退出程序。

方法一:用Scanner类实现,调用next()返回一个字符串

/*
从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续
进行输入操作,直至当输入“e”或者“exit”时,退出程序。
 */
public class LxtTest {
    public static void main(String[] args) {
        while (true){
            System.out.print("请输入:");
            Scanner scanner = new Scanner(System.in);
            String next = scanner.next();
            if (next.equals("e")||next.equals("exit")){
                System.out.println("程序终止!");
                break;
            }else {
                System.out.println(next.toUpperCase());
            }
        }
    }
}

方法二:用System.in实现。System.in--->转换流--->bufferedReader的readLine()

package com.jsm.IO_05;

import org.junit.Test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class OtherStreamTest {
    public static void main(String[] args) {
    /*
    标准的输入、输出流
    System.in:标准的输入流,默认从键盘输入
    System.out:标准的输出流,默认从控制台输出
     */
        BufferedReader br = null;
        try {
            InputStreamReader isr = new InputStreamReader(System.in);
            br = new BufferedReader(isr);
            while (true) {
                System.out.println("请输入字符串:");
                String data = br.readLine();
                if ("e".equalsIgnoreCase(data) || "exit".equalsIgnoreCase(data)) {
                    System.out.println("输入终止!");
                    break;
                }
                String s = data.toUpperCase();
                System.out.println(s);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

处理流之四打印流

  • 实现将基本数据类型的数据格式转化为字符串输出
  • 打印流:PrintStream和PrintWriter

    • 提供了一系列重载的print()和println()方法,用于多种数据类型的输出
    • PrintStream和PrintWriter的输出不会抛出IOException异常
    • PrintStream和PrintWriter有自动flush功能
    • PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。 在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。
    • System.out返回的是PrintStream的实例
  • 打印流都是输出没有输入
  • println()其实就是打印流的方法
package com.jsm.IO_05;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

public class PrintlnTest {
    public static void main(String[] args) {
        PrintStream ps = null;
        try {
            FileOutputStream fos = new FileOutputStream(new File("D:\\text.txt"));
// 创建打印输出流,设置为自动刷新模式(写入换行符或字节 '\n' 时都会刷新输出缓冲区)
            ps = new PrintStream(fos, true);
            if (ps != null) {// 把标准输出流(控制台输出)改成文件
                System.setOut(ps);
            }
            for (int i = 0; i <= 255; i++) { // 输出ASCII字符
                System.out.print((char) i);
                if (i % 50 == 0) { // 每50个数据一行
                    System.out.println(); // 换行
                }
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (ps != null) {
                ps.close();
            }
        }

    }
}

处理流之五数据流

  • 为了方便地操作Java语言的基本数据类型和String的数据,可以使用数据流
  • 数据流有两个类:(用于读取和写出基本数据类型、String类的变量或字符串

    DataInputStreamDataOutputStream

    分别“套接”在 InputStream 和 OutputStream 子类的流上

  • DataInputStream中的方法:

在这里插入图片描述

  • DataOutputStream中的方法

    将上述的方法的read改为相应的write即可


  • 练习:将内存中的字符串、基本数据类型的变量写出到文件中
    注意:处理异常的话仍然使用try—catch—finally(这里直接抛异常是方便看过程)

代码:

@Test
public void test1() throws Exception {
    //1.
    DataOutputStream dos = new DataOutputStream(new FileOutputStream("hello111.txt"));
    //2.
    dos.writeUTF("金士曼");
    dos.flush();//刷新操作,一旦执行就会将内存中的数据写入文件
    dos.writeInt(19);
    dos.flush();
    dos.writeBoolean(true);
    dos.flush();
    //3.
    dos.close();
}

运行结果:生成的文件

在这里插入图片描述

解释:这个并不是乱码,这个文件不是直接双击打开,而是用DataInputStream去读,代码如下

代码:(读文件)

@Test
public void test2() throws IOException {
    //1.
    DataInputStream dis = new DataInputStream(new FileInputStream("hello111.txt"));
    //2.
    String name=dis.readUTF();
    int age=dis.readInt();
    boolean isMale =dis.readBoolean();

    System.out.println(name);
    System.out.println(age);
    System.out.println(isMale);


}

运行结果:

在这里插入图片描述

注意:读取数据的时候需要按写入的顺序去读,不然会报异常

目录
相关文章
|
传感器 网络协议 算法
Java网络编程实时数据流处理
在现代计算机应用程序中,处理实时数据流是一项关键任务。这种数据流可以是来自传感器、网络、文件或其他源头的数据,需要即时处理并做出相应的决策。Java提供了强大的网络编程工具和库,可以用于处理实时数据流。本文将详细介绍如何使用Java进行实时数据流处理。
135 0
|
2月前
|
JavaScript 前端开发 Java
java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
【8月更文挑战第11天】java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
26 0
java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
|
2月前
|
消息中间件 负载均衡 Java
"深入Kafka核心:探索高效灵活的Consumer机制,以Java示例展示数据流的优雅消费之道"
【8月更文挑战第10天】在大数据领域,Apache Kafka凭借其出色的性能成为消息传递与流处理的首选工具。Kafka Consumer作为关键组件,负责优雅地从集群中提取并处理数据。它支持消息的负载均衡与容错,通过Consumer Group实现消息的水平扩展。下面通过一个Java示例展示如何启动Consumer并消费数据,同时体现了Kafka Consumer设计的灵活性与高效性,使其成为复杂消费场景的理想选择。
104 4
|
3月前
|
搜索推荐 Java 大数据
Java中的数据流处理与流式计算实现
Java中的数据流处理与流式计算实现
|
3月前
|
监控 搜索推荐 Java
实战:基于Java的实时数据流处理平台
实战:基于Java的实时数据流处理平台
|
4月前
|
算法 Java 数据处理
Java算法模板 数据流快读
Java算法模板 数据流快读
26 2
|
5月前
|
Go Java C++
Java每日一练(20230407) 数据流变为多个不相交区间、最小栈、柱状图中最大的矩形
Java每日一练(20230407) 数据流变为多个不相交区间、最小栈、柱状图中最大的矩形
58 0
Java每日一练(20230407) 数据流变为多个不相交区间、最小栈、柱状图中最大的矩形
|
Java
Java IO流--数据流DataInputStream和DataOutputStream的使用
Java IO流--数据流DataInputStream和DataOutputStream的使用
167 0
|
Java
Java IO流--标准输入System.in,输出流System.out的使用
Java IO流--标准输入System.in,输出流System.out的使用
178 0
|
算法 Java
Java每日一练(20230505) 递增路径、编辑距离、数据流
Java每日一练(20230505) 递增路径、编辑距离、数据流
95 0