字符流
1.字符输入输出流
字符输出流
- java程序输出数据到文件
创建输出流文件
- 绝对路径:(d://test_1.txt)
- 相对路径:(test_1.txt) 相对于存放在编译文件目录;
- new FileWrite(filename);
public static void main(String[] args) throws IOExpection {
FileWriter fw = new FileWriter(d://java_1/test_1.txt);
}
- new FileWrite(filename;boole append):
append默认false,默认不可以持续添加;
输出信息
- void write(String str);
- void write(String str,int index,int len);
- void write(int ch);
- int ch --> char(int类型输出为char类型)
- void write(char[] chs);
- void write(char[] chs,int index,int len);
fw.write("IO流")
//系统基本单位:字节,写入时只存放在系统缓冲区;
刷新缓存区
fw.flush();
//刷新缓冲区,将信息写入文件,刷新后可再调用流文件;
释放资源
fw.close();
//先刷新缓冲区,后通知系统释放调用所有相关资源,释放后,流对象无法再调用;
- 换行
- /n --> java换行
- /r/n --> window换行
- /r --> mac换行
字符输入流
- 序从文件读取数据,输入到java程序
创建输入流文件
public static void main(String[] args) throws IOExpection {
FileReader fr = new FileReader("d://fr_1.txt");
}
读取信息
1. 一次读取一个字符
- int read();
- int i = fr.read();
- System.out.print(i)–> 输出int:I值(需要强制转化);
int ch = fr.read();
//创建接收字符ch;
System.out.print(ch);
//输出为int类型;
System.out.print((char)ch);
//将int类型强转为char类型;
遍历输入流文件
- 当文件为空时,输出-1;
while (ch = fr.read() != -1) {
System.out.print((char)ch);
}
2. 一次读取一个字符数组
- int read(char[] ch);
- System.out.print(fw.read(ch)) --> 输出读取ch数组的长度;
char[] ch = new char[1024];
int len = fr.read(ch);
//ch数组的读取长度
System.out.print(new String(ch,0,len);
//为什么不用System.out.print(ch) -->无法控制输出长度,以免输出不必要的元素;
复制文件
- 但字符,或字符数组为空时,返回值为-1,停止输出文件;
- 字符
FileWriter fw = new FileWriter("IOTest.txt");
FileReader fr = new FileReader("IOwrite_1.java");
int ch;
while(( ch = fr.read()) != -1) {
fw.write(ch);
//不用强转char类型,write会进行强转,read输出时就需要强转;
}
fw.close();
fr.close();
- 字符数组
FileWriter fw = new FileWriter("iotest.txt");
FileReader fr = new FileReader("IOTest.java");
char[] ch = new char[1024];
int len;
while ((len = fr.read(ch)) != -1) {
fw.write(new String(ch,0,len));
}
fr.close();
fw.close();
2. 字符缓存输入输出流
- 更高效的输入输出流;
- 包装流;
字符缓存输出流
- 创建字符缓存流输出对象
- 构造函数:BufferedWriter bw = new BufferedWriter(Writer);
- Writer w = new FileWriter(“test.txt”);//向上转型;
BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"));
- 输出换行符
void nextLine();
for(int x = 0; x < 3; x++) {
bw.write("hello" + x);
bw.nextLine();
//输出到文档结果:
hello0
hello1
hello2
}
字符缓存输入流
- 创建字符缓存流输入对象
BufferedReader br = new BufferedReader(new FileReader("test.java"));
- 输入字符串
String readLine();
String str = br.readLine();
System.out.print(str);
遍历输入
- 当字符串为空,null,结束读取
while ((str = br.read()) != null) {
System.out.print(str);
}
复制文件
- 字符和字符数组同输入输出流;
- readLine()和nextLine();
- 当输入文件流对象读取到字符串为null时,停止读取;
BufferedReader br = new BufferedReader(new FileReader("IOTest.java"));
BufferedWriter bw = new BufferedWriter(new FileWriter("bw_1.txt"));
String str;
while((str = br.readLine()) != null) {
//当输入文件流对象读取到字符串为null时,停止读取;
bw.write(str);
bw.newLine();
bw.flush();
}
br.close();
bw.close();