收藏 分享(赏)

java网络编程第5章.ppt

上传人:scg750829 文档编号:9122805 上传时间:2019-07-24 格式:PPT 页数:33 大小:847KB
下载 相关 举报
java网络编程第5章.ppt_第1页
第1页 / 共33页
java网络编程第5章.ppt_第2页
第2页 / 共33页
java网络编程第5章.ppt_第3页
第3页 / 共33页
java网络编程第5章.ppt_第4页
第4页 / 共33页
java网络编程第5章.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、第五章,JAVA IO字节流,课程目标,IO流的介绍 InputStream OutputStream File FileInputStream FileOutputStream DataInputStream DataOutputStream PrintStream,体验项目,运行文件复制器程序,打开左图所示的窗体,当点击“请选择要复制的文件”后面的“”按钮时,会弹出右图所示的“文件选择”对话框,在该对话框中选择要复制的文件:,选择完要复制的文件后,点击 “请选择文件存放目录”后面的“”按钮时,会弹出“保存位置”对话框,如图所示,在该对话框中选择文件的存放位置。,选择好要复制的文件和保存的位

2、置后,就可以点击“复制”按钮进行复制了,流的概念,JAVA语言在实现输入与输出的过程中,用到了流(stream)这个概念。所谓“流”,就是指数据通信通道。流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。我们通常提到的输入输出,都是立足于编程者角度上的,因此,所谓输入,就是将编程者所设计的程序看作流的终点;所谓输出,则是将程序看作流的起点。这一节中,将学习java.io包中与输入输出有关的类与方法,对流的输入输出进行详

3、细的阐述,JAVA语言的输入输出类也是网络编程的基础。,字节流和字符流,JAVA定义了两种类型的流:字节流和字符流。字节流为处理字节的输入和输出提供了方便的方法,用于读写二进制等数据。字符流为处理字符的输入和输出提供了方便的方法,它们采用Unicode(统一的字符编码标准,采用双字节对字符进行编码),因此能够国际化。但是,字符流有时会比字节流更有效。所有输入输出在较低的层次上仍然是面向字节的。基于字符的流只是提供了一种简便而有效的处理字符的手段。,字节流使用从输入和输出两个层次定义。顶层是两个抽象类:InputStream和OutputStream。每个抽象类都有几个具体的子类,用来处理不同的

4、设备,如磁盘文件、网络连接、内存缓冲区等。字节流类如下表所示,其中有几个子类将在本节后面讨论。记住,必须导入java.io包后才能使用流类。,字节流类表,字节流类表,字节类的层次结构,InputStream,InputStream类是所有输入流类的基类,它直接的下一级子类ByteArrayInputStream类、FileInputStream类、FilterInputStream类、PipedInputStream类、SequenceInputStream类和StringBufferInputStream类等。根据面向对象程序设计的原理以及类之间的继承关系,我们很容易想到InputStrea

5、m类必然要对某些方法进行抽象和概括,进而规范出输入流的最基本的方法。此外,该类的所有方法在发生错误时都将抛出IOException异常。,InputStream的常用方法,int available()返回当前可读的输入字节数。 void close()关闭输入源,如果继续读它将会产生一个IOException异常。 void mark(int numBytes)放一个标记到输入流的当前点。InputStream 的mark方法不执行任何操作。 boolean markSupported()测试此输入流是否支持 mark 和 reset 方法。 int read()如果下一个输入字节可用,返回

6、一个整数。如果到了文件的末尾,则返回-1,需要注意的是,如果无法从流中获取数据,就会导致程序流程的阻塞,并且一直阻塞到可读取到数据为止。 void reset()重新设置输入指示器到前面设置的标记。 long skip(long numBytes)跳过或放弃此输入流中的numBytes个数据字节,返回实际忽略的字节数。,OutputStream,在上一小节中介绍的是以程序作为输入流流向的目标,而在这一部分,将介绍程序作为输出流流出的源泉。在JAVA中,大多数的流类都是“成对出现”的,如果有InputStream类,就有OutputStream类,有ByteArrayInputStream类就有

7、ByteArrayOutputStream类。在这一部分介绍所有输出流的共同的基类OutputStream类,它的最直接的子类是ByteArrayOutputStream类、FilterOutputStream类、FileOutputStream类和PipedOutputStream类等。OutputStream类与InputStream类一样,也是抽象类,因此它提供的方法中不包括构造方法,无法直接用它来实例化一个对象。但可以由其子类去构造真正的输出流实体对象,然后就可以使用它的输出流了,并且在执行异常的情况下会抛出IOException异常。,OutputStream的常用方法,void c

8、lose()关闭输出流。如果进一步的写入将会产生IOException异常。 void flush()最终确定输出状态,以便清空任何缓冲区,即清掉输出缓冲区。 void write(int b)写入单个字节到输出流。注意参数是一个int,它允许用表达式而不必转换为byte类型来调用write()方法。 void write(byte buffer )写入一个完整的字节数组到输出流。,File,这一节介绍java.io包中与输入输出有关的部分,File类为我们提供了操作“文件”或者“目录”对象的方法。通过为文件建立File对象,我们可以利用该类所提供的各种方法来对“文件”或者“目录”进行处理。创

9、建File对象的方法有三种形式:,File file1=new File(“c:/test/file1.txt”); 根据参数指定的文件路径来构造一个File实体对象。 File file2=new File(“c:/test”, “file1.txt”); 在这种方式中,根据给定的目录来构造一个File实体对象,其中“c:/test”为目录的路径,“file1.txt”为文件的名称。 File dir =new File(“c:/test“); File file3=new File(dir,“file1.txt“);,File的常用方法,getName(),返回由某个抽象路径所表示的文件或

10、目录的名称。 getPath(),将此路径名转换为一个路径名字符串。 getAbsolutePath(),返回路径名的绝对路径名字符串。 canWrite(),测试应用程序是否可以修改此抽象路径名表示的文件。 canRead(),测试应用程序是否可以读取此抽象路径名表示的文件。 isDirectory(),测试当前 File 对象表示的文件是否是一个路径。 isFile(),测试当前 File 对象表示的文件是否是一个“普通”文件。 length(),返回当前 File 对象表示的文件长度。 list(),返回当前 File 对象指定的路径文件列表。 list(FilenameFilter)返

11、回当前 File 对象指定的目录中满足指定过滤器的文件列表。 mkdir()创建一个目录,它的路径名由当前 File 对象指定。 mkdirs()创建一个目录,它的路径名由当前 File 对象指定,包括任一必须的父路径。 renameTo(File)将当前 File 对象指定的文件更名为给定参数 File 指定的路径名。,FileInputStream,最常用的输入流除了键盘之外就是文件了。特别是在对大型数据进行处理的过程中,所要处理的数据都是存在文件中的,用户在程序中使用这些数据时,只需从文件中读取这些数据即可。FileInputStream类正是为满足这种从文件获取数据的需要而存在的,它所

12、构造的输入流的起点就是文件。根据已知条件的不同,FileInputStream类提供了三种不同的构造方法,大大方便了用户对文件输入流的构建,下面说明其中常用的两种构造:,(1) FileInputStream fis=new FileInputStream(“文件名”);通过这个构造方法构造的输入流,在已知文件名的情况下,就可以简单地利用这个构造方法来构造一个文件输入流。(2) File file=new File(“文件名”);FileInputStream fis=new FileInputStream(file);通过这个构造方法,建立一个file指定的文件输入流。,FileInputS

13、tream的常用方法,void close()关闭此文件输入流并释放与此流有关的所有系统资源。 int read()从此输入流中读取一个数据字节。 int read(byte b)从此输入流中将最多b.length个字节的数据读入到一个字节数组中。 int read(byte b, int off, int len)从此输入流中将最多len个字节的数据读入到一个字节数组中。,FileOutputStream,对数据进行输出时,屏幕是我们最常用到的终点站,其次就应该是文件了,FileOutputStream类就为我们提供了将文件作为输出流终点的可能性。与FileInputStream类相似,根据

14、已知条件的不同,我们也可以从该类提供的三种构造方法之中选择其一来创建FileOutputStream输出流对象,下面说明其中常用的两种构造:FileOutputStream fos=new FileOutputStream(“文件名”);在这里,通过指定一个作为输出流终点来构造“FileOutputStream”实例化对象,其中文件名应该与该程序在同一目录下,否则应该指明路径。 File file=new File(“文件名”); FileOutputStream fos=new FileOutputStream(file); 当已知条件是输出流终点文件的File实体对象时,就可以通过这种方式

15、来构造一个文件输出流。,FileOutputStream的常用方法,void close()关闭此文件输出流并释放与此流有关的所有系统资源。 void write(byte b)将b.length个字节从指定字节数组写入此文件输出流中。 void write(byte b, int off, int len)将指定字节数组中从偏移量off开始的len个字节写入此文件输出流。 void write(int b)将指定字节写入此文件输出流。,DataInputStream,在程序设计中为了某些需要,我们常常将文本字符转换成一些二进制数据,从而起到基本的数据保护措施,当然不是物理保护。DataInp

16、ut接口定义了在流中传输基本数据类型的方法。DataInputStream用于实现该接口。DataInputStream类的实体对象在输入数据的形式上,比其他输入流有所突破,它已经不仅仅局限于以字节或字节组的形式读数据,而是可以以多种独立于机器的格式进行输入。要想利用该类的这种优越性,首先要通过构造方法创建它的一个实体对象,即:FileInputStream inputStream = new FileInputStream(“test.txt“);DataInputStream dataInputStream = new DataInputStream(inputStream);,DataI

17、nputStream的常用方法,boolean readBoolean()读取一个输入字节,如果该字节不是零,则返回true,如果是零,则返回false。 byte readByte()读取并返回一个输入字节。 char readChar()读取一个输入的 char 并返回该char值。 double readDouble()读取八个输入字节并返回一个double值。 float readFloat()读取四个输入字节并返回一个float值。 void readFully(byte b)从输入流中读取一些字节,并将它们存储到缓冲区数组b中。 void readFully(byte b, int

18、 off, int len)从输入流数组中从读取偏移量off开始的len个字节。 int readInt()读取四个输入字节并返回一个int值。 long readLong()读取八个输入字节并返回一个long值。 short readShort()读取两个输入字节并返回一个short值。,DataOutputStream,DataOutputStream类的实体对象在输出数据的形式上比其他输出流有所突破,它已经不局限于以字节或字节组的形式写数据,而是可以用多种独立于机器的格式进行写输出,首先要通过构造方法创建它的一个实体对象,即:DataOutputStream out = new Data

19、OutputStream(new FileOutputStream(“test1.txt“);,DataOutputStream的常用方法,int size()返回计数器written的当前值,即当前已写入输出流中的字节数。 void write(byte b, int off, int len)将指定字节数组中从偏移量off开始的len个字节写入基础输出流。 void write(int b)将指定字节(参数b的八个低位)写入基础输出流。 void writeBoolean(boolean v)将一个boolean值以1-byte值形式写入基础输出流。 void writeByte(int

20、v)将一个byte值以1-byte值形式写出到基础输出流中。 void writeBytes(String s)将字符串按字节顺序写出到基础输出流中。 void writeChar(int v)将一个char值以2-byte值形式写入基础输出流中,先写入高字节。,DataOutputStream的常用方法,void writeChars(String s)将字符串按字符顺序写入基础输出流。 void writeDouble(double v)使用Double类中的doubleToLongBits方法将double参数转换为一个long 值,然后将该long值以8-byte值形式写入基础输出流中

21、,先写入高字节。 void writeFloat(float v)使用Float类中的floatToIntBits方法将float参数转换为一个int值,然后将该int值以4-byte值形式写入基础输出流中,先写入高字节。 void writeInt(int v)将一个int值以4-byte值形式写入基础输出流中,先写入高字节。 void writeLong(long v)将一个long值以8-byte值形式写入基础输出流中,先写入高字节。 void writeShort(int v)将一个short值以2-byte值形式写入基础输出流中,先写入高字节。 void writeUTF(Strin

22、g str)以与机器无关方式使用UTF-8修改版编码将一个字符串写入基础输出流。,PrintStream,PrintStream类提供了所有的输出方法,在所有的例程中,我们几乎都用到了System.out,并且利用它的print()和println()方法向屏幕输出数据,这个System.out就是PrintStream类的一个输出流对象。它实现了Appendable、Closeable和Flushable接口。PrintStream为其他输出流添加了功能,使它们能够方便地打印各种数据值。在使用PrintStream类的实体对象输出字符串时,有一点是必须注意的,那就是字符串中的每个字符的高八位

23、都会被忽略掉。,PrintStream定义了一些构造函数,下面是其中两个构造函数:PrintStream(OutputStream outputStream) PrintStream(OutputStream outputStream,boolean flushOnNewLine)这里,outputStream为输出流对象。flushOnNewline参数控制每次一个换行字符(n)或一个字节数组被写入,或调用println()时控制输出缓冲区是否自动清空。如果flushOnNewLine为true清空将自动发生,如果为false清空不是自动的。,在J2SE5中新增了一些构造函数,它们提供了一些

24、简单方法将其输出到一个文件的PrintStream中,下面是它的构造函数:PrintStream(File outputFile)throws FileNotFoundException PrintStream(String outputFileName)throws FileNotFoundException,PrintStream的常用方法,void print(char c),打印字符。 void print(int i),打印整数。 void print(long l),打印 long 整数。 void print(Object obj),打印对象。,实践项目,程序的实现要求如下:要求运行时出现窗体,点击“”按钮时出现选择对话框,选择原文件,把选择的路径存放到JTextField里,点击另一个“”按钮时也出现选择对话框,选择存放位置,当点击“复制”时,复制文件如果成功则弹出对话框“复制成功”。,本章总结,IO流的介绍 InputStream OutputStream File FileInputStream FileOutputStream DataInputStream DataOutputStream PrintStream,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报