----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流与字符流。
流按流向分为:输入流,输出流。
字节流的抽象基类:
InputStream ,OutputStream。
l
字符流的抽象基类:
Reader , Writer。
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream。
如:Reader的子类FileReader。
记忆规则:后缀名表示的是父类,前面表示的操作对象。<A">
输入输出的方向是相对于程序来说的所以input和read是从程序外部读取数据 例如文件,图片,System.in等。output和writer相反。IO体系的类很多都用了装饰模式,装饰模式利用了原有的类,增强了原有类某些方法的功能,同时又不用继承原有类,因此比继承灵活,因为只是功能增强,所以装饰类与被装饰类通常在一个体系中。以Reader与Buffered为例,BufferedReader就是在其构造函数中封装了Reader类对象,并将父类的read方法读到的字符存到类中的StringBuilder中,然后从StringBuilder中一次性读出,减少了磁盘的写操作,提升了写效率。IO操作因为涉及到IO所以会报FileNotFound等异常,所以设计到IO操作就应该进行异常处理。下面是文件拷贝的代码
public class CopyText {
public static void main(String[] args) {
BufferedReader fr = null;
BufferedWriter fw = null;
String len=null;
try {
fr = new BufferedReader(new FileReader("F://59633.txt"));
fw = new BufferedWriter(new FileWriter("E:\\filetest.txt"));
while((len = fr.readLine())!= null){
fw.write(len);
fw.newLine();
fw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fw!= null)
fw.flush();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fr!= null)
fr.close();
System.out.println("文件复制完成");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------