一.使用字节输入流读取含有中文的文件
package com.itheima.demo01Reader;
import java.io.FileInputStream;
import java.io.IOException;
/*
使用字节输入流读取含有中文的文件
IDEA中默认的使用的编码表是UTF-8编码表:在UTF-8编码中一个中文占用3个字节
*/
public class Demo01FileInputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("day11\\1.txt");
int len = 0;
while ((len=fis.read())!=-1){
//出现了乱码:每次读取一个字节,是中文1/3,把1/3个中文查询编码表转换为字符,找不到,就出现了乱码
System.out.print((char)len);//ä½ å¥½a
}
fis.close();
}
}
二.字符输入流介绍
三.使用字符输入流读取文件的步骤(重点)
package com.itheima.demo01Reader;
import java.io.FileReader;
import java.io.IOException;
/*
使用字符输入流读取文件的步骤(重点)
1.创建FileReader对象,构造方法中绑定要读取的数据源(文件,文件路径)
2.使用FileReader对象中的方法read,以字符的方式读取文件
3.释放资源(关闭该流并释放与之关联的所有资源)
-----------------------------------------------------
String类的构造方法:
String(char[] value) 把字符数组转换为字符串
String(char[] value, int offset, int count) 把字符数组的一部分转换为字符串
int offset:开始索引
int count:转换个数
*/
public class Demo02FileReader {
public static void main(String[] args) throws IOException {
//1.创建FileReader对象,构造方法中绑定要读取的数据源(文件,文件路径)
FileReader fr = new FileReader("day11\\1.txt");
//2.使用FileReader对象中的方法read,以字符的方式读取文件
//int read() 读取单个字符并返回
/*int len = 0;//每次读取到字符
while ((len=fr.read())!=-1){
System.out.print((char)len);//你好a
}*/
//int read(char[] cbuf)一次读取多个字符
char[] chars = new char[1024];
int len = 0;//每次读取字符的有效个数
while ((len=fr.read(chars))!=-1){
System.out.println(new String(chars,0,len));//你好a
}
//3.释放资源(关闭该流并释放与之关联的所有资源)
fr.close();
}
}
四.字符输出流介绍
五.使用字符输出流基本步骤(重点)
package com.itheima.demo02Writer;
import java.io.FileWriter;
import java.io.IOException;
/*
使用字符输出流基本步骤(重点)
1.创建FileWriter对象,构造方法中绑定要写入的目的地(文件,文件路径)
2.使用FileWriter对象中的方法write,把数据以字符的方式写入到[内存缓冲区中]
3.使用FileWriter对象中的方法flush,把内存缓冲区中的数据刷新到文件中
4.释放资源(会自动调用flush方法刷新数据)
*/
public class Demo01FileWriter {
public static void main(String[] args) throws IOException {
//1.创建FileWriter对象,构造方法中绑定要写入的目的地(文件,文件路径)
FileWriter fw = new FileWriter("day11\\2.txt");
//2.使用FileWriter对象中的方法write,把数据以字符的方式写入到[内存缓冲区中]
//void write(int c)写入单个字符。
fw.write(97);
//3.使用FileWriter对象中的方法flush,把内存缓冲区中的数据刷新到文件中
fw.flush();
//4.释放资源(会自动调用flush方法刷新数据)
fw.close();
}
}
字节流和字符流的小区别
六.关闭和刷新的区别(面试)
package com.itheima.demo02Writer;
import java.io.FileWriter;
import java.io.IOException;
/*
关闭和刷新的区别(面试)
- flush:把内存缓冲区中的数据刷新到文件中,刷新完之后,流对象可以继续使用
- close:释放资源,在释放资源之前,把内存缓冲区中的数据刷新到文件中
刷新完之后,流对象就已经关闭了,就不能在使用了
问题:
3.txt文件中有什么? 大家好
*/
public class Demo02flushAndclose {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("day11\\3.txt");
fw.write('大');
fw.flush();
fw.write('家');
fw.flush();
fw.write('好');
fw.close();
//fw.write('!');//IOException: Stream closed 流已经关闭了,就不能在使用了
}
}
七.字符输出流写数据的其他方法(重点)
package com.itheima.demo02Writer;
import java.io.FileWriter;
import java.io.IOException;
/*
字符输出流写数据的其他方法(重点)
public void write(int c) :写出一个字符。
public void write(char[] cbuf) :写字符数组中的所有字符
public abstract void write(char[] b, int off, int len) :写字符数组中的一部分字符 off:开始索引 len:写的个数
public void write(String str) :写出一个字符串
public void write(String str, int off, int len) 写入字符串的一部分off:开始索引 len:写的个数
*/
public class Demo03FileWriter {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("day11\\4.txt");
//public void write(int c) :写出一个字符。
fw.write('a');//a
//public void write(char[] cbuf) :写字符数组中的所有字符
char[] chars = {'你','好','@','$','1','2','A','B'};
fw.write(chars);//你好@$12AB
//public abstract void write(char[] b, int off, int len) :写字符数组中的一部分字符 off:开始索引 len:写的个数
//需求:写入字符数组中'1'和'2'这两个字符
fw.write(chars,4,2);//12
//public void write(String str) :写出一个字符串
fw.write("你若安好,便是晴天!");//你若安好,便是晴天!
//public void write(String str, int off, int len) 写入字符串的一部分off:开始索引 len:写的个数
//需求:写入字符中的"安好"
fw.write("你若,便是晴天!",2,2);//安好
fw.close();
}
}
八.字符输出流的续写和换行(重点)
package com.itheima.demo02Writer;
import java.io.FileWriter;
import java.io.IOException;
/*
和字节流一模一样
续写:使用两个参数的构造方法
FileWriter(File file, boolean append)
FileWriter(String fileName, boolean append)
参数:
File file,String fileName:写的目的地
boolean append:续写开关 true:可以续写 false:不可以
换行:使用换行符号 \r\n(windows)
*/
public class Demo04FileWriter {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("day11\\5.txt",true);
for (int i = 1; i <=3 ; i++) {
fw.write("你好"+i+"\r\n");
}
fw.close();
}
}