首页 > 其他分享 >io流之转换流

io流之转换流

时间:2022-12-10 10:23:42浏览次数:58  
标签:转换 ConvertStream 流之 Lucky System io new com

先知:

Java IO流中提供了两种用于将字节流转换为字符流的转换流。

其中InputStreamReader用于将字节输入流转换为字符输入流,

其中OutputStreamWriter用于将字节输出流转换为字符输出流

作用:使用转换流可以在一定程度上避免乱码,还可以指定输入输出所使用的字符集

1、OutputStreamWriter,将字节输出流转换为字符输出流。创建使用指定字符集的 OutputStreamWriter,如果不指定字符集就使用默认字符集创建OutputStreamWriter。转换之后可以不用关闭OutputStream

2、InputStreamReader,将字节输入流转换为字符输入流。创建使用指定字符集的 InputStreamReader,如果不指定字符集就使用默认字符集创建InputStreamReader。转换之后可以不用关闭InputStream

 

 

 

package com.Lucky.io.ConvertStream;

import java.io.*;
import java.nio.charset.Charset;
/*
    转换流:  inputStreamReader -->字符转换输入流
            outputStreamWriter-->字符转换输出流


     作用:1.指定编码格式读写数据【JDK11以后就被淘汰了】
          2.字节流想用字符流的方法
 */
/**
 * 字节转换流:读取
 *
 *    每天一个小知识:查看文件的编码格式--》打开文件,另存为,看到ANSI就是GBK
 *
 */
public class demo1 {
    public static void main(String[] args) throws IOException {
        System.out.println("------了解即可:在JDK11的时候就被淘汰了-----------");
        InputStreamReader inStrReader=
                new InputStreamReader(new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"),"GBK");

        int val;
        while ((val=inStrReader.read())!=-1){
            //乱码:因为该路径的文件是UFT-8编码格式的数据,而我们将编码格式改为了GBK,所以出现了乱码
            System.out.print((char)val);
        }
        inStrReader.close();


        System.out.println();
        System.out.println("----------------要掌握的写法:-----------------------");
        FileReader reader=
                new FileReader("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\GBKdata.txt",Charset.forName("GBK"));
        int gbk;
        while ((gbk=reader.read())!=-1){
            System.out.print((char)gbk);
        }
        reader.close();

    }
}
package com.Lucky.io.ConvertStream;

import java.io.*;
import java.nio.charset.Charset;

/**
 * 字节转换流:写出
 */
public class demo2 {
    public static void main(String[] args) throws IOException {
        System.out.println("------了解即可:在JDK11的时候就被淘汰了-----------");
        OutputStreamWriter inStrWriter=
                new OutputStreamWriter(new FileOutputStream(
                        "H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"),
                        "UTF-8");
        inStrWriter.write("你好!唯易");
        
        inStrWriter.close();


        System.out.println();
        System.out.println("----------------要掌握的写法:-----------------------");
        FileWriter write=
                new FileWriter(
                        "H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\GBKdata.txt",
                        Charset.forName("GBK"));

        write.write("你好!唯易");
        write.close();

    }
}

  注意点: 以上使用的不是转换流的常用形式

   转换流的应用场景:字节流想要使用字符流的方法

综合小练习:

package com.Lucky.io.ConvertStream;
/*
利用字节流读取纯文本文件,还要一次读取一行【不能出现乱码】
 */

import java.io.*;

/**
 * 分析:  ①用字节流读取纯文本文件会出现乱码②一次要读取一行【满足要求的只有字符缓冲流】
 *        ③乱码情况要考虑④结合条件知道要使用--》字节流/字符缓冲流/字符转换流
 */
public class byteStreamfindFile {
    public static void main(String[] args) throws IOException {
        System.out.println("---------初级写法----------");
        //字节输入流
        InputStream inputStream=
                new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt");
       //字符转换输入流
        InputStreamReader inReader=new InputStreamReader(inputStream);
        //字符缓冲流
        BufferedReader bufReader=new BufferedReader(inReader);

        String str;
        while ((str=bufReader.readLine())!=null){
            System.out.println(str);
        }

        bufReader.close();

    }
}

  

package com.Lucky.io.ConvertStream;

import java.io.*;
import java.nio.charset.Charset;

/*
将内容为UTF-8编码格式文件转换--》GBK编码格式文件
 */
public class convertData {
    public static void main(String[] args) throws IOException {
        System.out.println("------了解即可:在JDK11的时候就被淘汰了-----------");
//        InputStreamReader inReader=
//                new InputStreamReader(new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"),"UTF-8");
//        OutputStreamWriter outWriter=
//                new OutputStreamWriter(new FileOutputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\gbkConvert.txt"),"GBK");
//
//        int val;
//        while ((val=inReader.read())!=-1){
//            outWriter.write(val);
//        }
//        outWriter.close();
//        inReader.close();


        System.out.println("----------------要掌握的写法:-----------------------");
        FileReader Freader=new FileReader("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt", Charset.forName("UTF-8"));
        FileWriter Fwriter=new FileWriter("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\gbkConvert.txt", Charset.forName("GBK"));

        int str;
        while ((str=Freader.read())!=-1){
            Fwriter.write(str);
        }
        Fwriter.close();
        Freader.close();
    }
}

  

 

标签:转换,ConvertStream,流之,Lucky,System,io,new,com
From: https://www.cnblogs.com/Lucky-only/p/16970854.html

相关文章

  • io流之序列化与反序列化流
    packagecom.Lucky.io.serializeOrUnserialize;importjava.io.*;/*序列化流:将java对象写到本地文件中【应用场景:游戏存档……………………】反序列化流:......
  • io流之【字节/字符缓冲流】
    缓冲流,也叫高效流,是对4个基本的Filexxx流的增强,所以也是4个流,按照数据类型分类:字节缓冲流:BufferedInputStream,BufferedOutputStream字符缓冲流:BufferedReader,Buffered......
  • io流之字节流【基础流】
    ①字节输入流:读取文件中的数据packagecom.Lucky.io.byteStream;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOExceptio......
  • io流之字符流【基础流】
    相对于字节流来说,字符流本身就存在:缓冲区先解:缓冲区:reader-->sd-->bb作用:缓冲区位于内存当中,大大的提高了数据的读写效率!!!! ......
  • io之异常处理
    packagecom.Lucky.io;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;/*......
  • log4net两分钟三步急速搭建日志框架教程(注意System.Configuration.ConfigurationError
    最近接了个活,winform的帮人做几个页面,这里就以winform项目为例了,之前log4net都是项目中继承好了的,这次自己研究从0到1搭建了一个,发现其实也蛮简单的,主要分为以下三步和一个......
  • app提交上架最新流程 ios​
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • iOS现有APP上架流程​
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • JavaScript:变量的作用域,window对象,关键字var/let与function
    为什么要将这些内容放在一起,因为他们都跟初始化有关系,我们慢慢说吧。我们在代码中,都会声明变量、函数和对象,然后由浏览器解释器(下面简称浏览器)执行;我们还说过,变量和对象......
  • mybatis-plus中出现 org.apache.ibatis.binding.BindingException: Invalid bound sta
    记录用mybatis-plus写后端代码时出现了如下的问题org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.springboot.mapper.BooksMa......