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


}

运行结果:

在这里插入图片描述

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

目录
相关文章
|
9月前
|
Java
Java IO流--标准输入System.in,输出流System.out的使用
Java IO流--标准输入System.in,输出流System.out的使用
131 0
|
数据格式
Java-IO流之标准输入、输出流
System.in和System.out分别代表了系统标准的输入和输出设备
78 0
|
编解码 Java
IO特殊操作流:标准输入输出流、字节打印流及字符打印流
IO特殊操作流:标准输入输出流、字节打印流及字符打印流的简单示例
331 0
IO特殊操作流:标准输入输出流、字节打印流及字符打印流
|
Java 存储 API
Java 学习(25)---(IO流之数据流 / 内存操作流 / 打印流 / 标准输入输出流)
数据流 可以读写基本数据类型的数据 数据输入流: DataInputStream DataInputStream(InputStream in) 数据输出流: DataOutputStream DataOutpu...
1313 0
|
存储 Java 数据安全/隐私保护
java基础学习_IO流04_用户登录注册案例(IO版)、数据操作流(操作基本数据类型的流)、内存操作流、打印流、标准输入输出流、随机访问流、合并流、序列化流(对象操作流)、Properties属性集合类、NIO(新IO)_day22总结
java基础学习_IO流04_用户登录注册案例(IO版)、数据操作流(操作基本数据类型的流)、内存操作流、打印流、标准输入输出流、随机访问流、合并流、序列化流(对象操作流)、Properties属性集合类、NIO(新IO)_day22总结 ===========================...
1579 0
|
存储 Java API
Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties
你需要的是什么,直接评论留言。 获取更多资源加微信公众号“Java帮帮” (是公众号,不是微信好友哦) 还有“Java帮帮”今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:登录注册IO版本案例(掌握) 要求,对着写一遍。 cn.i
1947 0
|
2天前
|
Java 调度
Java一分钟之线程池:ExecutorService与Future
【5月更文挑战第12天】Java并发编程中,`ExecutorService`和`Future`是关键组件,简化多线程并提供异步执行能力。`ExecutorService`是线程池接口,用于提交任务到线程池,如`ThreadPoolExecutor`和`ScheduledThreadPoolExecutor`。通过`submit()`提交任务并返回`Future`对象,可检查任务状态、获取结果或取消任务。注意处理`ExecutionException`和避免无限等待。实战示例展示了如何异步执行任务并获取结果。理解这些概念对提升并发性能至关重要。
16 5
|
2天前
|
安全 Java 调度
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第12天】 在现代软件开发中,多线程编程是提升应用程序性能和响应能力的关键手段之一。特别是在Java语言中,由于其内置的跨平台线程支持,开发者可以轻松地创建和管理线程。然而,随之而来的并发问题也不容小觑。本文将探讨Java并发编程的核心概念,包括线程安全策略、锁机制以及性能优化技巧。通过实例分析与性能比较,我们旨在为读者提供一套既确保线程安全又兼顾性能的编程指导。
|
2天前
|
Java
Java一分钟:线程协作:wait(), notify(), notifyAll()
【5月更文挑战第11天】本文介绍了Java多线程编程中的`wait()`, `notify()`, `notifyAll()`方法,它们用于线程间通信和同步。这些方法在`synchronized`代码块中使用,控制线程执行和资源访问。文章讨论了常见问题,如死锁、未捕获异常、同步使用错误及通知错误,并提供了生产者-消费者模型的示例代码,强调理解并正确使用这些方法对实现线程协作的重要性。
13 3