I/O流的基本概念
I/O流: 输入/输出流
数据流按流动的方向分为:输入流与输出流
数据流按字符和字节分为:字节流与字符流
读/写二进制数据称为字节流
读/写字符数据称为字符流
字符:abcdefl....1234234!@#%!^$&!%*@#$ 中国
字符流的父类是:Writer/Reader
// 文件结束的标记是:-1
使用示例FileReader:
/*
* 需求: 使用I/O流技术编写一个程序,该程序能够读取*.txt文件里的内容
* 读取字符的示例:使用的是字符流FileReader
*/
public class FileReaderTest {
public static void main(String[] args) throws IOException {
// 读取.txt文件里的数据,为什么我要选FileReader?
// 因为.txt文件里存放的都是"字符",所以选用字符流来读取,
// 而又因为是读操作,所以选用Reader下的子类:FileReader
FileReader reader = new FileReader("E:\\1.txt");
int value = 0;
while( (value = reader.read()) != -1 ) {
System.out.println((char)value);
}
reader.close();
}
}
/*
* 需求: 使用I/O流技术编写一个程序,该程序能够向*.txt文件写一串字符
*/
public class FileWriterTest {
public static void main(String[] args) throws IOException {
// 相当于建立一根水管
// 同时也相当于打开1.txt文件
FileWriter fw = new FileWriter("e:/1.txt");
// 把数据写到了内存上,此时还没写到硬盘上
// 具体来说,是写到了FileWriter这个对象的缓冲区里面。
fw.write(66);
// 调用flush方法,会刷新缓冲区里的内存到硬盘上去。
// 相当于点了“保存”按钮
// fw.flush();
// 关闭流对象
// close()方法内部会自动先调用flush()方法
fw.close();
// FileWriter fw = new FileWriter("e:\\1.txt");
}
}
/*
* 需求: 把D盘上的1.txt文件拷贝到E盘上
*/
public class CopyTest {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("D:\\1.txt");
FileWriter fw = new FileWriter("E:\\1.txt");
int i = 0;
while((i = fr.read()) != -1) {
// System.out.println((char)i);
fw.write(i);
}
fr.close();
fw.close();
}
}
为什么这些流需要缓冲区呢?
答:因为使用缓冲区可以加快速度。
BufferedReader/BufferedWriter
BufferedReader/BufferedWriter使用了设计模式里的“装饰设计模式”
public static void main(String[] args) throws IOException {
// FileReader reader = new FileReader("E:\\1.txt");
// int value = 0;
// while( (value = reader.read()) != -1 ) {
// System.out.print((char)value);
// }
// reader.close();
BufferedReader br = new BufferedReader(new FileReader("E:\\1.txt"));
// 强烈推荐使用readLine()方法,因为每次可以读取一行.
String line = "";
while((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\1.txt"));
bw.write("xxxxxx");
bw.close();
}
/*
刚才学的全都属于“字符流”的操作:
FileReader: 专门用来读文件的(输入流,字符流)
FileWrtier: 专门用来写文件的(输出流,字符流)
BufferedReader:可以用来读文件的(输入流,字符流),默认带缓冲区的,可以加快速度,而且有一个readLine()方法很好用!
BufferedWriter:可以用来写文件的(输入流,字符流),默认带缓冲区的,可以加快速度,而且有一个write(String str)方法很好用,一次可以写一串字符数据,很方便!
*/
字节输入流的父类:InputStream
字节输出流的父类:OutputStream
具体使用的时候,使用FileInputStream和FileOutputStream