1:IO流的操作(掌握)
(1)字符输出流的使用。(掌握)步骤:
创建字符输出流对象
调用字符输出流对象的write方法
write(int ch)
write(int[] chs)
write(int[] chs,int index,int len)
write(String str)
释放资源
代码体现:
FileWriter fw = new FileWriter("fw.txt");
fw.write("hello,io");
fw.flush();
fw.close();
问题?
创建字符输出流对象做了几件事情?
1:调用操作系统的资源创建了一个文本文件
2:创建了字符输出流对象
3:把字符输出流对象指向这个文本文件
为什么一定要释放资源?
做了两件事情,第一件让本是对象变成垃圾,
第二件通知操作系统释放占用的资源。
flush方法和close方法的区别?
flush:刷新缓冲区,流对象还可以继续使用。
close:先刷新缓冲区,然后释放资源。流对象不可以被使用了。
写入数据的时候,如何追加数据?
通过构造方法可以解决
public FileWriter(String fileName,boolean append)
Demo:FileWriter fw = new FileWriter("a.txt",true);
换行该怎么实现?
不同的软件,换行符的标记识别不一样。
windows识别的换行是\r\n。所以,记事本打开的也必须是\r\n换行。
(2)字符输入流的使用。(掌握)
步骤:
创建字符输入流对象
调用字符输入流对象的read方法
调用读取方法。
两种:
一次读取一个字符。
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(new String(chs,0,len));
}
fr.close();
问题?
读取数据的时候,文件一定要存在。
(3)案例:(掌握)
复制文本文件加入异常处理。(理解)
复制文本文件。(掌握)
代码体现:
FileReader fr = new FileReader("fr.txt");
FileWriter fw = new FileWriter("fw.txt");
//方式1
int ch = 0;
while((ch=fr.read())!=-1)
{
fw.write(ch);
}
//方式2
char[] chs = new char[1024];
int len = 0;
while((len=fr.read(chs))!=-1)
{
fw.write(chs,0,len);
}
fw.close();
fr.close();
(4)字符缓冲流(掌握)
BufferedWriter:
特殊方法:void newLine()
BufferedReader:
特殊方法:String readLine()
复制文本文件:
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
//方式1
int ch = 0;
while((ch=br.read())!=-1)
{
bw.write(ch);
bw.flush();
}
//方式2
char[] chs = new char[1024];
int len = 0;
while((len=br.read(chs))!=-1)
{
bw.write(chs,0,len);
bw.flush();
}
//方式3
String line = null;
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
2:装饰设计模式(理解)
(1)装饰设计模式:对类的功能进行增强,提高了灵活性。
(2)装饰设计模式和继承进行比较。
继承:面向的三大特性之一,但是,使体系臃肿。
装饰模式:让体系更灵活。
(3)自己模拟BufferedReader的readLine()方法
(4)自己模拟LineNumberReader的get/setLineNumber()方法