Java语言程序设计实用教程第十一讲输入输出流.ppt
《Java语言程序设计实用教程第十一讲输入输出流.ppt》由会员分享,可在线阅读,更多相关《Java语言程序设计实用教程第十一讲输入输出流.ppt(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SISEJava语言程序设计实用教程Java语言程序设计实用教程SISEJava语言程序设计实用教程第十一讲 输入输出流SISEJava语言程序设计实用教程3本章学习要点:l理解流,运用流进行I/O操作l运用File类和RandomAccessFile类进行文件操作 l识别客户/服务器体系结构,理解网络通信的机制,创建网络应用服务SISEJava语言程序设计实用教程 q流的概念SISEJava语言程序设计实用教程流的概念lJava用流的观念来管理输入输出输入输出(I/O),流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据当程序需要读取数据的时候,就会开启一个通向数据源的流源
2、的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的当程序需要写入数据的时候,就会开启一个通向目的地的流地的流。这时候就可以想象数据好像在这其中“流”动一样字节流:在输入输出过程中以字节(8位单字节)为单位(图11-1)字符流:在输入输出过程中以字符(16位双字节)为单位(图11-2)SISEJava语言程序设计实用教程 l在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出文件的操作网络上的数据流字符串流对象流zip文件流流的应用SISEJava语言程序设计实用教程lJava中字节流由两个抽象类来表示(每种流包括输
3、入和输出)InputStream,OutputStream,Java中其他多种多样变化的流均是由它们派生出来的字节流及派生SISEJava语言程序设计实用教程lJava中字符流由两个抽象类来表示(每种流包括输入和输出)Reader,Writer,Java中其他多种多样变化的流均是由它们派生出来的字符流及派生SISEJava语言程序设计实用教程l文件流:用于传递当前操作系统的某个文件内容l管道流:用于多线程之间的通信l过滤流:建立在其它流之上,完成暂存数据、统计数据、转换数据类型等l缓存流:构建内存缓冲区,使得IO流的利用更高效l各种IO流的用途(P296,表11-1)SISEJava语言程序设
4、计实用教程标准输入输出l标准输入 public static final InputStream in 使用read()和skip(long n)方法读取。l标准输出 public static final PrintStream out 使用print()和println()来输出。l标准错误输出 public static final PrintStream errSISEJava语言程序设计实用教程 q文件操作SISEJava语言程序设计实用教程File类(p298,图11-7)lFile类的实例代表磁盘文件的对象lFile类只是描述文件对象的属性,包括获取文件的大小、是否读写、文件路径
5、、文件清单列表、新建目录等q目录被作为一种文件来处理 qFile类并不是文件流类,它不能从文件读取数据或向文件写入数据 SISEJava语言程序设计实用教程例:创建一个目录(P299的创建目录方法有误)File file=new File(e:LeadWay);boolean a=file.mkdir();if(a=true)System.out.println(创建成功);else System.out.println(失败);SISEJava语言程序设计实用教程例:查看一个目录下的文件 File file=new File(目录);1.String fileName=file.listfi
6、le.length();2.File fileName=file.listFiles();然后用数组循环输出 例如:例如:File dir=new File(c:windows);String fileName=dir.list();for(int i=0;ifileName.length;i+)System.out.println(fileNamei);SISEJava语言程序设计实用教程文件的顺序访问 1.引入“java.io”包,import java.io.*;2.根据数据源和输入输出的任务建立字节或字符流。3.若需要对字节或字符信息组织加工,位数据在已建字节或字符流对象上建立数据流或
7、缓冲流。4.用输入输出流对象的成员方法进行读/写操作,需要时可设置指针位置。5.关闭流对象。2-5要考虑异常处理。SISEJava语言程序设计实用教程文件输入输出字节流1.创建FileInputStream类对象;2.读取文件信息;3.创建FileOutputStream类对象;4.向输出流写信息:q void write(int b);void write(byte b);q void write(byte b,int off,int len);5.关闭FileInputStream流。SISEJava语言程序设计实用教程FileInputStream的read方法FileInputStre
8、am可以使用可以使用read()方法一次读入一个字节方法一次读入一个字节,并以并以int类类型返回,或者是使用型返回,或者是使用read()方法时读入至一个方法时读入至一个byte数组,数组,byte数组数组的元素有多少个,就读入多少个字节的元素有多少个,就读入多少个字节.在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承载数据的中间角色.public int read(byte b,int off,int len)从此输入流中将最多len个字节的数据读入一个字节数组中。参数:b -存储读取数据的缓冲区。off -数据的起始偏移量。
9、len -读取的最大字节数。返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。SISEJava语言程序设计实用教程FileOutputStream的构造方法lFileOutputStream默认会以新建文件的方式来开启流.如果指定的文件名称已经存在,则原文件会被覆盖;如果想以附加的模式来写入文件,则可以在构建FileOutputStream实例时指定为附加模式.例如:FileOutputStream fileOutputStream=new FileOutputStream(args1,true);l构建方法的第二个append参数如果设定为true,在开启流
10、时如果文件不存在则会新建一个文件,如果文件存在就直接开启流,并将写入的数据附加至文件末端.SISEJava语言程序设计实用教程例:使用文件输入输出字节进行文件拷贝方法public static void main(String args)try byte buffer=new byte1024;/来源文件 FileInputStream fileInputStream=new FileInputStream(new File(args0);/目的文件 FileOutputStream fileOutputStream=new FileOutputStream(new File(args1);/
11、available()可取得未读取的数据长度 System.out.println(复制文件:+fileInputStream.available()+字节);SISEJava语言程序设计实用教程例:使用文件输入输出字节方法(续1)while(true)if(fileInputStream.available()1024)/剩余的数据比1024字节少 /一位一位读出再写入目的文件 int remain=-1;while(remain=fileInputStream.read()!=-1)fileOutputStream.write(remain);break;else /从来源文件读取数据至缓
12、冲区 fileInputStream.read(buffer);/将数组数据写入目的文件 fileOutputStream.write(buffer);SISEJava语言程序设计实用教程例:使用文件输入输出字节方法(续2)/关闭流 fileInputStream.close();fileOutputStream.close();System.out.println(复制完成);catch(ArrayIndexOutOfBoundsException e)System.out.println(using:java FileStreamDemo src des);e.printStackTrac
13、e();catch(IOException e)e.printStackTrace();SISEJava语言程序设计实用教程例:使用文件输入输出字节方法的说明l程序中示范了两个read()方法,每次读取之后,读取的光标都会往前进,如果读不到数据刚返回.:一个方法可以读入指定长度的数据至数组另一个方法一次可以读入一个字节.l使用available()方法可以获得还有多少字节可以读取.l除了使用File来建立FileInputStream,FileOutputStream的实例之外,也可以直接使用字符串指定路径来建立.如:/来源文件FileInputStream fileInputStream=n
14、ew FileInputStream(args0);/目的文件FileOutputStream fileOutputStream=new FileOutputStream(args1);SISEJava语言程序设计实用教程文件输入输出字符流l上面的FileInputStream使用字节读取文件,字节流不能直接操作Unicode字符,所以Java 提供了字符流.l由于汉字在文件中占用2 个字节,如果使用字节流,读取不当会出现乱码现象,采用字符流就可以避免这个现象,因为,在Unicode 字符中,一个汉字被看作一个字符.SISEJava语言程序设计实用教程文件输入输出字符流(P300,例11-2)
15、lFileReader和FileWriter是InputStreamReader和OutputStreamWriter的子类。构造方法各有两种。qFileReader(File f)FileReader(String fn)qFileWriter(File f)FileWriter(String fn)l常用方法:q read();read(char buffer);q write(String str);q write(char buffer);SISEJava语言程序设计实用教程文件的随机访问 l输入流FileInputStream和输出流 FileOutputStream,实现的是对磁盘
16、文件的顺序读写,而且读写要分别创建不同对象。相比之下RandomAccessFile类则可对文件实现随机读写操作。l使用下列构造方法创建流,使用路径名的字符串或使用File类的对象作为参数,mode的取值为”r”或”rw”:qRandomAccessFile(String name,String mode);qRandomAccessFile(File name,String mode);lRandomAccessFile对象操作一个文件时,能够在指定的位置以原始数据类型原始数据类型读取或写入数据,例:q当写入一个int类型的值时,四个字节的数据输出到文件q当读取一个double类型的值时,8
17、个字节的数据从文件输入SISEJava语言程序设计实用教程RandomAccessFile对象的指针规律l新建RandomAccessFile对象的文件位置指针位于文件的开头处;l每次读写操作之后,文件位置的指针都相应后移到读写的字节数;l可以通过getFilePointer方法来获得文件当前指针的位置,默认为0 l通过seek方法来设置文件指针的位置。SISEJava语言程序设计实用教程RandomAccessFile的其它方法(P301,例11-3)lInt read()从文件当前位置读取一个字节lint read(byteb)lint read(byteb,int off,int len
18、)lFinal char readChar()从文件中读取2个字节 lFinal int readInt()从文件中读取4个字节lFinal String readLine()从文件中读取一行后转为StringlVoid write(byteb)将字节数组B中的数据写到文件中lVoid write(byteb,int off,int len)将 len 个字节从指定字节数组写入到此文件,并从偏移量 off 处开始lVoid write(int b)将指定的数据写到文件中。lFinal void writeChar(int v)将char值按2个字节写入到文件中 lFinal void writ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言程序设计 实用教程 第十一 输入输出
限制150内