9.12 字符输入流_Reader 类与 FileReader 类
- java.io.Reader: 字符输入流,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类。
- 共性的成员方法:
int read()
:读取单个字符并返回;int read(char[] cbuf)
:一次读取多个字符,将字符读入数组;void close()
:关闭该流并释放与之关联的所有资源。
- 共性的成员方法:
- java.io.FileReader extends InputStreamReader extends Reader
- FileReader: 文件字符输入流;
- 作用: 把硬盘文件中的数据以字符的方式读取到内存中。
- 构造方法:
FileReader(String fileName)
;FileReader(File file)
;- 参数: 读取文件的数据源
- String fileName: 文件的路径;
- File file: 一个文件。
- FileReader构造方法的作用:
- 1.创建一个FileReader对象;
- 2.会把FileReader对象指向要读取的文件。
- 字符输入流的使用步骤:
- 1.创建FileReader对象,构造方法中绑定要读取的数据源;
- 2.使用FileReader对象中的方法read读取文件;
- 3.释放资源。
- String类的构造方法
String(char[] value)
:把字符数组转换为字符串;String(char[] value, int offset, int count)
:把字符数组的一部分转换为字符串。- offset: 数组的开始索引;
- count: 转换的个数。
- 示例:
package com.xww.demo07;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class demoRea {
public static void main(String[] args) throws IOException {
//1.创建FileReader对象,构造方法中绑定要读取的数据源
// FileReader fr = new FileReader("code_employment_one\\day09_code\\.txt");
FileReader fr = new FileReader("D:\\项目_间接\\idea_间接\\code_employment_one\\3.txt");
// 2.使用FileReader对象中的方法read读取文件
//int read() 读取单个字符并返回。
// int len = 0;
// while ((len = fr.read())!=-1){
// System.out.println((char)len);
// }
//int read(char[] cbuf)一次读取多个字符,将字符读入数组。
char[] cs = new char[1024];//存储读取到的多个字符
int len2 = 0;//记录的是每次读取的有效字符个数
fr.read(cs);
while ((len2 = fr.read(cs))!=-1){
System.out.println(new String(cs,0,len2));
}
// 3.释放资源
fr.close();
}
}
9.13 字符输出流_Writer 类与 FileWriter 类
- java.io.Writer: 字符输出流,是所有字符输出流的最顶层的父类,是一个抽象类。
- 共性的成员方法:
void write(int c)
: 写入单个字符;- 虽然参数为int类型四个字节,但是只会保留一个字符的信息写出。
void write(char[] cbuf)
:写入字符数组;abstract void write(char[] cbuf, int off, int len)
:写入字符数组的某一部分- off :数组的开始索引;
- len :写的字符个数。
void write(String str)
:写入字符串;void write(String str, int off, int len)
:写入字符串的某一部分,- off :字符串的开始索引;
- len :写的字符个数。
void flush()
:刷新该流的缓冲;void close()
: 关闭此流,但要先刷新它。
- 共性的成员方法:
- java.io.FileWriter extends OutputStreamWriter extends Writer
- FileWriter: 文件字符输出流;
- 作用: 把内存中字符数据写入到文件中。
- 构造方法:
FileWriter(File file)
:根据给定的 File 对象构造一个 FileWriter 对象;FileWriter(String fileName)
:根据给定的文件名构造一个 FileWriter 对象。- 参数:写入数据的目的地
- String fileName: 文件的路径;
- File file: 是一个文件。
- 构造方法的作用:
- 1.会创建一个FileWriter对象;
- 2.会根据构造方法中传递的文件/文件的路径,创建文件;
- 3.会把FileWriter对象指向创建好的文件。
- 字符输出流的使用步骤(重点):
- 1.创建FileWriter对象,构造方法中绑定要写入数据的目的地;
- 2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程);
- 3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中;
- 4.释放资源(会先把内存缓冲区中的数据刷新到文件中)。
- 示例:
package com.xww.demo08;
import java.io.FileWriter;
import java.io.IOException;
public class demoW {
public static void main(String[] args) throws IOException {
//1.创建FileWriter对象,构造方法中绑定要写入数据的目的地
FileWriter fw = new FileWriter("D:\\项目_间接\\idea_间接\\code_employment_one\\3.txt");
//2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
//void write(int c) 写入单个字符。
fw.write("s");
fw.write(102);
//3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
//fw.flush();
//4.释放资源(会先把内存缓冲区中的数据刷新到文件中)
fw.close();//sf
}
}
9.14 flush方法和close方法的区别
- 区别:
- flush : 刷新缓冲区,流对象可以继续使用;
- close: 先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
- 示例:
package com.xww.demo08;
import java.io.FileWriter;
import java.io.IOException;
public class demoW {
public static void main(String[] args) throws IOException {
//1.创建FileWriter对象,构造方法中绑定要写入数据的目的地
FileWriter fw = new FileWriter("D:\\项目_间接\\idea_间接\\code_employment_one\\3.txt");
//2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
//void write(int c) 写入单个字符。
fw.write("s");
//3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
fw.flush();
//刷新之后流可以继续使用
fw.write(102);
//4.释放资源(会先把内存缓冲区中的数据刷新到文件中)
fw.close();//sf
//close方法之后流已经关闭了,已经从内存中消失了,流就不能再使用了
fw.write(103);
}
}
9.15 字符输出流写数据的其他方法
void write(char[] cbuf)
:写入字符数组;abstract void write(char[] cbuf, int off, int len)
:写入字符数组的某一部分- off :数组的开始索引;
- len :写的字符个数。
void write(String str)
:写入字符串;void write(String str, int off, int len)
:写入字符串的某一部分,- off :字符串的开始索引;
- len :写的字符个数。
- 示例:
public class Demo03Writer {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("09_IOAndProperties\\f.txt");
char[] cs = {'a','b','c','d','e'};
//void write(char[] cbuf)写入字符数组。
fw.write(cs);//abcde
//void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
fw.write(cs,1,3);//bcd
//void write(String str)写入字符串。
fw.write("传智播客");//传智播客
//void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
fw.write("黑马程序员",2,3);//程序员
fw.close();
}
9.16 字符输出流_续写与换行
- 续写,追加写:使用两个参数的构造方法
FileWriter(String fileName, boolean append)
FileWriter(File file, boolean append)
- 参数:
- String fileName,File file: 写入数据的目的地;
- boolean append : 续写开关 。
- true: 不会创建新的文件覆盖源文件,可以续写;
- false: 创建新的文件覆盖源文件。
- 换行:换行符号
- windows: \r\n
- linux: /n
- mac: /r
- 示例:
package com.xww.demo09;
import java.io.FileWriter;
import java.io.IOException;
public class demoH {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("D:\\项目_间接\\idea_间接\\code_employment_one\\4.txt",true);
for (int i = 0; i <10 ; i++) {
fw.write("HelloWorld"+i+"\r\n");
}
fw.close();
}
}