1. Reader

字符输入流

read(0:读取单个字符返回

read(char[]):将数据读到数组中,返回读取的个数

2. Writer

字符输入流

已知子类:

  • BufferedWriter:高效
  • CharArrayWriter:写入内存缓冲区,不是写入文件
  • PrintWriter:打印流,提供自动刷新,自动换行等功能

写的位置不同,所以write()未实现,所以Writer为抽象类。起到规范的作用。

3. 编码

3.1 常见的编码

GBK

最常用的中文码表,用2个字节表示(第一个字节开头为1,第二个字节开头为0)

unicode

国际标准码,2个字节存储。

Java中char类型用此表,char c='a';占用两个字节

Java中字符串按系统默认表解析,简体中文版,字符串默认码表是GBK。

UTF-8

基于unicode,一个字节存储,更标准化,在每一个字节头加了编码信息。

3.2 可识别中文的码表

GBK,UTF-8

3.3 编码和解码

1、编码:文字----->(数字),"abc".getBytes()----->byte[]

2、解码:(数字)----->文字,byte[] b={97,98,99}; new String(b);

4. FileReader

java.io.FileReader;

读取字符流

继承了InputStreamReader--->Reader

BufferedReader也继承了Reader.

4.1 构造方法

假定默认字符编码和默认自己缓冲区大小都适当

FileWriter(String fileName);

FileWriter(String fileName,boolean append):是否追加

4.2 读数据步骤

  1. 创建输入流对象
  2. 调用输入流对象的读数据方法
  3. 释放资源
import java.io.FileReader;
import java.io.IOException;public class Test{public static void main(String[] args) throws IOException  {FileReader fr=new FileReader("a.txt");int ch=0;while((ch=fr.read())!=-1){//输出字符对应的编码值System.out.println(ch);//输出字符本身System.out.println((char)ch);}fr.close();}
}

运行结果:

4.2.1 分析

FileReader fr=new FileReader("a.txt"):文件a.txt必须存在,否则抛出java.io.FileNotFoundException异常。

int read():一次读取一个字符。

  • int ch=fr.read();
  • 若文件a.txt中有换行,read()也会读到

int read(char[] chs):返回的是实际读取的个数

  • char[] chs=new char[5];
  • int len=fr.read(chs);       //len=5
  • chs;     //chs={'h','e','l','l','o'}
  • len=fr.read(chs);       //len=5
  • chs;     //chs={'\r','\n','w','o','r'}
  • len=fr.read(chs);       //len=4
  • chs;     //chs={'l','d','\r','\n','r'}------上一次读取的r,此次未覆盖

说明len读取长度,不是实际chs的长度————最后显示数据时,格式为:System.out.println(new String(chs,0,len));只转实际读取的长度,排除了前面情况中的'r'。

当实际读取长度为-1时,说明无数据可读了,可作为循环判断条件。

5. FileWriter

java.io.FileWriter;

会抛出IO异常

5.1 构造函数

FileWriter(String FileName);

FileWriter(String FileName,boolean append);是否追加

5.2 写数据步骤

  • 创建输出流对象
  • 调用输出流对象的写数据方法
  • 释放资源
import java.io.FileWriter;
import java.io.IOException;public class Test{public static void main(String[] args) throws IOException  {FileWriter fw=new FileWriter("a.txt");fw.write("你好!");fw.flush();fw.close();}
}

运行结果:

5.2.1 分析

  • FileWriter fw=new FileWriter("a.txt");----做的事情包括:

    • 创建一个a.txt文件,
    • 创建一个输出流对象fw
    • 将输出流对象指向文件
  • write(String str):调用fw.write("IO流")时,并未将IO流写入文件,而是写入了内存缓冲区,需调用fw.flush()将缓冲区的数据刷新到文件中(硬盘存储基本单位是字节,此处是字符串,需刷)
  • 不释放资源时,当程序未结束时,不可删除文件a.txt,因为正在被Java程序使用。
  • 当调用fw.close()后,即使Java程序未结束,也可删除a.txt。
  • 若未写fw.flush()而直接写了fw.close()则也会将内容刷新到文件中。因为close()会在关闭前检查缓冲区,若有内容,先fluse()再close(),释放资源。
  • close()之后,流对象fw不可再使用。

5.2.2 write方法

write(String str):写一个字符串数据

write(String str,int index,int len):一部分

write(int ch):写一个字符数据,‘a’,97都可以

write(char[] chs):写一个字符数组

write(char[] cha,int index,int len):一部分

5.2.3 实现数据的换行

fw.write("\n");

但用记事本打开无换行,因为Windows识别的换行是“\r\n”

  • Windows:\r\n
  • Linux:\n
  • mac:\r

5.2.4 数据的追加写入

用构造函数:FileWriter(String FileName,boolean append);设置append为true,默认是false。

5.3 复制文件

数据源:a.txt

读数据:FileReader

目的地:b.txt

写数据:FileWriter

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class Test{public static void main(String[] args) throws IOException  {FileReader fr=new FileReader("a.txt");FileWriter fw=new FileWriter("e:\\b.txt");int ch=0;while((ch=fr.read())!=-1)fw.write(ch);fw.flush();fw.close();fr.close();}
}

运行结果;

              

IO-3(Reader、Writer、编码、FileReader、FileWriter)相关推荐

  1. Go编程技巧--io.Reader/Writer

    Go原生的pkg中有一些核心的interface,其中io.Reader/Writer是比较常用的接口.很多原生的结构都围绕这个系列的接口展开,在实际的开发过程中,你会发现通过这个接口可以在多种不同的 ...

  2. golang中的io.Reader/Writer

    本文整理自Go编程技巧–io.Reader/Writer Go原生的包中有一些核心的interface,其中io.Reader/Writer是比较常用的接口.很多原生的结构都围绕这个系列的接口展开,在 ...

  3. java filewriter 编码_Java FileWriter 类

    Java FileWriter 类 在本教程中,我们将借助示例学习Java FileWriter及其方法. java.io包的FileWriter类可用于将数据(以字符为单位)写入文件. 它继承了Ou ...

  4. Java文件字节流和字符流FileInputStream,FileOutputStream,FileReader,FileWriter

    一,文件输入流和文件输出流:FileInputStream,FileOutputStream FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用re ...

  5. 文件字符流(FileReader/FileWriter)

    文件字符流(FileReader/FileWriter)针对文件字符的操作,不同于文件字节流(FileInputStream/FileOutputStream).它是针对字符来进行操作的,因此他在处理 ...

  6. Java Reader/Writer

    Java Stream相关类是用来处理字节流的,但不适合用来字符流.因为一个字节是8bit,而一个字符是16bit.字符串是由字符组成,字符串类型天然处理的是字符而不是字节.更重要的是,字节流无法知道 ...

  7. java FileReader/FileWriter读写文件

    java FileReader/FileWriter读写字母和数字没问题,但读写汉字就乱码.记录下,后面找到解决方法再补上. public static void main(String[] args ...

  8. FileReader/FileWriter复制文件

    public class Test{ /*FileReader/FileWriter读写乱码,待处理*/ public static void main(String[] args) throws I ...

  9. Python CSV Reader/Writer

    Python CSV Reader/Writer 一. 基础背景: Python 天生支持读取CSV 格式数据并且是可配置的. 在 Python 里边有个模块 csv , 它包含了CSV 读取/生成所 ...

  10. 02_IO操作的基本规律(InputStream,OutputStream,Reader,Writer,FileReader,FileWriter,BufferedReader,BufferedWri

     模拟BufferedInputStream,编写一个类 package toto.IO; import java.io.IOException; import java.io.InputStre ...

最新文章

  1. 执行了的程序,才是你的程序.
  2. 创业第一站丨产品经理、海归转型成创业者有多难?
  3. python3数据类型:Dictionary(字典)
  4. opencv 读写XML YML
  5. 计划任务工具 cron 的配置和说明
  6. shell tr 替换 空格_Shell 字符串分隔符!!!(全网最详细总结)
  7. minio实现文件上传下载和删除功能
  8. js 操作Listbox js 获取Listbox选择的值的代码
  9. SpringCloud学习笔记020---MongoDb之json与bson的区别
  10. iOS实现简书的账号识别方式(正则表达式)
  11. 遇到NOD32更新时提示“用户名和密码无效”解决办法
  12. 火车票查询软件测试自学,火车票订购系统的测试报告.doc
  13. 苹果手表连接是什么原理_为什么苹果手表是最具潜力的苹果产品
  14. 《现代密码学》学习笔记——第七章 密钥管理[一]
  15. 华为刷原生android,教你如何体验(刷)原生安卓8.0
  16. jsp登录并实现邮箱激活功能
  17. 三年前,故事这样开始 三年后,故事这样延续---2015年终总结
  18. 国内半导体企业进军市场拉开序幕
  19. ToggleButton的学习与使用
  20. spring中依赖注入方式总结

热门文章

  1. 使用yum来下载RPM包而不进行安装
  2. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB
  3. 58、vi常见用法,tags(2)
  4. pytorch中数组维度的理解
  5. 深度学习 常用python操作(1)
  6. 完整版使用Shell脚本在多个服务器同时实现Mysql建表语句和删除表
  7. SpringBatch job执行流程分析(十六)
  8. 【资讯】CloudBase Framework工具推荐:前后端一体化部署,效能提升开源“神器”
  9. Go gin文件上传
  10. jenkins pipeline、用户权限管理、插件下载地址更改、凭证管理、自由风格项目构建、maven项目构建、常用的构建触发器、邮件发送、SonarQube代码审查