当前位置: 首页 > news >正文

java基础之IO流之字符流

字符流

传输char和String类型的数据

输入流

  • 抽象父类:Reader

  • 节点流:FileReader

常用方法
  1. int read():读取一个字符,读取到达末尾,返回-1

package com.by.test2;
​
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
​
public class TestReader {public static void main(String[] args) {try(//字符输入节点流FileReader fr=new FileReader("file/d.txt")){while (true) {int n = fr.read();if (n == -1) {break;}System.out.println((char) n);}
​}catch (FileNotFoundException e) {System.out.println("文件路径不正确");} catch (IOException e) {System.out.println("读写失败!");e.printStackTrace();} catch (Exception e) {System.out.println("未知异常!");e.printStackTrace();}}
}

输出流

  • 抽象父类:Writer

  • 节点流:FileWriter

常用方法
  1. write(int ):向目标文件写入一个字符

  2. write(String ):向目标文件写入一个字符串

package com.by.test2;
​
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
​
public class TestWriter {public static void main(String[] args) {try(//字符输出节点流FileWriter fw=new FileWriter("file/e.txt")){fw.write(65);fw.write(66);fw.write(67);//写入字符串fw.write("一二三四五");fw.write("上山打老虎");
​System.out.println("写入成功!");
​}catch (FileNotFoundException e) {System.out.println("文件路径不正确");} catch (IOException e) {System.out.println("读写失败!");e.printStackTrace();} catch (Exception e) {System.out.println("未知异常!");e.printStackTrace();}}
}

输入缓冲过滤流

  • BufferedReader

方法
  1. String readLine(): 一次读取一行数据,读取到达末尾返回null

package com.by.test2;
​
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
​
public class TestBufferedReader {public static void main(String[] args) {try(//字符输入节点流FileReader fr=new FileReader("file/d.txt");//添加缓冲过滤流BufferedReader br=new BufferedReader(fr)){while (true) {//接收本次读取内容String s = br.readLine();//判断读取是否到达末尾if (s == null) {break;}System.out.println(s);}
​}catch ...}
}

输出缓冲过滤流

  • PrintWriter

    • BufferedWriter中的方法没有PrintWriter更多更实用

方法
  1. print(值):向目标文件写入一个数据,默认不换行

  2. println(值): 向目标文件写入一个数据,默认换行

  3. println(): 向目标文件写入一个空行

package com.by.test2;
​
import com.by.entity.Student;
​
import java.io.*;
​
public class TestPrintWriter {public static void main(String[] args) {try(//字符输出节点流FileWriter fw=new FileWriter("file/e.txt");//添加缓冲过滤流PrintWriter pw=new PrintWriter(fw)){pw.print(5.5);pw.print(true);pw.println();pw.println("一二三四五");pw.println("上山打老虎");
​Student s = new Student("zhangsan", 20, 99.5);pw.println(s);
​System.out.println("写入成功!");
​}catch...}
}

pw对象中的print|println方法写对象与对象过滤流写对象的区别?

pw只是在读写对象引用的toString方法的结果,并未读写对象的完整信息,所以无法对对象进行序列号及反序列化

对象过滤流是在读写对象的完整信息,所以可以对对象进行序列号及反序列化

pw中的print|println方法与输出语句中的有何不同?

pw是将数据写入到目标文件长久保存

标准输出流是将数据写入到控制台临时查看

字符编码集

  • 编码: 原内容–>加密–>数字

  • 解码: 数字–>解密–>原内容

常见编码集

  • GBK: 简体中文

  • Big5: 繁体中文

  • ASC||: 美国

  • ISO-8859-1: 西欧

  • Unicode:

    • UTF-16: java默认编码集,所有内容统一占用2个字节

    • UTF-8: 行业标准, 所占字节由内容大小决定,通常为1-3个字节

不同编码集拥有独立的编解码方式,之间互不相通

桥转换流

  • 输入: InputStreamReader

  • 输出: OutputStreamWriter

创建

  • 基于字节节点流对象. 将字节流中的内容转换为字符流,并在转换过程中设置数据传输的编码集

InputStreamReader isr=new  InputStreamReader(fis对象,"编码集");
OutputStreamWriter osw=new OutputStreamWriter(fos对象,"编码集");
步骤
  1. 创建字节节点流,声明被操作的文件路径

  2. 创建桥转换流,声明操作文件时所用的编码集

  3. 添加缓冲过滤流,提高数据操作的便捷性

使用

对同一文件的输入输出操作必须保证编解码集一致

package com.by.test2;
​
import java.io.*;
​
public class Test_ISR_OSW {public static void main(String[] args) {try(//创建输出流//创建字节输出节点流FileOutputStream fos=new FileOutputStream("file/m.txt");//创建桥转换流OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");//添加缓冲过滤流PrintWriter pw=new PrintWriter(osw);
​//创建输入流BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("file/m.txt"),"GBK"))
​){//先写pw.println("一二三四五");pw.println("上山打老虎");pw.println("老虎没打着");pw.println("打着小松鼠");//刷新缓冲区pw.flush();//后读while (true) {String s = br.readLine();if (s == null) {break;}System.out.println(s);}}catch...}
}

掌握

  1. 缓冲过滤流的使用

  2. 桥转换流的创建和使用

http://www.lryc.cn/news/280647.html

相关文章:

  • chromium通信系统-ipcz系统(十一)-mojo binding
  • 鸿蒙开发基础-Web组件之cookie操作
  • 什么是k8s和声明式编程?
  • Fluids —— MicroSolvers DOP
  • 工业智能网关:HiWoo Box远程采集设备数据
  • Apollo之原理和使用讲解
  • 魅族MX4pro系统升级、降级
  • 【Docker】快速入门之Docker的安装及使用
  • 记录汇川:H5U于Factory IO测试13
  • PYTHON通过跳板机巡检CENTOS的简单实现
  • 网络配置以及命令详解
  • 商务外语MR混合现实仿真情景实训教学
  • 牛客周赛 Round 28 解题报告 | 珂学家 | 组合数学 + 离散化树状数组
  • Python系列(3)—— 变量
  • Java 并发性和多线程2
  • 最新消息:OpenAI GPT Store 正式上线,GPTs 应用商店来了!
  • memory泄露分析方法(java篇)
  • kubectlkubeletrancherhelmkubeadm这几个命令行工具是什么关系?
  • Day26 669修剪二叉搜索树 108有序数组转为二叉搜索树 538二叉搜索树转换为累加树
  • 优化CentOS 7.6的HTTP隧道代理网络性能
  • 第二篇ts,es6箭头函数结合typescript,和for...of
  • 异构多品牌高清视频监控接入-技术方案
  • 编程探秘:Python深渊之旅-----机器学习入门(七)
  • SpringMVC 学习博客记录
  • 重磅!OpenAI正式发布,自定义ChatGPT商店!
  • LeetCode讲解篇之47. 全排列 II
  • 机器学习~从入门到精通(二)线性回归算法和多元线性回归
  • IPv6组播--PIM
  • 如何在Spring Boot中使用EhCache缓存
  • PDF 文档解除密码