桥转换流,打印流和配置文件流

高级流:都需要底层流支持,在其基础上增强功能

转换流:桥转换流:内存和硬盘间,进行字节和字符间互相转换的流

  1. 字符编码:编码与解码格式不一时,乱码
  2. UTF-8万国码,一个汉字三个字节

package com.li.changGe.ioStream.functionStream;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class InputStreamReadAndOutputStreamWriterDemo01 {
  public static void main(String[] args) throws Exception {

    /**
     * 构建对象时注明编码格式
     *
     * 读取时将文件中的数据变成utf-8的编码,
     * 写出时变成gbk的编码
     */
    InputStreamReader input = new InputStreamReader(new FileInputStream("C:\\Users\\林木\\Desktop/test.txt"),"utf-8");

    //windows上的文件保存时,ANSI编码就是gbk编码
    OutputStreamWriter output = new OutputStreamWriter(new FileOutputStream("C:\\Users\\林木\\Desktop/test1.txt"),"gbk");

    int count;
    while ((count = input.read()) != -1){
      //O ever youthful,永远热泪盈眶!
      System.out.print((char)count);

      //O ever youthful,永远热泪盈眶!
      output.write((char)count);
      output.flush();
    }

  }

}

ANSI


打印流:主要用来将数据打印到文件中

  1. PrintStream中还含有部分操作字节的方法

  2. 当操作二进制文件时用它更好一些


  3. PrintWriter就没有了操作字节的方法

  4. 主要操作文本文件


package com.li.changGe.ioStream.functionStream;

import java.io.*;

public class PrintStreamWriterDemo01 {
  public static void main(String[] args) throws Exception{

    FileInputStream fileInputStream = new FileInputStream("C:\\Users\\林木\\Desktop/UID.jpg");

    /**
     * 可以直接用字符串来构建流
     */
    PrintStream printStream = new PrintStream(new FileOutputStream("C:\\Users\\林木\\Desktop/1.jpg"), true);

    PrintWriter printWriter = new PrintWriter(new FileWriter("C:\\Users\\林木\\Desktop/test1.txt"),true);
  //--------------------------------------------------------------------------------------------------

    byte[] bytes = new byte[1024];
    int count;
    /**
     * PrintStream中还含有部分操作字节的方法
     * 当操作二进制文件时用它更好一些
     */
    while ((count = fileInputStream.read(bytes)) != -1){
      printStream.write(bytes,0,count);
    }

  //-----------------------------------------------------------------
    /**
     * PrintWriter就没有了操作字节的方法
     * 主要操作文本文件
     */
    //原样打印到文件中去:97
    printWriter.println(97);

    //写需要刷新,而且会自己int转换char
    printWriter.write((int)97);//a
    printWriter.flush();

  }

}

printWriter


配置文件流:只存字符串的流,键值对模式.

  1. 一般用来存储配置信息


  2. 一般将配置文件设为后缀名.properties

  3. 这种文件中一般不能有中文:各种程序间的编码不同可能因为乱码而报错

  4. 如连接数据库时的属性配置


package com.li.changGe.ioStream.functionStream;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class PropertiesDemo01 {
  public static void main(String[] args) throws Exception{

    Properties properties = new Properties();
    properties.setProperty("name","长歌");
    properties.setProperty("age","18");
    properties.setProperty("sex","女");

  //--------------------------------------------------

    //获取所有字符串形式的键
    Set<String> set = properties.stringPropertyNames();

    Iterator<String> iterator = set.iterator();
    while (iterator.hasNext()){
      String next = iterator.next();
      /**
       * 18
       * 长歌
       * 女
       */
      System.out.println(properties.get(next));
    }
  //------------------------------------------------

    PrintWriter printWriter = new PrintWriter("C:\\Users\\林木\\Desktop/a.txt");

    /**
     * 将流中的数据传到输出流中
     *
     * -- listing properties --
     * age=18
     * name=长歌
     * sex=女
     */
    properties.list(printWriter);

    printWriter.flush();
  //----------------------------------------------

    FileWriter fileWriter = new FileWriter("C:\\Users\\林木\\Desktop/a.txt", true);

    /**
     * 写出到文件,可以加注释
     *
     * #fileOutput
     * #Tue Mar 15 19:49:07 CST 2022
     * age=18
     * name=长歌
     * sex=女
     */
    properties.store(fileWriter,"fileOutput");
  //---------------------------------------------------------

    FileReader fileReader = new FileReader("C:/Users/林木/Desktop/a.txt");
    /**
     * 从流中加载数据
     * 被注释的数据获取不到
     */
    properties.load(fileReader);

    //Vector式获取元素
    Enumeration<?> enumeration = properties.propertyNames();
    System.out.println("加载数据:");

    while (enumeration.hasMoreElements()){
      Object o = enumeration.nextElement();
      /**
       * 加载数据:
       * listing properties --
       * 18
       * 长歌
       * 女
       */
      System.out.println(properties.getProperty(String.valueOf(o)));
    }

  }//main

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helloses

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值