字符流读写文件

字符流读数据—按单个字符读取

创建字符流读文件对象:

​ Reader reader = new FileReader(“readme.txt”);

调用方法读取数据:

​ int data = reader.read();

只读取一个字符,返回该字符代表的整数(ASCII码),若到达流的末尾,返回-1;

异常处理(两种异常处理方式都可用):

throws IOException

关闭资源:

reader.close();

需要自己另外创建相关的文件夹即文件

package io.demo;import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class ReaderDemo1 {
//    FileNotFoundException是属于IOException的子类,所以FileNotFoundException可以不写public static void main(String[] args) throws IOException {
//        通过字符流读取数据
//        1.创建字符输入流对象Reader reader = new FileReader("lib/1.txt");            //会报错,所以在main函数后面加上throws FileNotFoundException;lib文件夹下的1.txt文件
//        2.读取数据
//        int read = reader.read();           //第一次读取a,97
//        System.out.println("read:"+read);
//        int read1 = reader.read();          //第二次读取b,98
//        System.out.println("read:"+read1);
//        int read2 = reader.read();            //第三次读取C,99
//        System.out.println("read:"+read2);
//        int read3 = reader.read();          //第四次读取d,以此类推,100
//        System.out.println("read:"+read3);
//        int read4 = reader.read();
//        System.out.println("read:"+read4);      //已经到达流的末尾,所以返回-1/*优化上述的代码:用循环改进又因为不知道循环的次数,所以用while循环*/int ch;             //定义变量,用来接收读取到的字符
/*        (ch = reader.read()) != -1:做了三件事1.执行reader.read(),取文件中读取一个字符;2.执行ch = reader.read(),将读取到的字符赋值给变量ch3.最后执行(ch = reader.read()) != -1,用读取到的字符(内容)和-1进行比较*/while ((ch = reader.read()) != -1) {
//            ch = reader.read();System.out.println("read:"+ch);}
//        3.释放资源reader.close();     //报错,在main函数加上IOException}
}

字符流读数据—按字符数组读取

创建字符流读文件对象:

​ Reader reader = new FileReader(“readme.txt”);

调用方法读取数据:

​ char[] chs = new char[4];

​ int len = reader.read(chs);

一次读一个字符数组,将读取到的内容存到数组中,并返回读取到的有效字符数,若读不到返回-1

异常处理:

throws IOException

关闭资源:

reader.close();

package io.demo;import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class ReaderDemo2 {public static void main(String[] args) throws IOException {
//        需求:通过字符流读取数据,一次读取一个字符数组
//        1.创建字符输入流对象Reader reader = new FileReader("lib/1.txt");        //abcdefg
//        2.读取数据
//        char[] chs = new char[3];       //读取长度为4的字符,字符数组会拼接成字符串
//        int len = reader.read(chs);
//        System.out.println(chs);        //abc
//        System.out.println(len);        //3
//
//        int len2 = reader.read(chs);
//        System.out.println(chs);        //def:覆盖了abc
//        System.out.println(len2);           //3
//
//        int len3 = reader.read(chs);
//        System.out.println(chs);        //gef:只有g覆盖了d,没有其余的有效字符覆盖另外两个字符
//        System.out.println(len3);           //1,只有g是有效的
//
//        int len4 = reader.read(chs);
//        System.out.println(chs);        //gef:没有新的有效字符可以覆盖
//        System.out.println(len4);       //-1:因为没有读取到有效的字符,就返回-1//        简化做法:用while循环改进
//        定义字符数组char[] ch = new char[3];        //ch存的是具体的字符数组
//        定义一个变量,记录读取到的有效字符数int len;        //有效字符数while ((len = reader.read(ch) )!= -1) {
//            将读取到的内容,转成字符串,然后打印/*ch:表示要操作的数组0:表示起始的索引len:表示要操作的字符的个数*/String s = new String(ch,0,len);        //数组:[g,e,f],起始位置为0,个数len为1,则输出gSystem.out.println(s);}
//        3.释放数据reader.close();}
}

字符流写数据—按单个字符写入

创建字符流写文件对象:

​ Writer writer = new FileWriter(“1.txt”);

调用方法写入数据:

​ int x = “我”;

​ writer.write(x);

写入一个数据

异常处理

throws IOException

关闭资源:

​ writer.close();

字符流写数据—按字符数组写入

创建字符流写文件对象:

​ Writer writer = new FileWriter(“1.txt”);

调用方法写入数据:

​ char[] chs = {‘我’,‘爱’,‘学’,‘习’} ;

异常处理

throws IOException

关闭资源:

​ writer.close();

字符流写数据—按字符串写入

创建字符流写文件对象:

​ Writer writer = new FileWriter(“1.txt”);

调用方法写入数据:

​ writer.write(“我爱学习”);

写一个字符串

异常处理

throws IOException

关闭资源:

​ writer.close();

package io.demo;import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;/*字符流写数据Writer类中的方法void write(int ch);     一次写一个字符void write(char[] ch,int index,int len);        一次写一个指定的字符数组void write(String);         一次写一个字符串*/
public class WriterDemo {public static void main(String[] args) throws IOException {
//需求:通过字符流,写数据
//        1.创建一个字符输出流对象Writer writer = new FileWriter("lib/1.txt");
//        2.写数据
//        一次写入一个字符
//        writer.write('好');          //在1.txt中就会写入好
//一次写一个指定的字符数组
//        char[] ch = {'我','爱','学','习'};          //字符数组,记得用单引号
//        writer.write(ch);
//        writer.write(ch,2,2);       //从ch字符数组的索引位置为2(索引是从0开始的),长度为2的地方写入数据:学习
//
//一次写入一个字符串writer.write("钟云耀同学要好好学习,天天向上");
//        3.释放资源writer.close();}
}

字符流拷贝文件—按单个字符读写

拷贝文件:Reader和Writer合作完成

创建字符流读文件对象

​ Reader reader = new FileReader(“readme.txt”);

创建字符流写文件对象

​ Writer writer = new FileWriter(“1.txt”);

调用方法读取数据:

​ int data = reader.read();

调用方法写入数据:

​ writer.write(data);

异常处理:

​ throws IOException

关闭资源:

​ reader.close();

​ writer.close();

IO流拷贝文件核心6步:1.创建字符输入流对象,关联数据源文件2.创建字符输出流随心,关联目的地文件3.定义变量,记录读取到的内容4.循环读取,只要条件满足就一直读取,并将读取到的内容赋值给变量5.将读取到的数据写入到目的地文件中6.释放资源
package io.demo;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class CopyFile {public static void main(String[] args) throws IOException {
//        需求:通过字符流拷贝文件,一次读写一个文件
//        例如:将1.txt文件中的内容复制到2.txt文件中/*注释就是思路,思路就是注释IO流拷贝文件核心6步:1.创建字符输入流对象,关联数据源文件2.创建字符输出流随心,关联目的地文件3.定义变量,记录读取到的内容4.循环读取,只要条件满足就一直读取,并将读取到的内容赋值给变量5.将读取到的数据写入到目的地文件中6.释放资源*/
//        1.创建字符输入流对象,关联数据源文件
//        2.创建字符输出流随心,关联目的地文件
//       优化
//       Reader reader = new FileReader("lib/1.txt");
//       Writer writer = new FileWriter("lib/2.txt");FileReader fr = new FileReader("lib/1.txt");FileWriter fw = new FileWriter("lib/2.txt");
//        如果目的地文件不存在,程序会自动创建
//        3.定义变量int len;
//        4.循环读取while ((len = fr.read()) != -1) {
//            5.fw.write(len);}
//        6.释放资源fr.close();fw.close();}
}

字符流拷贝文件—按字符数组读写

创建字符流读文件对象

​ Reader reader = new FileReader(“readme.txt”);

创建字符流写文件对象

​ Writer writer = new FileWriter(“1.txt”);

调用方法读取数据:

​ char[] ch = new char[4];

​ int len = reader.read(ch);

调用方法写入数据:

​ writer.wtite(ch,0,len);

异常处理:

​ throws IOException

关闭资源:

​ reader.close();

​ writer.close();

package io.demo;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class CopyFile2 {public static void main(String[] args) throws IOException {
//        需求:通过字符流拷贝文件,一次读写一个文件
//        例如:将1.txt文件中的内容复制到2.txt文件中/*IO流拷贝文件核心6步:1.创建字符输入流对象,关联数据源文件2.创建字符输出流随心,关联目的地文件3.定义变量,记录读取到的有效字符数内4.通过循环读取,只要条件满足就一直读取,并将读取到的内容赋值给变量5.将读取到的数据写入到目的地文件中6.释放资源*/
//        1.FileReader reader =new FileReader("lib/1.txt");
//        2.FileWriter writer = new FileWriter("lib/2.txt");
//        3.
//        定义一个字符数组char[] ch = new char[1024];     //最好的1024的整数倍
//        用来记录读取到的有效字符数int len;
//        4.while ((len = reader.read(ch)) != -1) {
//            5.writer.write(ch,0,len);}
//        6.reader.close();writer.close();}
}

字符缓冲流

BufferedReader:字符缓冲输入流(高效字符输入流)

构造方法:

​ public BufferedReader(Reader reader);

成员方法:

​ public String readLine();

一次读取一行数据并返回读取的到的数据内容,读不到则返回null

BufferedWriter:字符缓冲输出流(高效字符输出流)

构造方法:

​ public BufferedWriter(Writer writer);

成员方法:

​ public void newLine();

根据当前操作系统给出对应的换行符。

windows操作系统:\r\n;
mac操作系统:\r;
unix操作系统:\n

**特点:**字符缓冲流自带有缓冲区,大小为8192个字符,就是16kb

字符缓冲流拷贝文件的标准代码

创建字符流读文件对象:

​ BufferedReader br = new BufferedReader(new FileReader(“1.txt”));

创建字符流写文件对象:

​ BufferedWriter bw = new BufferedWriter(new FileWriter(“2.txt”));

异常处理:

​ throws IOException

使用while循环读写数据:

​ int len;

​ while ((len = br.read()) != -1) {

​ bw.write(len);

​ }

关闭资源:

​ br.close();

​ bw.close();

package io.demo;import java.io.*;public class BufferedDemo {public static void main(String[] args) throws IOException {
//        需求:通过字符缓冲流,将1.txt文件中的内容拷贝到2.txt文件中
//        1.创建缓冲输入流对象,关联数据源文件
//        1.1创建普通的字符输入流对象FileReader fr = new FileReader("lib/1.txt");
//        1.2创建缓冲输入流对象BufferedReader bfr = new BufferedReader(fr);
//        简化1.1和1.2的代码
//        BufferedReader br = new BufferedReader(new FileReader("lib/1.txt"));
//        2.创建缓冲输出流对象,关联目的地文件
//        2.1创建字符输出流对象FileWriter fw = new FileWriter("lib/2.txt");
//        2.2BufferedWriter bfw = new BufferedWriter(fw);
//        BufferedWriter bw = new BufferedWriter(new FileWriter("lib/2.txt"));
//        3.定义变量,记录读取到的数据int len;
//        4.循环读取,只要条件满足就一直读取,并将读取到的数据赋值给变量while ((len = bfr.read()) != -1) {      //底层是按照字符数组读写的,而不是一个一个字符读写的bfw.write(len);}
//        5.将读取到的数据写入到目的地文件中
//        6.释放资源bfr.close();bfw.close();}
}
package io.demo;import java.io.*;
//注意:字符流只能拷贝纯文本文件,
public class BufferedDemo2 {public static void main(String[] args) throws IOException {
//        需求:通过字符缓冲流一次读写一行的方式,将1.txt文件中的内容拷贝到2.txt文件中
//        1.创建字符缓冲流输入对象
//        分开写
//        FileReader reader = new FileReader("lib/1.txt");
//        BufferedReader br = new BufferedReader(reader);
//        合并BufferedReader br = new BufferedReader(new FileReader("lib/1.txt"));
//        2.创建字符缓冲输出流对象
//        FileWriter writer = new FileWriter("lib/2.txt");
//        BufferedWriter bw = new BufferedWriter(writer);BufferedWriter bw = new BufferedWriter(new FileWriter("lib/2.txt"));
//        3.定义变量,记录读取到的数据内容String s;
//        4.循环读取,并将读取到的数据内容赋值给变量while ((s = br.readLine()) != null) {        //读不到数据,则返回null
//        5.将读取到的数据写入目的地文件中bw.write(s);
//            注意一个容易忽略的小细节:不要忘记换行;
//            windows操作系统:\r\n;
//            mac操作系统:\r;
//            unix操作系统:\nbw.newLine();}//        6.释放资源br.close();bw.close();}
}

Java学习第十六天——字符流读写文件、字符缓冲流拷贝文件相关推荐

  1. Java学习 第十六天(泛型)

    Java学习 第十六天---泛型与集合 第一章 泛型 1.1 泛型概述 1.2 泛型类 1.3 泛型类练习---抽奖问题 1.4 泛型类的子类 1.5 泛型接口 1.6 重写泛型父类或泛型接口中方法的 ...

  2. Java学习第二十六天

    目录 成员方法 一.方法快速入门 二.方法的调用机制原理(重要) 三.方法的优点 四.成员方法的定义 五.注意事项和使用细节 第一部分:访问修饰符 第二部分:返回数据类型的细节 三.形参列表 四.方法 ...

  3. Java学习系列(十)Java面向对象之I/O流(上)

    IO流 我们知道应用程序运行时数据是保存在内存中的,但由于内存中的数据不可持久保存(如断电或程序退出时数据会丢失),因此需要一种手段将数据写入硬盘或读入内存.面向IO流编程就是一种很好的选择.IO:I ...

  4. Java学习系列(十六)Java面向对象之基于TCP协议的网络通信

    TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...

  5. java学习记录十五:集合二Collections、Set、Map

    java学习记录十五:集合二 一.Collections工具类 一.解释 二.常用方法 1.打乱集合顺序 2.按照默认规则排序 3.按指定规则排序 4.批量添加元素 二.可变参数 一.解释 二.写法 ...

  6. 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流

    Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...

  7. Java学习 第十五天

    Java学习 第十五天 第一章 StringBuilder类 1.1 字符串的不可变 1.2 StringBuilder概述 1.3 构造方法 1.4 两个常用方法 1.4.1 append方法 1. ...

  8. Java学习系列(十八)Java面向对象之基于UDP协议的网络通信

    UDP协议:无需建立虚拟链路,协议是不可靠的. A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达:但有些情况下,数据报可能会丢失 ...

  9. 游戏策划学习第二十六天

    游戏策划学习第二十六天 5/26 看书笔记: 使命感的重要性: 维基百科的维护工作,一则不当的内容在维基百科会在平均1.7秒内被志愿者人工审核去除.表层上讲,这是因为他们有责任心,但是从他们的动机角度 ...

最新文章

  1. Oracle的时区问题
  2. 网络部署加实验步骤( 续)
  3. Android——本地服务基础(一)
  4. dotnet core TargetFramework 解析顺序探索
  5. 科研|青椒工作九年后感慨:比SCI重要,比项目值钱的是…
  6. 现男友代言!最强自拍手机荣耀20S正式发布:售价1899元起
  7. 【kafka】Kafka 之 Group 状态变化分析及 Rebalance 过程
  8. 准备一些万圣节的乐趣——UI设计素材模板
  9. pillow模块 (PIL) 生成验证码
  10. Mac电脑:调整 VMware中Windows10 屏幕分辨率(解决win10与Mac界面切换后,分辨率改变问题)
  11. MongoDB笔记十四——启动配置详细讲解
  12. 易筋SpringBoot 2.1 | 第十六篇:SpringBoot通过JDBC访问数据库
  13. android studio for android learning (二十七) UI控件动态加载机制浅析
  14. 海洋技术课设遥感反演matlab,国家重点研发计划项目“新型海洋微波遥感探测机理模型与应用研究” 课题一“微波极化遥感机理与应用技术”学术研讨会顺利召开...
  15. 2018/7/9日~年中总结
  16. akka typed mysql_akka-typed(8) - CQRS读写分离模式
  17. c语言编程出彩色告白,C语言告白代码,一闪一闪亮晶晶~
  18. labelImg安装所遇到的那些坑
  19. Android USB OTG功能如何打开及实现
  20. 【 C++ 技术】 C++ 高性能服务器网络框架设计细节

热门文章

  1. Typora学习笔记
  2. 【Nacos】快速认识和简单使用nacos
  3. 物品租赁买卖业务平台HTML5模板源码下载
  4. c语言试题浏览器选择,让我自我反省的一套笔试题
  5. 微信小程序 Hi衣橱 衣橱管理小程序
  6. 视听融合综述(一)Audiovisual Fusion: Challenges and New Approaches
  7. java中实现多态的机制是什么_java多态机制是什么
  8. MySQL-01-基础知识
  9. 现在叠一条毛巾要15分钟,但未来机器人必然包家务
  10. [ts]document.getelementbyid object is possibly ‘null‘