轻松学Java之Java的输入输出流.pptx
《轻松学Java之Java的输入输出流.pptx》由会员分享,可在线阅读,更多相关《轻松学Java之Java的输入输出流.pptx(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第15章Java的输入输出流对于任何编程语言,处理数据的输入、输出操作都占有极其重要的地位。Java语言以流的形式进行数据的输入、输出处理。这一章我们将为大家详细讲述输入输出流的概念、文件的概念以及字节的输入输出流和字符的输入输出流。15.1 输入输出流概述数据流是形象的概念,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的。就好像管道里面可以流动水,也可以流动石油一样,当程序需要读取数据的时候,就会开启一个通向数据源的管道,程序就可以从中提取数据。关于数据流,其输入输出的过程可以用图15.1来表示。15.1 输入输出流概述程序从数据源(包括各种输入设备,如键
2、盘、磁盘、文件等)中读取数据称之为输入;程序将数据写入目标设备(包括各种输出设备,如显示器、磁盘、文件等)称之为输出。我们也可以用示意图15.2来表示。15.1 输入输出流概述数据的输入/输出属于IO部分,Java把处理输入/输出相关的类放在java.io包中。而且java.io不属于java.lang,所以必须使用import将其导入进来。我们可以把常用的java.io包架构图用图15.3来表示。15.1 输入输出流概述Java中的数据流分为2种,一种是字节流,另一种是字符流。这两种流主要由4个抽象类来表示:InputStream、OutputStream、Reader、Writer,输入输
3、出各两种。其中InputStream和OutputStream表示字节流,Reader和Writer表示字符流,其他流均是继承这4个抽象类而来的。下面我们就来具体的学习这些流的用法。15.2 文件输入、输出操作经常处理的设备之一是文件。Java语言提供了File类和RandomAccessFile类来对文件进行处理。File类用于管理文件系统中的文件或目录,RandomAccessFile类提供了随机读写文件的功能。下面对这些内容进行详细介绍。15.2.1 File类File类是一个可以对文件本身的属性进行操作的类。例如,可以使用File类中的方法获取文件或者目录的信息,还可以对文件进行创建、
4、修改和删除等操作。File类除了对文件进行操作外,Java允许使用File类将目录当作文件进行处理。File类构造方法如图15.4所示。15.2.1 File类而File类定义的一些主要方法我们可以用表15.1来表示。下面我们再来讲一些对文件的具体操作,以更好的加深对File类的理解。方法方法方法描述方法描述boolean canRead()判断文件是否可读,可读则返回真,否则返回假boolean canWrite()判断文件是否可写,可写则返回真,否则返回假boolean exists()判断文件是否是指定路径中的文件或目录,是则返回真,否则返回假boolean isFile()判断File
5、的对象是否是文件,是则返回真,否则返回假boolean isDirectory()判断File的对象是否是目录,是则返回真,否则返回假boolean isAbsolutePath()判断File的对象是否是一个文件或目录的绝对路径,是则返回真,否则返回假String getAbsolutePath()返回一个包含文件或目录的绝对路径的字符串String getName()返回一个包含文件或目录名的字符串String getPath()返回一个包含文件或目录路径的字符串long length()返回文件字节长度,若为目录则返回015.2.2 文件的创建、修改与删除File类中定义了一些方法,允许
6、对文件和目录进行创建、修改与删除操作。其有关对文件和目录进行创建、修改与删除操作的方法,我们总结在了表15.2中。创建文件使用File.createNewFile()方法。如果该文件创建成功,返回true。如果该文件已经存在,则创建失败,返回false。如果有错误发生,比如路径找不到等,则会抛出IOException异常。15.2.3 获取文件属性File类中获取文件本身信息包括获取文件的名字、文件的长度、文件的路径、判断文件是否可读或者可写、是否存在等。获取文件本身信息的方法以及方法描述如表15.3所示。File类只能对文件进行一些简单操作,比如取属性,创建、删除和更名等,并不能支持文件内容
7、的读写。要想对文件进行读写操作,就必须通过输入输出流来完成。方法方法方法描述方法描述public String getAbsolutePath()获取文件的绝对路径并以字符串形式返回public String getName()获取文件的名字并以字符串形式返回public String getParent()获取文件父目录名字。如果没有指明父目录返回nullpublic String getPath()获取文件的路径并以字符串形式返回public int hashCode()返回路径名的哈希码public long length()获取文件的长度(以字节为单位)public long last
8、Modified()获取文件最近一次修改时间(单位毫秒)15.2.4RandomAccessFile类除了File类以外,Java还提供了用来专门处理文件的类,并称之为随机访问文件RandomAccessFile类。该类提供了更加完善的、对文件输入输出操作的功能。RandomAccessFile类可以在任意位置进行读写操作,处理文件更加灵活。RandomAccessFile类的构造方法如图15.10所示。15.2.4RandomAccessFile类图中mode参数指定用以打开文件的访问模式。mode的具体值及含义如表15.3所示。RandomAccessFile类中的一些主要方法如表15.3
9、所示。值含含义r以只读方式打开。调用该对象的任何write方法都会导致抛出IOException异常rw打开以便读取和写入,若该文件不存在则尝试创建rws打开以便读取和写入,与rw不同的是还要求对文件的内容的每个更新都同步写入到基础存储设备中去rwd打开以便读取和写入,与rw不同的是还要求对文件内容的每个更新都同步写入到基础存储设备中去方法方法方法描述方法描述public void seek(long pos)以长度为pos字节为指定位置,在此位置设置文件指针public int skipBytes(int n)跳过输入的n个字节的数据并返回跳过的实际字节数。如果n为负数,方法失效public
10、 long getFilePointer()返回此文件的当前位置与到文件开头位置的偏移量。该偏移量是long类型的值public void setLength(long newLength)设置文件的长度public long length()返回该文件的长度15.3 字节输入流字节输入流用于以二进制的形式从数据源中读取数据。InputStream类是字节输入流的基类,该类包括FileInputStream、FilterInputStream、BufferedInputStream、DataInputStream等子类。具体内容如图15.12所示。15.3.1 字节输入流InputStream
11、InputStream类是所有字节输入流类的父类。InputStream类中拥有很多字节输入流都需要的方法,可以通过使用InputStream类提供的方法实现从输入流读取字节或者字节数组数据的功能。InputStream类的方法及功能说明如表15.4所示。方法方法方法方法说明明public abstract int read()从输入流读取下一个数据字节。如果因已到达流末尾而没有可用的字节,则返回值-1public int available()以不受阻塞地从输入流中读取字节。该方法返回读取字节数public void mark(int readlimit)在此输入流中标记当前的位置publi
12、c boolean markSupported()判断输入流是否支持mark()和reset()方法。如果支持则返回true。public int read(byte b)从输入流中读取一定数量的字节并将其存储在缓冲区数组b中。该方法返回读入缓冲区的总字节数public int read(byte b,int off,int len)从off处开始读取流中len长度的字节并将其存储在数组b中。返回读取到的字节数public void reset()将此流重新定位到输入流最后调用mark方法时的位置public long skip(long n)跳过此输入流中的n个字节。参数n表示要跳过的字节数
13、。该方法返回实际跳过的字节数public void close()关闭输入流15.3.2 字节文件输入流FileInputStreamFileInputStream类可以顺序的读取文本文件中的字节数据,它是InputStream的子类。FileInputStream类中的构造方法如图15.13所示。15.3.2 字节文件输入流FileInputStreamFileInputStream类中的方法及其描述如表15.5所示。方法方法方法描述方法描述int available()返回可以从该文件输入流中读取的字节数void close()关闭文件输入流,同时释放系统资源protected void
14、finalize()确认文件输入流不在被引用的状态,并可以调用close方法java.io.channels.FileChannel getChannel()返回与该文件输入流有关的FileChannel对象FileDescriptor getFD()返回连接到文件系统(正被该FileInputStream使用)中实际文件的FileDescriptor对象int read()从该输入流中读取一个数据字节,并以int类型返回int read(byte b)读取输入流中b.length个字节的数据,并存入字节数组b中int read(byte b,int off,int len)读取输入流中从偏移
15、量off开始的len个字节的数据,并存入字节数组b中long skip(long n)跳过输入流中的数据,同时丢弃n个字节的数据15.3.3 输入流过滤器FilterInputStream过滤流提供了在读写数据的同时可以对数据进行处理的功能,同时还提供了同步机制,使得某一时刻只有一个线程可以访问一个数据流,以防止多个线程同时对一个数据流进行操作所带来的意想不到的结果。为了使用一个过滤流,必须首先把过滤流连接到某个输入输出流上,通常通过在构造方法的参数中指定所要连接的输入输出流来实现。输入流过滤器FilterInputStream的构造方法如图15.15所示。15.3.3 输入流过滤器Filte
16、rInputStreamFilterInputStream定义的方法及方法描述如表15.6所示。方法方法方法描述方法描述public int available()该方法用于返回可以该输入流中读取的字节数public void close()该方法用于关闭输入流,并释放系统资源public void mark(int readlimit)该方法用于标记输入流中的当前位置public boolean markSupported()该方法用于测试该输入流是否支持mark和reset方法public int read()该方法用于从输入流中读取一个数据字节public int read(byte b
17、)该方法用于从输入流中读取byte.length个字节的数据并存入到一个字节数组b中public int read(byte b,int off,int len)该方法用于从输入流中读取从偏移量off开始len个字节的数据并存入到一个字节数组b中public void reset()该方法用于将流重新定位到对该输入流最后一次调用mark方法时的位置public long skip(long n)该方法用于跳过输入流中n个字节的数据,并丢弃15.3.4 字节缓冲区输入流BufferedInputStreamBufferedInputStream类是InputStream类的间接子类,其直接父类是
18、FilterInputStream。该类采用缓冲区机制进行字节流输入。BufferedInputStream类的构造方法如图15.16所示。15.3.4 字节缓冲区输入流BufferedInputStreamBufferedInputStream定义的方法及方法描述如表15.7所示。以缓冲区的机制进行流的输入、输出具有更高的执行效率。而且,在字节流方式下,通过调用mark()和reset()方法,可以从指定位置操作,而不仅仅是只能按顺序操作。方法方法方法描述方法描述public int available()该方法用于返回还可以从输入流中读取的字节数public void close()该方法
19、用于关闭输入流,并释放系统资源public void mark(int readlimit)该方法用于标记输入流中的当前位置public boolean markSupported()该方法用于测试输入流是否支持mark和reset方法public int read()该方法用于从输入流中读取下一个数据字节public int read(byte b,int off,int len)读取字节输入流中的从偏移量off开始的len个字节并存入到指定的byte数组b中public void reset()将此流重新定位到最后一次调用mark方法时所处的位置public long skip(long
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 轻松 Java 输入输出
限制150内