Java中IO流体系是很重要的基础,我相信一开始接触Java,很多人最头疼的就是这些了,搞不清时,真的会把自己绕进去.在程序中所有数据的传输又都是以流的方式进行的,为了能搞清楚这部分的知识,有必要重新整理一下Java基础,为以后的编程打下良好的基础.
1、什么是IO流?
IO指的是Input/Output,IO流:输入输出流. 我们称为数据流.
在Java程序中,对于数据的输入 / 输出操作都是以流的方式进行的.
JDK中提供了各种各样的流类,用以获取不同种类的数据.
常见的2种IO流分类:
1.按流向分:
输入流:程序可以从中读取数据的流
输出流:程序能向其中写入数据的流
按数据传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
为了能更好的了解Java中的IO流,下面用一张图来说明:
2、IO流的基类和分类
下面用一张表格详细讲解IO流的分类:
以上流都是继承四个抽象基类:
字节输入流:InputStream 字符输入流:Reader
字节输出流:OutputStream 字符输出流:Writer
为了更好的学习Java流体系,下面主要先从四个抽象基类开始分析.
3InputStream和OutputSteam
InputStream 字节输入流:继承自InputStream的流都是用于向程序中输入数据的.
OutputStream 字节输出流 :继承自OutputStream的流是程序用于向外输出数据的.
潍坊达内培训:下面举个例子来说,继承自这两个流的文件字节操作流FileInputStream和FileOutputStream的使用.
例子:现在有个需求是要将一份音乐文件从e:src复制到e:dest.
public static void main(String[] args) {String srcPath = "E:\src\media.mp4";String destDir = "E:\dest";File destDirFile = new File(destDir);if (!destDirFile.exists()) {destDirFile.mkdir();}FileInputStream fInputStream = null;FileOutputStream fOutputStream = null;//从Src读:输入流//写入dest:输出流//数据类型:视频,只能用字节流try {fInputStream = new FileInputStream(srcPath);fOutputStream = new FileOutputStream(destDirFile.getAbsolutePath()+File.separator+"cp_media.mp4");//循环通过输入流,读取数据,边读边写byte[] buff = new byte[100];int len=-1;while ((len=in.read(buff,0,buff.length))!=-1) {//返回值:是真实读取到的字节数,如果到了流的末尾,返回-1//通过输出流写出fOutputStream.write(buff,0,len);//推荐使用这个方法,读到多少字节就写入多少字节}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {if (fInputStream != null) {fInputStream.close();}if (fOutputStream != null) {fOutputStream.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
4、Reader 和Writer
Reader 字符输入流,继承自Reader的流都是用于向程序中输入数据的.
Writer 字符输出流,继承Writer的流都是向程序中输出的.
下面同样举个例子来说,继承自这两个流的文件字符操作流FileWriter和FileReader的使用.
例子:用FileWriter和FileReader完成文件的复制[把D盘中的Stream.txt复制到C盘的根目录下]
public static void main(String[] args) { File filesrc=new File("D:\iotest2\Stream.txt"); File filedest=new File("C:\"+"copy.txt"); try { Reader in=new FileReader(filesrc); Writer out=new FileWriter(filedest); char[]cs=new char[1024]; int len=-1;//实际的位置 while((len=in.read(cs,0,cs.length))!=-1){ out.write(cs,0,len); } out.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } }
更多潍坊达内培训相关资讯,请扫描下方二维码