Java教材课件输入输出流编程.ppt

上传人:max****ui 文档编号:6360430 上传时间:2020-02-23 格式:PPT 页数:48 大小:221.50KB
返回 下载 相关 举报
Java教材课件输入输出流编程.ppt_第1页
第1页 / 共48页
Java教材课件输入输出流编程.ppt_第2页
第2页 / 共48页
Java教材课件输入输出流编程.ppt_第3页
第3页 / 共48页
点击查看更多>>
资源描述
第13章输入输出流编程 教学目的要求1 理解java语言中输入 输出流的处理方法 2 掌握文件 字节流和字符流的处理方法 正确使用对象串行化的方法 13 1File类应用举例 文件操作是程序设计必不可少的部分 计算机把需要长期保存的数据以文件的形式存放在各种外部存储设备上 在需要输入数据时 从文件读出数据 而需要输出数据时 把数据写入文件 13 1 1File类用来获取文件或目录的信息 Java把目录看成特殊的文件 作为文件名的列表处理 File类提供方法用以访问诸如路径 名称 大小 日期 读写属性等文件或目录的信息 也可以创建 删除文件 改变文件名 创建目录等 File类的直接父类是Object 1 File类的构造方法 File类中常用的构造方法如下 publicFile Stringpathname 其中的pathname是路径名字符串 该构造方法通过将给定路径名字符串转换成抽象路径名来创建一个新File实例 若给定字符串pathname是空字符串 则结果是空的抽象路径名 publicFile Fileparent Stringchild 其中的parent是父抽象路径名 child是子路径名字符串 该构造方法根据parent抽象路径名和child路径名字符串创建一个新File实例 publicFile Stringparent Stringchild 其中参数parent是父路径名字符串 child是子路径名字符串 该构造方法根据parent路径名字符串和child路径名字符串创建一个新File实例 如果parent为null 则创建一个新的File实例 这与调用单参数File方法 以给定child路径名字符串作为参数的效果一样 否则 parent路径名字符串用于表示目录 而child路径名字符串用于表示目录或文件 如果child路径名字符串是绝对路径名 则用与系统有关的方式将它转换成一个相对路径名 如果parent是空字符串 则新的File实例是通过将child转换成抽象路径名并根据与系统有关的默认目录来分析结果而创建的 否则 将每个路径名字符串转换成一个抽象路径名 并根据父抽象路径名分析子抽象路径名 2 File类中的常用成员方法 File类中有许多成员方法 常用的成员方法及其功能概要描述见表13 1 限于篇幅的原因 读者在使用时可以参考JavaAPI中对这些成员方法用法详细的说明 publicbooleancanRead 测试应用程序能否读此对象指定的文件publicbooleancanWrite 测试应用程序能否写此对象指定的文件publicbooleanexists 测试此抽象路径名表示的文件或目录是否存publicbooleanisFile 测试此抽象路径名表示的文件是否是一个标准文件publicStringgetAbsolutePath 返回抽象路径名的绝对路径名字符串publicStringgetPath 将此抽象路径名转换为一个路径名字符串publicStringgetParent 获取此对象指定的文件的父目录publicbooleanmkdir 根据当前对象生成一个由该对象指定的路径publicStringlist 列出当前目录下的文件publiclonglength 返回由此抽象路径名表示的文件的长度publicStringgetName 获取此对象指定的文件的文件名publicbooleandelete 删除此抽象路径名表示的文件或目录publiclonglastModified 获取此对象指定文件的最后修改时间 以长整型值表示 表13 1File类中的常用成员方法方法和描述 3 类变量 静态数据成员 File类中的静态数据成员及其概要描述见表13 2 表13 2File类中的静态数据成员 测试给定平台上的文件系统的文件的路径分隔字符等importjava io classLi13 01 publicstaticvoidmain String args System out println File pathSeparator System out println File pathSeparatorChar System out println File separator System out println File separator n n 例13 1 测试静态数据成员属性 用File类的构造方法构造文件对象并测试该类的成员方法importjava io publicclassLi13 02 publicstaticvoidmain String args Filefile newFile d jdk15 FileMethod java System out println 可读 file canRead System out println 可写 file canWrite System out println 文件存在 file exists System out println 是文件 file isFile System out println 是目录 file isDirectory System out println 文件长度 file length System out println 文件最后修改日期 file lastModified System out println 文件名 file getName System out println 文件存放路径 file getPath System out println 文件存放路径的父目录 file getParent 例13 2 构造File对象 测试文件的属性等有关信息应用举例 注意 本例程序在运行前 读者应确保d jdk15文件夹中有FileMethod java 当然 文件夹的名字也可由读者命名 但是 要注意同时更改程序中的相应文件夹名称 例13 3 构造一个目录File对象 如果该指定的目录不存则创建该目录 同时统计并显示该目录下文件和子目录的个数以及该目录下文件的总长度 importjava io publicclassLi13 03 publicstaticvoidmain String args throwsException Filefile newFile d jdk15006 lib if file exists file mkdir System out println file getPath System out println file getParent 变量tsize记录文件的总长度 变量fc dc分别记录给定目录下的文件数和子目录数inttsize 0 fc 0 dc 0 Filefiles newFile d jdk15006 listFiles for inti 0 i files length i if files i isFile fc elsedc tsize files i length System out println 文件数 fc t目录数 dc t文件总长度 tsize 13 1 2文件的处理 文件输入 输出流类FileInputStream和FileOutputStream提供了对文件顺序读 写的方法 文件输入流类FileInputStream用于读取文件中的字节数据 其直接父类为InputStream 文件输出流类FileOutputStream用于向文件写入的字节数据 其直接父类为OutputStream 1 FileInputStream类的构造方法 publicFileInputStream Stringname 其中的name可以包含路径名和文件名 该构造方法通过打开一个到实际文件的连接来创建一个FileInputStream 该文件通过文件系统中的路径名name指定 publicFileInputStream Filefile 其中的file是File类的对象 该构造方法通过打开一个到实际文件的连接来创建一个FileInputStream 该文件通过文件系统中的File对象file指定 publicFileInputStream FileDescriptorfd 该构造方法通过使用文件描述符fdObj创建一个FileInputStream 该文件描述符表示到文件系统中某个实际文件的现有连接 2 FileOutputStream类的构造方法 publicFileOutputStream Stringname 该构造方法使用指定的字符串name创建一个向具有指定名称的文件中写入数据的输出文件流 publicFileOutStream Filefile 该构造方法使用指定的文件file创建一个向指定File对象表示的文件中写入数据的文件输出流 publicFileOutputStream Filefile booleanappend 创建一个向指定File对象表示的文件中写入数据的文件输出流 如果第二个参数为true 则将字节写入文件末尾处 而不是写入文件开始处 3 FileInputStream类的成员方法 FileInputStream类中的成员方法被调用时会产生IOException异常 常用成员方法见表13 3中的描述 表13 3FileInputStream类中的常用成员方法 4 FileOutputStream类的成员方法 FileOutputStream类中的成员方法被调用时会产生IOException异常 常用成员方法见表13 4中的描述 表13 4FileOutputStream类中的常用成员方法 例13 4 读文件和写文件举例 假设在D 有文件Li13 04 java 编程实现把该文件原样复制后存放在C 文件名为Li13 04 FileCopy txt importjava io classLi13 04 publicstaticvoidmain Stringargs intlength bytebuf newbyte 1024 try FileInputStreamin FileOutputStreamout in newFileInputStream d Li13 04 java 运行前要保证d 有Li13 04 java这个文件out newFileOutputStream c Li13 04 FileCopy txt System out println 文件拷贝输出成功 while length in read buf 0 1024 1 out write buf 0 length catch IOExceptione System out println Error e System exit 1 13 2Reader与Writer类应用举例 从JDK1 1开始 java io包中加入了专门用于处理字符流输入 输出的类 它们的基类分别是抽象类Reader及抽象类Writer 13 2 1Reader和Writer Java提供了一系列用于处理字符流的接口和类 如Reader和Writer类 通过它们派生的子类对象来处理字符流 Reader类和Writer类提供的方法分别见表13 5和表13 6中的描述 注意它们被调用时也会产生异常 表13 5Reader类中的常用方法 表13 6Writer类中的常用方法 13 2 2InputStreamReader和OutputStreamWriter InputStreamReader从输入流中读取字节数据 并将其转换为特定的平台上的字符数据 其构造方法为 publicInputStreamReader InputStreamin 其中参数in是InputStream的对象 该构造方法可以创建一个使用默认字符集的InputStreamReader publicInputStreamReader InputStreamin Stringenc 创建使用指定字符集的InputStreamReader InputStreamReader的成员方法描述见表13 7 注意这些方法在被调用时也会产生异常 表13 7InputStreamReader类中的常用方法 OutputStreamWriter将特定平台的字符数据转换为字节数据 写入到输出流 其构造方法为 publicOutputStreamWriter OutputStreamout 其中参数out是OutputStream对象 该构造方法用来创建使用默认字符编码的OutputStreamWriter publicOutputStreamWriter OutputStreamout Stringenc 其中参数out是OutputStream对象 参数enc是字符串名称 该构造方法创建使用指定字符集的OutputStreamWriter OutputStreamWriter的成员方法描述见表13 8 注意这些方法在被调用时也会产生异常 表13 8OutputStreamWriter类中的常用方法 例13 5 读字符流文件 从给定的输入文件中读取字符流并在标准终端显示 importjava io publicclassLi13 05 publicstaticvoidmain Stringargs throwsIOException intc FileInputStreamis InputStreamReaderir is newFileInputStream CharInput java ir newInputStreamReader is System out println 程序开始 while c ir read 1 System out print char c System out println 程序结束 例13 6 写字符流文件 从标准终端上输入字符并写入字符输出文件 importjava io publicclassLi13 06 publicstaticvoidmain Stringargs throwsIOException intc InputStreamReaderir newInputStreamReader System in FileOutputStreamos newFileOutputStream c hhh txt OutputStreamWriteror newOutputStreamWriter os System out print 请输入字符 输入x结束 运行结束后请查看C hhh txt while c ir read x or write char c or close os close 例13 7 读一行字符 从文件中按行读出文件中的各个字符并在标准终端上输出 文件名由命令行参数给出 importjava io publicclassLi13 07 publicstaticvoidmain String args throwsIOException InputStreamis newFileInputStream args 0 InputStreamReaderin newInputStreamReader is BufferedReaderbr newBufferedReader in Stringstr intc 0 while str br readLine null 每次从文件中读一行字符System out println str 13 3InputStream与OutputStream类应用举例 java io包中包含的两个基本的字节流类InputStream与OutputStream是所有字节流的基类 它们提供的方法通常在子类中被覆盖 以适合于特定的字节流的需要 提供最基本的输入 输出功能 13 3 1InputStream类 Inputstream抽象类中定义了所有输入字节流都需要的方法 完成最基本的从输入流读入数据的功能 publicintread publicintread byteb publicintread byteb intoff intlen publicintavailable publiclongskip longn publicvoidmark publicvoidreset publicbooleanmarksupporeed publicvoidclose 具体使用时 从InputStream派生的子类中创建对象 完成不同情况下的输入操作 InputStream的常用子类如下 ByteArrayInputStream 把内存中的一个缓冲区作为InputStream使用 StringBufferInputStream 把一个String对象作为InputStream FileInputStream 把一个文件作为InputStream 实现对文件的读取操作 PipedInputStream 实现了pipe的概念 主要在线程中使用 SequenceInputStream 把多个InputStream合并为一个InputStream 13 3 2OutputStream类 OutputStream抽象类中定义了所有字节输出流都需要的方法 完成向输出流写入数据的功能 publicvoidwrite intb publicvoidwrite byteb publicvoidwrite byteb intoff intlen publicvoidflush publicvoidclose 具体使用时 从OutputStream派生的子类中创建对象 完成不同情况下的输出操作 OutputStream的常用子类如下 ByteArrayOutputStream 把信息存入内存中的一个缓冲区中 FileOutputStream 把信息存入文件中 PipedOutputStream 实现了pipe的概念 主要在线程中使用 SequenceOutputStream 把多个OutputStream合并为一个OutputStream 例13 8 最基本的输入输出方法应用举例 键盘读入单个字节字符 多个字节字符并在屏幕输出显示 importjava io publicclassLi13 08 publicstaticvoidmain String args try InputStreamis System in OutputStreamos System out inti is read 读入一个字节字符os write char i 输出该字节字符os write n byteb newbyte 8 intc is read b 读入的字节字符存入字节数组b中for i 0 i b length i os write b i 输出数组b中的字节字符os write n c is read b 3 5 读入最多5个字节字符 存入数组b偏移3处for i 0 i b length i os write b i 输出数组b中的字节字符os write n is close os close catch IOExceptione e printStackTrace 例13 9 管道流类PipedInputStream和PipedOutputStream应用举例 importjava io 管道流的使用publicclassLi13 09 publicstaticvoidmain Stringargs throwsException PipedInputStreampis PipedOutputStreampos byteb pis newPipedInputStream pos newPipedOutputStream pis 流pos的输出作为流pis的输入pos write a 流pos的输出pos write b 流pos的输出b byte pis read 流pis的输入System out println b b byte pis read 流pis的输入System out println b 13 4数据流应用举例 DataInputStream和DataOutputStream分别是过滤流FilterInputStream和FilterOutputStream的子类 它们不仅能读 写字节流 而且能读 写Java语言的基本数据类型 这些基本数据类型在流中的表示与在内存中一样 不需转换 DataInputStream实现了接口DataInput中定义的与平台无关的带格式的读操作 从而实现了不同数据类型的读操作 其构造方法为 DataInputStream InputStreamin publicintread byte b publicintread byte b intoff intlen publicbooleanreadBoolean publicbytereadByte publiccharreadChar publicdoublereadDouble publicfloatreadFloat publicvoidreadFully byte b publicvoidreadFully byte b intoff intlen publicintreadInt publicStringreadLine publiclongreadLong publicshortreadShort publicintreadUnsignedByte publicintreadUnsignedShort publicStringreadUTF publicstaticStringreadUTF DataInputin publicintskipBytes intn DataInputStream类的成员方法如下 DataOutputStream实现了接口DataOutput中定义了与平台无关的带格式的写操作 从而实现了对不同数据类型的写操作 其构造方法为 DataOutputStream OutputStreamout publicvoidflush publicintsize publicvoidwrite byte b intoff intlen publicvoidwrite intb publicvoidwriteBoolean booleanv publicvoidwriteByte intv publicvoidwriteBytes Strings publicvoidwriteChar intv publicvoidwriteChars Strings publicvoidwriteDouble doublev publicvoidwriteFloat floatv publicvoidwriteInt intv publicvoidwriteLong longv publicvoidwriteShort intv publicvoidwriteUTF Stringstr DataOutputStream类的成员方法如下 例13 10 数据流的使用 可以从数据输入流中按各种数据类型读数据 也可以往数据输出流中按各种数据类型写数据 importjava io 数据流的使用publicclassLi13 10 publicstaticvoidmain Stringarg throwsException Stringf c stu dat Students newStudent 1000 95 true FileOutputStreamfos newFileOutputStream f DataOutputStreamout newDataOutputStream fos 构造数据输入流对象out writeInt s id 往数据输出流中写int型数据 out writeDouble s score 往数据输出流中double型写数据 out writeBoolean s pass 往数据输出流写boolean型数据 out close FileInputStreamfis newFileInputStream f DataInputStreamin newDataInputStream fis inti in readInt 从数据输入流中读int型数据doubled in readDouble 从数据输入流中读double型数据booleanb in readBoolean 从数据输入流中读boolean型数据System out println i n d n b in close classStudent intid doublescore booleanpass Student inti doubled booleanb id i score d pass b 13 5对象流应用举例 类ObjectInputStream中的readObject 方法用于读取一个对象 而类ObjectOutputStream中的writeObject 方法用于将对象保存在输出流中 例13 11 对象流的使用 Employee类的对象有如下id name salary成员 每个对象可以作为一个整体存入一个输出流中 可以从一个输入流中作为一个整体读出 创建的Employee类要实现Serializable接口 importjava io 对象流的使用 publicclassLi13 11implementsSerializable 必须实现Serializable接口intid Stringname doublesalary Li13 11 inti Stringn doubles id i name n salary s publicstaticvoidmain Stringarg throwsException Stringf c emp 产生名为emp的文件 并放在c Li13 11e1 newLi13 11 1000 Wang 3456 50 FileOutputStreamfos newFileOutputStream f ObjectOutputStreamout newObjectOutputStream fos 创建输出对象流out writeObject e1 写入对象out close FileInputStreamfis newFileInputStream f ObjectInputStreamin newObjectInputStream fis 创建输入对象流Li13 11e2 Li13 11 in readObject 读取对象System out println Id e2 id System out println Name e2 name System out println Salary e2 salary in close 本章小结 本章介绍了文件处理 字符流的处理 字节流的处理 过滤流的处理 对象的串行化及其常用的流 Java通过系统流类实现输入输出的功能 使用Java提供的系统流类可以创建文件 读文件 写文件 本次课小结与下次课内容预告 今天我们学习了哪些主要内容 课后认真复习总结 1 第十四章
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!