Java当中的IO流程属于重点中的一部分,下面我为大家分析一下IO流。
首先什么是io流,我不说课本上的了,做个形象的比喻就类似于水流 ,文件------程序,在文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向,双向的,既可以流进,也可以流出。便于理解,可以把流就是一个管道里面有流水,这个管道连接了文件和程序。
接下来在讲一下分类吧。流都在java.io包中,按输入输出的话可以分为输入流InputStream,输出流OutputStream;根据它们操作对象的类型是字符还是字节可分为两大类: 字符流和字节流。下面将详细说明一下:
①JAVA字节流
a.FileInputStream文件输入流和FileOutputStream文件输出流
这两个类属于结点流,第一个类的源和第二个类的目的都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流。如:
FileInputStream infile = new FileInputStream("myfile.dat");
FileOutputStream outfile = new FileOutputStream("results.dat");
值得注意的是,构造FileInputStream, 对应的文件必须存在并且是可读的,而构造FileOutputStream时,如输出文件已存在,则必须是可覆盖的。
b.BufferedInputStream和BufferedOutputStream
它们是过滤器流,其作用是提高输入输出的效率。
c.DataInputStream和DataOutputStream
这两个类创建的对象分别被称为数据输入流和数据输出流,用的也很多,这些以后再给大家讲解,今天先说基础。
②Java的字符流
字符流主要是用来处理字符的,对应的字符流按输入和输出分别称为readers和writers。
a.InputStreamReader和OutputStreamWriter
在构造这两个类对应的流时,它们会自动进行转换。
b.BufferedReader和BufferedWriter
这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理,这2个流是转换流。
值得注意的是Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
结合开始所说的输入/输出流,字符流/字节流出现了个一小框架。
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
最好下面给大家展示一下,IO流常用的代码吧,实现了文件的读取,打印在另一个文件实现了复制功能:
import java.io.*;
public class TextRead{
public static void main(String[] args){
File fi,fo; //建立file文件对象
BufferedReader bf = null;
PrintWriter pw = null;//建立一个打印流,不懂的话就认识为是print
//做IO不try就throws,基础你懂得
try{
//文件的路径以及名称,如果没有会自动创建。
fi = new File("F:\test.txt");
fo = new File("copyzzc.txt");
bf = new BufferedReader(new FileReader(fi));
pw = new PrintWriter(fo);
//运用读取多行readLine方法,read方法每次读取一行,可用循环都读取出来
String line = bf.readLine();
while(line!=null){
pw.println(line);
line = bf.readLine();
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
//关闭 文件。
if(bf!=null){
bf.close();
bf = null;
}
if(pw!=null){
pw.close();
pw = null;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
} |
|