Java基础知识_day10_(IO流,FileWriter,FileReader,BufferedWriter,BufferedReader)
内容摘要:
- IO流概述及分类
- FileWriter类和FileReader类
- BufferedWriter和BufferedReader类
1. IO流概述及分类
概述:
IO流用于处理设备间的数据传输问题,读取文件及传输文件。
分类:
IO流的分类是针对于Java程序而言的。
输入流:Java程序读取数据;
输出流:Java程序写数据。
2. FileWriter(输出流)和FileReader(输入流)类
2.1 FileWriter类
2.1.1 构造方法
FileWriter(String FileName):传递一个文件名;
FileWriter(String FileName,boolean append): 传递一个文件名,并设置是否是追加写数据的方式,append为true时,追加方式,默认是false,此处说的追加指的是两次输出流调用同一个文件,同一个输出流中是可以实现追加写数据的.
2.1.2 输出流写数据步骤
创建对象(包含以下内容)
- 调用系统资源创建文件(如果文本不存在,不会重新创建文本;不能创建文件夹)
- 创建输出流对象
- 输出流指向文件
调用输出流对象的写数据方法
释放资源
2.1.3 转义字符及路径问题
\\代表单\,\t代表制表符,\r\n代表是回车键.
绝对路径:以盘符开始的完整路径(d:\a.txt);
相对路径:相对于当前项目而言,文件会创建在项目的根目录下(a.txt).
2.1.4 成员方法
void write(String str):写一个字符串
void write(String str,int index,int len):写字符串中部分数据
注意:其中的index不能索引越界,len也不能超过可以截取的字符串的长度.
void write(int ch):写一个字符数据,可以使用字符’A’,也可以是字符对应的ASCII值;
void wirte(char[] chs):写一个字符数组
void write(char[] chs,int index,int len):写一个字符数组的一部分
注意:其中的index不能索引越界,len也不能超过可以截取的字符串的长度.
close():
关闭输出流,先缓冲区的数据fluseh方法;
然后通知系统释放和该文件相关的系统资源;
流对象关闭后,不能再继续使用(不能再写数据到文件).
flush():刷新内存缓冲区,将要写入的字符串写入到文件;可以继续使用流对象写数据.
close和flush方式将数据写入文件的区别:
前者是关闭了流对象,后续无法再向文件中写数据;
后者只是将缓冲区中数据写到文件,还可以再向文件写数据,然后再执行此方法将数据写到文件.
2.1.5 常见问题
换行:不同操作系统平台下,换行符不同
windows: \r\n
linux: \n
mac: \r
数据追加写数据:
构造方法:FileWriter(String filename,boolean append):
传递一个文件名,并设置是否是追加写数据的方式,append为true时,追加方式,默认是false.
2.1.6 案例
package com.heimaIO; import java.io.FileWriter; import java.io.IOException; /* * FileWriter:向文件中写数据,输出流 * 成员方法: * void write(String str):写一个字符串 * void write(String str,int index,int len):写字符串中部分数据 * 注意:其中的index不能索引越界,len也不能超过可以截取的字符串的长度 * void write(int ch):写一个字符数据,可以使用字符'A',也可以是字符对应的ASCII值 * void wirte(char[] chs):写一个字符数组 * void write(char[] chs,int index,int len):写一个字符数组的一部分 * 注意:其中的index不能索引越界,len也不能超过可以截取的字符串的长度 */ public class FileWriterDemo2 { public static void main(String[] args) throws IOException{ // 创建对象 // 在当前项目的根目录下创建一个java.txt文件 FileWriter fw = new FileWriter("java.txt"); // 调用输出流的write方法写字符串 // void write(String str):写一个字符串 fw.write("Somnus"); // void write(String str,int index,int len):写字符串中部分数据 fw.write("Somnus", 3, 4); // 会报错:java.lang.StringIndexOutOfBoundsException // void write(int ch):写一个字符,可以使用字符'A',也可以是字符对应的ASCII值 // 下面两种写法的结果相同,都是把字符'A'写入文件 fw.write('A'); fw.write(97); // void wirte(char[] chs):写一个字符数组的一部分 char[] chs = {'s','o','m','n','u','s'}; fw.write(chs); // void write(char[] chs,int index,int len):写一个字符数组的一部分 fw.write(chs, 3, 4); // 会报错:java.lang.StringIndexOutOfBoundsException // 刷新缓冲区 fw.flush(); // 关闭系统资源 fw.close(); } } package com.heimaIO; import java.io.FileWriter; import java.io.IOException; /* * FileWriter:向文件中写数据,输出流 * 常见问题: * 换行:不同操作系统平台下,换行符不同 * windows: \r\n * linux: \n * mac: \r * 数据追加写数据: * 构造方法:FileWriter(String filename,boolean append): * 传递一个文件名,并设置是否是追加写数据的方式,append为true时,追加方式,默认是false */ public class FileWriterDemo3 { public static void main(String[] args) throws IOException{ // 创建对象 FileWriter fw = new FileWriter("java.txt"); // 换行 fw.write("somnus"); fw.write("\r\n"); // 输出换行 fw.write("hello"); // 构造方法:FileWriter(String filename,boolean append)实现追加写数据 // 创建对象 FileWriter fw1 = new FileWriter("java.txt", true); fw1.write("hello"); fw1.write("somnus"); // 刷新缓冲区 fw.flush 3ff7 (); fw1.flush(); // 关闭系统资源 fw.close(); fw1.close(); } }
2.2 FileReader类
2.2.1 构造方法
FileReader(String filename): filename不能为空并且必须是已经存在的文件名,否则会报异常.
2.2.2 输入流写数据步骤
创建输入流对象;
调用输入流的读数据方法;
释放资源.
2.2.3 成员方法
int read():一次读取一个字符,读完当前字符后,下次就读取下一个字符,没有数据时返回-1, 读取字符时需要将结果强制类型转换为char类型,否则显示的是字符对应的值;
int read(char[] chs):一次读取一个字符数组,读完当前字符后,下次就读取下一个字符,没有数据时返回-1, 返回的是每次实际读取的字符的个数.
2.2.4 案例
public class FileReaderDemo3 { public static void main(String[] args) throws IOException { // 创建输入流对象 FileReader fr = new FileReader("java.java"); // 创建输出流对象 FileWriter fw = new FileWriter("java1.java"); char[] chs = new char[1024]; // 数组的长度一般是1024及其整数倍 int len = 0; // 每次实际读取的字符的个数 // 读取数据,当数据读取完毕,会返回-1 /*while((len = fr.read(chs)) != -1) { // 每次读取几个字符,就从字符数组中取出几个字符 System.out.println(new String(chs,0,len)); }*/ // 赋值文本 while((len = fr.read(chs)) != -1) { // 赋值文本,将本次实际读取的字符个数,复制到文本文件 fw.write(chs, 0, len); } // 刷新缓冲区,将数据写入到文件,可以不写此方法, // 后面的close方法释放系统资源时会将缓冲区中数据写入到文件 // fw.flush(); // 释放资源 fw.close(); fr.close(); } }
3. BufferedWriter(输出缓冲流)和BufferedReader(输入缓冲流)类
3.1 BufferedWriter类
3.1.1 概述
输出缓冲流:是在FileWriter类的基础上加强功能,因此创建本类的对象需要FileWriter的实例对象作为参数;
BufferedWriter具有FileWriter的成员方法;
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入.
3.1.2 构造方法
public BufferedWriter(Writer w): 创建一个使用默认大小输出缓冲区的缓冲字符输出流.
使用: BufferedWriter bw = new BufferedWriter(new FileWriter(“文件名”));
void newLine():写一个换行符,由系统决定是哪个换行符.
3.2 BufferedReader类
3.2.1 概述
输入缓冲流:是在FileReader类的基础上加强功能,因此创建本类的对象需要FileReader的实例对象作为参数;
BufferedReader具有FileReader的成员方法;
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取.
3.2.2 构造方法
public BufferedReader(Reader in):创建一个使用默认大小输入缓冲区的缓冲字符输入流.
使用: BufferedReader br = new BufferedReader(new FileReader(“文件名”));
String readLine():一次读一行数据,但是不读取换行符,没有数据时返回null值.
3.3 BufferedWriter与BufferedReader类案例
public class BufferedStreamDemo { public static void main(String[] args) throws IOException { // 创建输出缓冲流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("java2.java")); // 创建输入缓冲流对象 BufferedReader br = new BufferedReader(new FileReader("java1.java")); // 赋值文本 /*int ch; while((ch=br.read())!=-1) { // 将文本写入文件 bw.write(ch); }*/ // 赋值文本 String line; // 每次读取一行数据 while((line=br.readLine()) != null) { // 每次写一个字符串 bw.write(line); // 写完一行要写一个换行 bw.newLine(); // 刷新数据到文件 bw.flush(); } // 释放资源 bw.close(); br.close(); } }
转载于:https://my.oschina.net/u/3481752/blog/898650
- Java基础知识_day10_(IO流,FileWriter,FileReader,BufferedWriter,BufferedReader)
- Java基础 - IO流之字符流,FileReader,FileWriter,BufferedReader,BufferedWriter,装饰设计模式,编码表
- Java基础知识强化之IO流笔记38:字符流缓冲流之BufferedWriter / BufferedReader使用
- 黑马程序员_java_IO流_FileWriter_FileReader_BufferedWriter_BufferedReader_IO异常
- 黑马程序员---2015.6.24java基础笔记--FileWriter- FileReader-BufferedWriter-BufferedReader
- java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr
- 9.Java基础:常见IO流----->字符流中的缓冲流:BufferedReader 、BufferedWriter
- Java基础知识强化之IO流笔记37:FileReader/FileWriter(转换流的子类)复制文本文件案例
- Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别
- JavaSE--IO流(FileWriter,FileReader,BufferedWriter,BufferedReader)的用法介绍
- java基础之IO流中的FileReader和FileWriter的认识和实现
- IO流---字符流(FileWriter, FileReader ,BufferedWriter,BufferedReader)
- Java基础之IO流中使用FileWriter和FileReader实现拷贝文件
- Java基础知识强化之IO流笔记53:IO流练习之 自定义类模拟BufferedReader的readLine()功能案例
- 黑马程序员——JAVA基础之IO流FileReader,FileWriter
- java学习10--InputStreamReader,OutputStreamWriter,FileReader,FileWriter,BufferedReader,BufferedWriter
- Java基础-IO流2 FileWriter和FileReader
- Java基础知识IO流(BufferedWriter&BufferedReader)
- java基础知识回顾之javaIO类---BufferedReader和BufferedWriter
- IO流 缓冲流 FileInputStream、BufferedInputStream、BufferedReader、 BufferedWriter、FileReader、FileWriter