1:IO流(掌握)
(1)IO流的分类:(理解)
A:流向不同
输入流
输出流
B:操作数据不同
字节流
字符流(就是文件数据用记事本打开并能够读懂的数据就用字符流)
(2)IO流的体系结构(掌握)
IO流
|--字节流(自学一下字节流,实现复制一张图片)
|--输入流(读取数据)
|--InputStream
|--FileInputStream(基本流)
|--BufferedInputStream(高效流) 就是高效的作用,没有特殊方法
|--输出流(写入数据)
|--OutputStream
|--FileOutputStream(基本流)
|--BufferedOutputStream(高效流) 就是高效的作用,没有特殊方法
|--字符流
|--输入流(读取数据)
|--Reader
|--FileReader(基本流)
|--BufferedReader(高效流)
|--输出流(写入数据)
|--Writer
|--FileWriter(基本流)
|--BufferedWriter(高效流)
(3)基本字符流写入数据(掌握)
FileWriter:
步骤:
创建字符输出流对象
写入数据
write(String str)
write(int ch)
write(char[] chs,int index,int len)
释放资源
代码体现:
FileWriter fw = new FileWriter("fw.txt");
fw.write("hello,io,我来了");
fw.flush();
fw.close();
问题?
创建字符输出流对象做了几件事情?
做3件事,1,创建一个字符流对象,2调用系统功能创建一个文件,3将字符流对象指向这个文件.
为什么需要刷新缓冲区?
由于我们存的是字符数据,它不能直接写入文件,它被写入到缓冲区中.
既然close()和flush()都可以刷新缓冲区,那么,他们的区别是什么?
区别是,close()刷新后会关闭资源,flush()只能刷新缓冲区.
如果实现数据的换行?
1,BufferedWriter中的newLine()方法.
如何实现数据的追加?
public FileWriter(File file,boolean append)
(4)基本字符流读取数据(掌握)
FileReader:
步骤:
创建字符输入流对象
读取数据
int read()
int read(char[] chs)
释放资源
代码体现:
FileReader fr = new FileReader("fw.txt");
//方式1
int ch = 0;
while((ch=fr.read())!=-1)
{
System.out.print((char)ch);
}
//方式2
char[] chs = new char[1024];
int len = 0;
while((len=fr.read(chs))!=-1)
{
System.out.print(String.valueOf(chs,0,len));
}
fr.close();
(5)复制文本文件(掌握)
不管是用哪种方式实现,请大家记住分析出数据源和目的地:
数据源:
a.txt -- Reader -- FileReader
目的地:
b.txt -- Writer -- FileWriter
代码体现:
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
//方式1,下面的(count++%1024==0)表示每1024个就刷一下
int ch = 0;
//int count = 0;
while((ch=fr.read())!=-1)
{
fw.write(ch);
//if(count++%1024==0)
//{
//fw.flush();
//}
}
//方式2
char[] chs = new char[1024];
int len = 0;
while((len=fr.read(chs))!=-1)
{
fw.write(chs,0,len);
fw.flush();
}
fw.close();
fr.close();
(6)高效的流(掌握)
高效流,处理流,高级流:都是建立在基本流基础之上的流。
只起到高效的作用,基本的读写还得依靠基本的流对象。
BufferedReader:
包装了Reader
特殊方法:读取一行
String readLine()
BufferedWriter:
包装了Writer
特殊方法:换行
void newLine()
(7)案例(掌握 补齐)
使用高效流复制文本文件
方式1:一次读取一个字符
BufferedReader br=new BufferedReader(new FileReader("d:\\a.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\b.txt"));
int ch=0;
int count=0;
while((ch=br.read())!=-1){
bw.write(ch);
if(count%2000){
bw.flush();
count++;
}
}
br.close();
bw.close();
方式2:一次读取一个字符数组
BufferedReader br=new BufferedReader(new FileReader("d:\\a.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\b.txt"));
char[] ch=new char[1024];
int len=0;
while((len=br.read(ch))!=-1){
bw.write(ch,0,len);
bw.flush();
}
br.close();
bw.close();
方式3:一次读取一个字符串
BufferedReader br=new BufferedReader(new FileReader("d:\\a.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\b.txt"));
String s=null;
while((s=br.readLine())!=null){
bw.write(s);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
IO流
最新推荐文章于 2024-08-23 15:44:17 发布