Day20-1.转换流 、标准输入输出流 、打印流

1 转换流

1.1 转换输入流和转换输出流

  1. OutputStreamWriter:转换输出流,在输出数据时,可以指定编码格式
    构造方法:
    OutputStreamWriter(OutputStream in, Charset cs) :使用基础的输出流对象,指定以cs 编码格式来写出信息

  2. InputStreamReader:转换输入流,在输入数据时,可以指定编码格式
    InputStreamReader(InputStream in, Charset cs) :使用基础的输入流对象,指定以cs编码 格式读取信息

  3. 总结:
    如果读取信息:读取的编码,应该和源文件的编码保持一致
    如果是写出信息:写出的编码,应该和目标文件编码保持一致
    使用的前提:
    如果读取的文件或者写出的文件,和当前运行环境编码是不对应的使用转换流

  4. 特点:
    不管是转换输入流还是转换输出流,都是字符流

转换输入流代码

package demos2;

import java.io.*;

public class Demo01 {
    public static void main(String[] args) throws IOException {
//        FileReader fr = new FileReader("day20/x.txt");
        //解决方案:如果运行环境和源文件的格式编码不对应,应该以源文件的编码读取信息
        //创建一个转换输入流对象,可以指定编码格式读取信息
        //执行的编码:如果需要读取信息,就以源文件格式读取
        InputStreamReader isr = new InputStreamReader(new FileInputStream("day20/x.txt"),"gbk");
        int i;
        while((i = isr.read()) != -1){
            System.out.println((char)i);
        }
        isr.close();
    }
}

转换输出流代码

package demos2;

import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

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

//        FileWriter fw = new FileWriter("day20/y.txt");
        //问题:目标文件的编码是UTF-8
        //解决:就应该执行UTF-8的格式去写出信息
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("day20/y.txt"),"utf-8");
        osw.write("你好你好");
        osw.close();
    }
}

2 标准输入流输出流

2.1 标准输入流

  1. 概述:System.in
    (1)该流的类型为InputStream,属于是字节流
    (2)默认关联的设备为键盘,即数据源为键盘
    (3)通过System.setIn(InputStream in)方法,可以更改标准输入流关联的设备

代码

package demos3;

import java.io.*;
import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) throws IOException {
        //创建一个标准字节输入流
//        InputStream is = System.in;
//        //一次只能读取一个字节
//        int i = is.read();
//        System.out.println(i);

        //将字节输入流,包装为一个字符输入流
//        InputStreamReader isr = new InputStreamReader(System.in);
//        //将这个字符输入流,包装为一个高效字符输入流
//        BufferedReader br = new BufferedReader(isr);
//        //读取一行信息
//        String str = br.readLine();
//        System.out.println(str);

        //更改System.in默认读取的位置
        //默认从键盘读取,现在更改为从x.txt读取
        System.setIn(new FileInputStream("day20/x.txt"));
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(str);
    }
}

2.2 标准输出流

  1. 概述:System.out
    (1)该流的类型为PrintStream,其父类为OutputStream是一个字节输出流
    (2)默认关联的设备为控制台,即数据目的地为控制台
    (3)通过System.setOut(PrintStreamout)方法,可以更改标准输出流关联的设备

代码

package demos3;

import java.io.FileNotFoundException;
import java.io.PrintStream;

public class Demo02 {
    public static void main(String[] args) throws FileNotFoundException {

//      PrintStream ps = System.out;
//      ps.write(97);
//      ps.close();

      System.setOut(new PrintStream("day20/a.txt"));
      PrintStream ps = System.out;
      ps.write(97);
      ps.close();
    }
}

3 打印流

  1. 打印流介绍:
    (1)打印流分为打印字节流和打印字符流:
    PrintStream打印字节流 属于字节输出流
    PrintWriter打印字符流属于字符输出流
    (2)打印流属于输出流。
    (3)打印流中在继承各个父类中的write()方法外,还提供了很多重载形式的print()和println()方法(特有的方法)

3.1 打印字节流

  1. 打印字节流:
    PrintStream:是OutPutStream的间接子类,是一个输出流,也是一个字节流
  2. 构造方法:
函数Value
PrintStream(File file)创建具有指定文件的新打印流。
PrintStream(String fileName)创建指定文件路径的新打印流。
PrintStream(OutputStream out)将一个字节流对象,封装为一个打印流
  1. 常用方法:
    (1)从父类中继承的方法:write()
    注意:只可以写出一个字节信息
    (2)自己特有的方法:print println
    不仅可以输出字节信息,还可以输出各种数据类型的信息
    比如:整数、小数、字符、字符串、对象
  2. 注意事项:
    (1)如果写出的是一个对象,该对象所属类型重写了toString方法,写出的就是属性值,如果该对象所属类型没有重写,写出的就是一个地址值。
    (2)如果写出的数组是一个字符数组,写出的是数组的内容
    如果写出的数组是一个其他数组,写出的是数组的地址值

代码

package demos4;

import javax.annotation.processing.Filer;
import java.io.*;

public class Demo01 {
    public static void main(String[] args) throws IOException {
        //创建一个打印字节输出流
        PrintStream ps = new PrintStream("day20/a.txt");
        //打印一个字节信息(从父类中继承的方法)
        ps.write(97);
        //打印各种类型的数据(自己单独的特殊方法)
        ps.print(100);
        ps.print("abc");
        ps.print(new Object());
        //在文件中进行换行操作
        ps.println(1000);
        ps.println("xyz");
        ps.println(new char[]{'a','b','c'});
        //关流
        ps.close();
    }
}

3.2 打印字符流

  1. 打印字节流:
    PrintWriter:是Writer的间接子类,是一个输出流,也是一个字符流
  2. 构造方法:
函数Value
PrintWriter (File file)创建具有指定文件的新打印流。
PrintWriter (String fileName)创建指定文件路径的新打印流。
PrintWriter(OutputStream out)将一个字节流封装为一个打印字符流
PrintWriter(Writer out)将一个字符流封装为一个打印流
PrintWriter(OutputStream out,boolean b)将一个字节流封装为一个打印字符流, 可以实现自动刷新功能
PrintWriter(Writer out,boolean b)将一个字符流封装为一个打印流,可以实现自动刷新功能
  1. 常用方法:
    (1)从父类中继承的方法:write()
    注意:可以写出一个字符,也可以写出一个字符串
    (2)自己特有的方法:print println

代码

package demos4;

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

public class Demo02 {
    public static void main(String[] args) throws IOException {
//        PrintWriter pw = new PrintWriter("day20/b.txt");
        PrintWriter pw = new PrintWriter(new FileWriter("day20/b.txt",true),true);
        //从父类继承的方法
        pw.write("你好你好");
        pw.write('a');
        //有自己定义的方法
        pw.print(100);
        pw.print(100.01);
        pw.println(new Person("张三",23));
//        pw.close();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值