输入输出流的使用

本文介绍了Java中的输入输出流使用,包括标准输入输出流、转换流和打印流。转换流允许将字节流转换为字符流,如InputStreamReader和OutputStreamWriter,方便处理文本数据并指定编码。打印流PrintStream和PrintWriter提供便捷的输出功能,用于字节和字符数据的打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标准输入输出流

类型默认设备
System.inInputStream键盘
System.outPrintStream显示器
package com.standard;

import java.util.Scanner;

public class InputAndOutput {
    public static void main(String[] args) {
        //System 类的 public final static InputStream in = null;
        //System.in 编译类型 InputStream
        //System.in 运行类型 BufferedInputStream
        //表示的是标准输入  键盘
        System.out.println(System.in.getClass());

        //System 类的 public final static PrintStream out = null;
        //编译类型:PrintStream
        //运行类型:PrintStream
        //表示标准输出  显示器
        System.out.println(System.out.getClass());

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容:");
        String word = scanner.next();
        System.out.println("输入的内容是:"+word);

    }
}

转换流

  1. InputStreamReader:Reader的子类,可以将InputStream(字节流)包装(转换)成Reader(字符流)

    package com.transformation;
    
    import java.io.*;
    
    //演示使用InputStreamReader转换流解决中文乱码问题
    //将字节流 FileInputStream 转换成字符流 InputStreamReader,指定编码utf-8
    public class InputStreamReader_ {
        public static void main(String[] args) throws IOException {
    
            String filePath = "E:\\JavaStudy\\a.txt";
            // 1. 将FileInputStream 转成 InputStreamReader
            //2.指定编码 utf-8
            InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "utf-8");
            //3. 把InputStreamReader 传入 BufferedReader
            BufferedReader bufferedReader = new BufferedReader(isr);
    
            //将2 和 3 合在一起
            //BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "utf-8"));
    
            //4. 读取
            String s = bufferedReader.readLine();
            System.out.println("读取内容:"+s);
            //5. 关闭外层流
            bufferedReader.close();
        }
    
    }
    
  2. OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装(转换)成Writer(字符流)

    package com.transformation;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    
    //演示OutputStreamWriter使用
    //把FileOutputStream 转成 OutputStreamWriter
    //指定处理的编码 gbk/utf-8
    public class OutputStreamWriter_ {
        public static void main(String[] args) throws IOException {
            String filePath = "E:\\JavaStudy\\b.txt";
            String charSet = "gbk";
            OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath),charSet);
            osw.write("你好,world");
            osw.close();
            System.out.println("按照 "+charSet+" 保存文件");
        }
    
    }
    
  3. 当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流

  4. 可以在使用时指定编码格式(比如utf-8,gbk,gb2312,ISO8859-1等)

打印流

字节打印流PrintStream和字符打印流PrintWriter

PrintStream类图
在这里插入图片描述

PrintWriter类图
在这里插入图片描述

字节打印流PrintStream实例:

package com.printstream;

import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;

//演示PrintStream(字节打印流/输出流)
public class PrintStream_ {
    public static void main(String[] args) throws IOException {
        PrintStream out = System.out;
        //在默认情况下,PrintStream输出数据的位置是 标准输出 即 显示器
        /*
                public void print(String s) {
                    if (s == null) {
                        s = "null";
                    }
                    write(s);
            }
         */
        out.print("hello");
        //因为print底层使用的是write,所以我们可以直接调用write进行打印/输出
        out.write("大家好才是真的好".getBytes(StandardCharsets.UTF_8));
        out.close();

        //我们可以修改打印流输出的位置/设备
        //1. 输出修改成到"E:\JavaStudy\c.txt"
        System.setOut(new PrintStream("E:\\JavaStudy\\c.txt"));
        System.out.println("修改打印流输出的位置为指定位置");
        
        PrintStream out1 = new PrintStream(new 						         FileOutputStream("E:\\JavaStudy\\d.txt"));
        out1.print("这样也可以修改位置");
        out1.close();
    }
}

字符打印流PrintWriter实例

package com.printstream;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class PrintWriter_ {
    public static void main(String[] args) throws IOException {

        PrintWriter printWriter = new PrintWriter(System.out);//传入标准输出
        printWriter.print("你好呀~~~");
        printWriter.close();

        //修改输出位置
        PrintWriter printWriter1 = new PrintWriter(new FileWriter("E:\\JavaStudy\\e.txt"));
        printWriter1.print("字符打印流");
        //必须要关闭流,才能输出到文件,否则无法输出 flush+关闭流
        printWriter1.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值