java核心课件-第13章.ppt
《java核心课件-第13章.ppt》由会员分享,可在线阅读,更多相关《java核心课件-第13章.ppt(33页珍藏版)》请在三一办公上搜索。
1、第13章 I/O流,熟练使用File类的常用方法;理解流,及其层次结构;能熟练使用字节流和字符流类对文件进行读写操作。,31.1 File类,File f=new File(my.txt);f.createNewFile();f.mkdir();File f=new File(F:myjavaclass81.txt);f.createNewFile();File fDir=new File(File.separator+myjavaclass8);String strFile=File.separator+“1.txt;File f=new File(fDir,strFile);f.creat
2、eNewFile();File arrFile=f.listFiles();File arrFile=f.listFiles(new Test();public boolean accept(File dir,String name)return name.indexOf(.java)!=-1;,13.2 流的概念,流是程序和外界进行数据交换的通道;它是一种抽象观念,如从键盘输入数据、将结果输出到显示器、打开与保存文件等操作皆视为流的处理。我们可通过它来读写数据,甚至可以通过它连接数据来源(data source),并可以将数据保存。使用流的好处是:能非常灵活地在文件中保存数据或从文件中读取数
3、据。,stream(流),流是指一连串流动的数据信号,是以先进先出的方式发送和接收数据的通道。,InputStream,来自数据源的数据流,OutputStream,流向目的地的数据流,流(续),13.3 流相关类的层次结构,Java有一套完整的输入/输出类层次结构,它们是建立在4个抽象类的基础上的;Java中的流主要有字节流和字符流。,流的类型,根据流动方向的不同,流分为输入流和输出流;对于输入和输出流,由于传输格式的不同,又分为字节流和字符流:字节流是指8位的通用字节流,以字节为基本单位,在java.io包中,对于字节流进行操作的类大部分继承于InputStream(输入字节流)类和Out
4、putStream(输出字节流)类;字符流是指16位的Unicode字符流,以字符(两个字节)为基本单位,非常适合处理字符串和文本,对于字符流进行操作的类大部分继承于Reader(读取流)类和Writer(写入流)类。,字节输入输出流层次,字符输入输出流层次,13.4 字节流,不管是输入流还是输出流,用完以后都必须关闭,且应放在finally子句中;读写操作都会抛异常,必须进行处理;汉字最好用字符流操作。,13.4.3 文件输入/输出流,import java.io.*;class StreamTest public static void main(String args)throws IO
5、Exception FileInputStream fis=new FileInputStream(1.txt);byte buf=new byte1024;int len=fis.read(buf);System.out.println(new String(buf,0,len);fis.close();FileOutputStream fos=new FileOutputStream(1.txt);fos.write(aaj;akajaa;pvzoi.getBytes();fos.close();,其构造方法参数中的字符串可以是路径也可以是文件名,13.4.5 连接字节输入流,import
6、 java.io.*;public class SequenceTest public static void main(String args)throws IOException FileInputStream fis1=new FileInputStream(1.txt);FileInputStream fis2=new FileInputStream(2.txt);SequenceInputStream sis=new SequenceInputStream(fis2,fis1);byte buf=new byte1024;int len1=sis.read(buf);int len2
7、=sis.read(buf,len1,1024-len1);System.out.println(new String(buf,0,len1+len2);sis.close();,当有多个流连接在一起时,关闭最外层流就可以了,13.4.6 过滤字节流,它本身不是流,是一种用于扩展底层流功能的装饰器,它的子类,分别用来扩展字节流的某一种功能;它必须先创建对应字节流对象,再以它为参数来创建过滤字节流类的象,然后利用此对象扩展字节流的功能,就像把字节流包覆于其中;关闭文件时,一般只关闭外层流即可。,13.4.6.1 缓冲输入/输出流,BufferedInputStream的特点是:不断的从底层流中读
8、取数据,可以减少I/O请求次数,提高效率;BufferedInputStream的特点是:先将数据写到缓冲里,缓冲满后再一次性写入,可以减少I/O请求次数,提高效率;一般在关闭前调用flush方法,将数据强制写入。,import java.io.*;class StreamTest public static void main(String args)throws IOException FileInputStream fis=new FileInputStream(1.txt);BufferedInputStream bis=new BufferedInputStream(fis);byt
9、e buf=new byte1024;int len=bis.read(buf);System.out.println(new String(buf,0,100);bis.close();FileOutputStream fos=new FileOutputStream(1.txt);BufferedOutputStream bos=new BufferedOutputStream(fos);bos.write(aaj;akajaa;pvzoi.getBytes();bos.flush();bos.close();,13.4.6.2 格式化输出流,PrintStream类的特点是:可以直接写基
10、本数据类型和字符串;可指定自动刷新缓存;方法不会抛出异常标准类库中System等类都使用了它;,import java.io.*;class StreamTest public static void main(String args)throws IOException FileOutputStream fos=new FileOutputStream(1.txt);BufferedOutputStream bos=new BufferedOutputStream(fos);PrintStream ps=new PrintStream(fos,true);ps.print(aaj;akaja
11、a;pvzoi);ps.close();,13.4.6.3 数据输入/输出流,DataInput接口抽象出来的行为是:从二进制流中读取字节,并根据Java基本数据类型进行重构;DataOutput接口抽象出来的行为是:将数据从任意Java基本数据类型转换为一系列字节,并将这些字节写入字节流;DataInputStream和DataOutputStream分别实现了这两个接口;DataOutputStream的特点是:可以写基本数据类型;DataInputStream的特点是:可以读基本数据类型,读时文件到尾不会返回-1,而是抛出异常;因此,这两种流通常成对使用,否则容易发生异常;用这两种流时,
12、读写的顺序应相同,否则读出的数据不对。,import java.io.*;class StreamTest public static void main(String args)throws IOException FileOutputStream fos=new FileOutputStream(1.txt);BufferedOutputStream bos=new BufferedOutputStream(fos);DataOutputStream dos=new DataOutputStream(bos);byte b=3;int i=78;char ch=a;float f=4.5f
13、;dos.writeByte(b);dos.writeInt(i);dos.writeChar(ch);dos.writeFloat(f);dos.flush();dos.close();FileInputStream fis=new FileInputStream(1.txt);BufferedInputStream bis=new BufferedInputStream(fis);DataInputStream dis=new DataInputStream(bis);System.out.println(dis.readByte();System.out.println(dis.read
14、Int();System.out.println(dis.readChar();System.out.println(dis.readFloat();dis.close();,13.4.6.11自定义流,import java.io.*;class MyOutputStream extends FilterOutputStream MyOutputStream(OutputStream out)super(out);public void write(int x)throws IOException super.write(x+10);,自定义输出流时,一般只覆盖一个write方法:write
15、(int x),因为在内部,别的write方法都调用它;注意:方法要抛出异常,import java.io.*;class MyInputStream extends FilterInputStream MyInputStream(InputStream in)super(in);public int read()throws IOException int x=super.read();return(x=-1)?-1:(x-10);public int read(byte b,int offset,int len)throws IOException int x=super.read(b,o
16、ffset,len);for(int i=offset;i(offset+x);i+)bi=(byte)(bi-10);return x;,自定义输入流时需要覆盖两个方法:read()和read(byte b,int offset,int len),测试自定义流,import java.io.*;class StreamTest public static void main(String args)throws IOException FileOutputStream fos=new FileOutputStream(1.txt);MyOutputStream mos=new MyOutpu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 核心 课件 13
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6509871.html