java基础:IO流---非节点流之转换流
2021/11/17 20:42:33
本文主要是介绍java基础:IO流---非节点流之转换流,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
转换流
简介
字节流是比较通用的IO流,因为所有数据在计算机中都是以字节的形式存储的,所以在很多场景下,都提供了字节流的操作实现。字符流只是适用于读写字符数据的场景,例如,如果要读取别人写给你的一部电影,那么使用字符流很显然是不合适的,但是如果是读取别人写给你的一份代码文件,使用字符流就没有问题,因为代码文件里面都是字符。这时候需要注意的是,别人写给你的文件字符的编码,要和你读出来的文件字符编码一致,否则读出的文字就可能出现乱码。
转换流,可以在把一个字节流转换为字符的同时,并指定转换的字符编码。
输出
java.io.OutputStreamWriter,可以将字节输出流转换为字符输出流,并指定编码
下面是它的部分源码
public class OutputStreamWriter extends Writer { public OutputStreamWriter(OutputStream in) { //使用默认编码转换 } public OutputStreamWriter(OutputStream in, String charsetName){ //使用指定编码转换 } }
可以看出,它的构造器参数,要求传入一个需要转换的字节输出流,和一个指定的字符编码
OutputStreamWriter本身就是一个字符输出流,因为它继承了 Writer
使用
public static void main(String[] args) { //声明一个PrintWriter流, PrintWriter out = null; //声明转换流,用来包装字节流,并转换为字符流 OutputStreamWriter osw = null; try { //创建文件对象 File file = new File("src/Test/test5/a.txt"); //将字节流转换为字符流 osw = new OutputStreamWriter(new FileOutputStream(file),"UTF-8"); //“包裹”转换流,增强这个字符流的功能,可以一次写出一行字符串,并自动换行 //注意,转换流同时也是一个字符流 out = new PrintWriter(osw); //或者可以写在一起也是ok的 // out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8")); //输出到文件a.txt中 out.println("你好!"); out.flush(); } catch (IOException e) { e.printStackTrace(); } finally { if(osw != null) { try { osw.close(); } catch (IOException e) { e.printStackTrace(); } } if(out != null) { out.close(); } } }
在a.txt文件中的输出
UTF-8编码时:
GBK编码时
输入
java.io.InputStreamReader,可以将字节输入流转换为字符输入流,并指定编码
public class InputStreamReader extends Reader { public InputStreamReader(InputStream in) { //使用默认编码转换 } public InputStreamReader(InputStream in, String charsetName){ //使用指定编码转换 } }
它的构造器参数,要求传入一个需要转换的字节输入流,和一个指定的字符编码,InputStreamReader本身就是一个字符输出流,它继承了 Reader
具体使用
public static void main(String[] args) { //缓冲流,用来提高效率 BufferedReader in = null; //声明转换流 InputStreamReader isr = null; File file = new File("src/Test/test5/a.txt"); try { //将字节流转换为字符流,并且指定读取时的编码格式 isr = new InputStreamReader(new FileInputStream(file),"GBK"); in = new BufferedReader(isr); //写在一起,就只要关闭in的资源 // in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); //使用流 String line = null; while((line = in.readLine())!= null) { //输出到控制台 System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } finally { if(isr != null) { try { isr.close(); } catch (IOException e) { e.printStackTrace(); } } if(in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
编码格式对应正确才可以读出来,例如,如果你是用UTF-8编码写进文件的你就得用UTF-8的编码格式读取文件
这篇关于java基础:IO流---非节点流之转换流的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南