Java语言8数据流的应用.ppt

上传人:小飞机 文档编号:6510139 上传时间:2023-11-07 格式:PPT 页数:37 大小:406KB
返回 下载 相关 举报
Java语言8数据流的应用.ppt_第1页
第1页 / 共37页
Java语言8数据流的应用.ppt_第2页
第2页 / 共37页
Java语言8数据流的应用.ppt_第3页
第3页 / 共37页
Java语言8数据流的应用.ppt_第4页
第4页 / 共37页
Java语言8数据流的应用.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《Java语言8数据流的应用.ppt》由会员分享,可在线阅读,更多相关《Java语言8数据流的应用.ppt(37页珍藏版)》请在三一办公上搜索。

1、Java语言程序设计,资源与环境科学学院,第八章 数据流的应用,数据流的应用,输入输出方法 File I/O 缓冲流 数据流 文件的其它操作,输入输出方法,文件,程序,终端,文件,程序,网络端点,数据流,起点,终点,网络端点,文件,字符串存储区,数据流是指所有的数据通信通道在java中有关流的操作使用java.io.*P236,什么是数据流?,输入输出方法,System类管理标准输入输出流和错误流 System.out:将数据从程序发送到目的地(通常是显示器)System.in:将数据从数据源传递给程序(通常是键盘)System.err:把错误信息送到缺省的显示,输入输出方法,public c

2、lass ReadHello public static void main(String args)char inchar;System.out.println(“Enter a character:”);try inChar=(char)System.in.read();System.out.println(inChar);catch(IOException e)Sytem.out.println(“Error reading from user”);,输入输出方法,import java.io.*;class IOTest public statics void main(String

3、args)try byte bArray=new byte128;System.out.println(“Enter something:”);System.in.read(bArray);System.out.print(“You entered:”);System.out.println(bArray);catch(IOException ioe)System.out.println(ioe.toString();,输入输出方法,为什么输入的是字符,输出是乱码?原因:System.out.println(bArray)输出的是数组的地址而不是字符 改进:将字符数组变换成字符串,输出正确结果

4、,原来是:System.out.println(bArray);现在为:String s=new String(bArray);System.out.println(s);,输入输出流的基类,Java中每一种流的基本功能依赖于基本类 InputStream和OutputStream,它们是抽象类,不能直接使用 属于InputStream类的方法有:read():从流中读入数据 skip():跳过流中若干字节数 available():返回流中可用字节数 mark():在流中标记一个位置 reset():返回标记过的位置 markSupport():是否支持标记和复位操作 close():关闭流

5、,输入输出流的基类,方法read()提供了三种从流中读数据的方法.int read():读取流中的字节。返回一个整数,它是流的下一个字节。如果返回1,表明已到达文件流的末尾。int read(byte b):读多个字节到数组中 int read(byte b,int off,int len);从流中指定位置读取多个指定长度的字节。参数:b一个用于存储数据的字节数组;off数组的第一个元素,应存储数据的第一个字节。len要读取的字节数。,输入输出流的基类,属于OutputStream类的方法有 write(int b):将字节写入到流中 write(byte b):将数组中的数据写入到流中 wr

6、ite(byte b,int off,int len):将数组b中从off指定的位置开始len长度的数据写入到流中 flush():将缓冲区中的数据强制送出 close():关闭流.,输入输出流的基类,过滤流,书P237 PrintStream类是FilterOutputStream类的子类,FilterOutputStream类是OutputStream类的子类。PrintStream类的方法有:write,flush,checkError,print,println,close.println()不属于OutputStream类,它是PrintStream类的方法,能提供复杂的输出。例如:

7、println(String s),println(char c)等,字 节 流,字节流要么是 InputStream 的子类,要么是OutputStream 的子类。这些类都是抽象类,因此不能通过直接创建这些类的对象来创建字节流,而必须通过它们的子类来创建流。FileInputStream 和 FileOutputStream:用于磁盘、光盘或其他存储设备中的文件的字节流。BufferedInputStream和BufferedOutputStream为缓冲字节流。DataInputStream 和 DataOutputStream 被过滤的字节流,从中可读取诸如整数和浮点数等。,File

8、I/O,文件对象的建立 File fp=new File(“tempfile.dat”);对文件操作要定义文件流 FileInputStream 类用来打开一个输入文件 FileOutputStream 类用来打开一个输出文件,File I/O,文件流的建立 FileInputStream in=new FileInputStream(fp);FileOutputStream out=new FileOutputStream(fp);创建文件输入流后,可以调用read()方法来读取流中的字节。该方法返回一个整数,它是流中的下一个字节,如果返回-1,则表明已到达文件流的末尾。要从流中读取多个字节

9、,可调用 read(byte,int,int)方法。参数:byte用于存储数据的字节数组;int 数组的第一个元素,应存储数据的第一个字节;int 要读取的字节数。,File I/O,可使用while循环来读取FileInputStream对象in中的数据 int newByte=0;while(newByte!=-1)newByte=in.read();System.out.print(newByte+“”);一段完整程序,见书P238 程序15.1,File I/O,文件输出流可使用构造函数 FileOutputStream(String)来创建,其用法与 FileInputStream(

10、String)相同。指定与输出流相关联的文件时,必须非常小心。如果它与现有的某个文件同名,则当数据写入到流中时,原来的数据将被覆盖。可以使用构造函数 FileOutputStream(String,boolean)来将数据追加到文件末尾。追加数据时boolean=true。文件输出流的 write(int)方法用于将字节写入到流中。将最后一个字节写入到文件中后,应调用流的close()方法来关闭它。见书P240 程序15.2,缓冲流,缓冲区是一片存储空间,在读写数据的程序需要之前,数据被存储在这里。使用缓冲区无需每次都到数据源那里去获取数据。缓冲输入流使用未被处理的数据来填充缓冲区,程序需要数

11、据时,将首先在缓冲区中查找,如果没有找到,再到流源中查找。缓冲字节流是使用BufferedInputStream 和BufferedOutputStream 类表示的。书 P241,缓冲流,增加缓冲区流,减少访问硬盘的次数,提高效率,file1.dat,file2.dat,输入流,输出流,输入缓冲区,输出缓冲区,缓冲流,缓冲区流:BufferedInputStream和 BufferedOutputStream将它们与文件流相接FileInputStream in=new FileInputStream(“file1.dat”);BufferedInputStream bin=new Buff

12、eredInputStream(in,256)int len;byte bArray=new byte256;len=bin.read(bArray);len中得到是长度,bArray中得到的是数据,缓冲流,只有缓冲区满时,才会将数据送到输出流.有时要人为地将尚未填满的缓冲区中的数据送出,使用flush()方法.,数据流,要处理未表示为字节或字符的数据,可以使用数据输入流和数据输出流。这些流对字节流进行过滤,以便能够直接读写如下基本数据类型:boolean、byte、double、float、int、long和short。要创建数据输入流,可使用构造函数DataInputStream(Inpu

13、tStream),其中的参数是一个现有的输入流,如一个缓冲输入流或一个文件输入流。要创建数据输出流,可使用构造函数 DataOutputStream(OutputStream),它指定了相关联的输出流。,数据流,可使用的方法:writeBoolean,readByte等,P244 数据流的建立 FileOutputStream fos=new FileOutputStream(”file2.dat);DataInputStream dis=new DataInputStream(fos)例子P244,将前400个素数作为整数写入到文件中。数据输出流可以是一个已经建立好的输入数据流对象,例如网络

14、的连结,文件等。下面的例子显示如何利用数据输入输出流往文件中写不同类型的数据。,数据流,class datainput_output public static void main(String args)throws IOException FileOutputStream fos=new FileOutputStream(“a.dat”);DataOutputStream dos=new DataOutputStream(fos);try dos.writeBoolean(true);dos.writeByte(byte)123);dos.writeChar(J);dos.writeDou

15、ble(3.141592654);dos.writeFloat(2.7182f);dos.writeInt(1234567890);dos.writeLong(998877665544332211L);dos.writeShort(short)11223);finally dos.close();,数据流,DataInputStream dis=new DataInputStream(new FileInputStream(”a.dat);try System.out.println(dis.readBoolean();System.out.println(dis.readByte();Sys

16、tem.out.println(dis.readChar();System.out.println(dis.readDouble();System.out.println(dis.readFloat();System.out.println(dis.readInt();System.out.println(dis.readLong();System.out.println(dis.readShort();finallydis.close();,字节流的分类,InputStream和OutputStream是所有输入输出流的父类,它们是一个抽象类.,字节流的分类,InputStream中的基本方

17、法包括:read,available,mark,skip,reset,close OutputStream中的基本方法包括:write,flush,close,文件的其他操作,使用文件类获取文件的路径信息 设f是一个文件对象 File f=new File(“data”,“temp.dat”);f.getName():返回文件名 temp.datf.getParent():返回文件所在目录名 dataf.getPath():返回文件路径 datatemp.datf.getAbsolutePath():返回绝对路 c:myprogdatatemp.dat,文件的其他操作,例:获取当前目录下所有文

18、件名和文件的尺寸:import java.io.*;public class file_size public static void main(String args)File files=new File(“.”);String file_list=files.list();for(int i=0;ifile_list.length;i+)File current_file=new File(file_listi);System.out.println(file_listi+current_file.length();,读取文本文件,字符流用于处理用ASCII字符集或Unicode(包含A

19、SCII的国际字符集)表示的文本。可以使用字符流来处理的文件有纯文本文件,HTML文档和Java源代码文件。用于读写这些流的类都是Reader和Writer的子类 从文件中读取字符流时,通常使用FileReader类这个类是从InputStreamReader派生而来的,它读取字节流中的字节,并将其转换为表示Unicode字符的整数值。,读取文本文件,构造函数 FileReader(String)。字符串参数指定了要关联的文件,除文件名外,它还可以包含路径。FileReader fReader=new FileReader(“aa.txt”);使用read()方法来读取文件中的字符:read(

20、):将流中的下一个字符作为整数返回;read(char,int,int):将指定数目的字符读入到指定字符数组的指定位置。,读取文本文件,要一次读取整行文本,而不是一个字符,可以结合使用FileReader和BufferedReader类。BufferedReader 类读取字符输入流,并将读取的字符存储到缓存区,以提高效率。BufferedReader(Reader):创建与指定的Reader对象相关联的缓冲区字符流。BufferedReader(Reader,int):创建与指定的Reader对象相关联的缓冲区字符流,其缓冲区大小为int。,读取文本文件,缓冲区字符流可使用方法read()和

21、read(char,int,int)来读取;要读取一行文本readLine(),返回一个String对象,其中包含流的下一行文本,但不包括表示行尾的字符。如果到达流尾,则返回NULL。程序 见P247 15.7,写文本文件,FileWriter类用于将字符流写入到文件中,它是OutputStreamWriter的子类。构造函数 FileWriter(String)和 FileWriter(String,boolean)。如果要将数据追加到文本文件末尾,可将可选的布尔参数设置为true。可用于将数据写入流中的方法:write(int):写入一个字符;write(char,int,int):从指定

22、位置开始,写入指定字符数组中指定数目的字符;write(String,int,int):从指定位置开始,写入指定字符串中指定数目的字符。,本章小结,在Java中有数据传输的地方都用到I/O流。(通常是文件,网络,内存和标准输入输出等)InputStream 和OutputStream是所有I/O流的祖先(只有RandomAccessFile类是一个例外),read和write是它们最基本的方法,读写单位是字节。在众多的流对象中,并不是每一种都单独使用,其中过滤流的子类在数据送出去之前做必要的处理。,本章小结,File,File(Input/Output)Stream,Data(Input/Output)Stream是一个过滤流的子类,借此可以读写各种基本数据,在文件和网络中经常使用.如:readByte,writeBoolean等。Buffered(Input/Output)Stream的作用是在数据送到目的之前先缓存,达到一定数量时再送到目的,已减少阻塞次数。字符流的读写 FileReader/FileWriter,思考题,编程实现将多条线段数据记录在一个文本文件中。从文本文件中读取线段数据,实现在窗体中绘制多条线段的操作,要求实现所有线的重绘。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号