Java输入输出系统.ppt

上传人:xin****828 文档编号:6732448 上传时间:2020-03-02 格式:PPT 页数:56 大小:576KB
返回 下载 相关 举报
Java输入输出系统.ppt_第1页
第1页 / 共56页
Java输入输出系统.ppt_第2页
第2页 / 共56页
Java输入输出系统.ppt_第3页
第3页 / 共56页
点击查看更多>>
资源描述
7Java输入输出系统 内容 什么是流流的分类字节流 字符流 处理流文件IO操作文件类File标准输入输出对象的序列化 什么是流 Stream Stream Stream Stream Astreamisapathofinformationfromasourcetoadestination doc txt 什么是流 程序设计语言借用水流 电流等概念 将流动的数据称为 流 流可以有各种来源和目的地 如标准输入输出 文件 网络等 也可以有各种不同的用途和处理方法 因而有许多分类 Java关于流的设计思想是 提供各种不同的流类 由程序员进行组合使用 以提供最大的灵活性 流的功能概述 Java提供了不同的流类以实现如下的功能标准输入输出文件输入输出文本文件 二进制文件顺序读写 随机读写java nio包进一步提供了异步数据读写 内存映射文件 文件锁等功能网络数据读写将对象存储为流 从流中读取对象 称为对象的序列化或串行化 Serialization 流的分类 java io包提供了多个流类来实现输入输出功能 按照数据流的方向不同分为输入流和输出流按照处理数据单位的不同分为字节流和字符流按照功能不同可以分为节点流和处理流 或者称过滤流 Filter 流的分类 InputStream OutputStream Reader Writer ByteStreams CharacterStreams 读写以字节为单位进行 读写以字符为单位进行 流的分类 节点流 nodestream 对指定的地方 磁盘文件 内存等 读 写处理流 filterstream 一个处理流使用节点流作为输入或输出 目的地 数据源 InputStream的分类 InputStream是字节输入流 它的几种输入源可以是 1 一个字节数组2 一个文件3 一个管道 InputStream的分类 常用的InputStream流有下列几个 ByteArrayInputStreamFileInputStreamPipedInputStream 把字节数组转换为输入流 从文件中读取数据 连接一个PipedOutputStream InputStream的方法 InputStream的常用方法 publicabstractintread throwsIOExceptionpublicintread byte data throwsIOExceptionpublicintread byte data intoffset intlength throwsIOExceptionpubliclongskip longn throwsIOExceptionpublicintavailable throwsIOExceptionpublicvoidclose throwsIOExceptionpublicvoidmark intreadlimit publicvoidreset throwsIOExceptionpublicbooleanmarkSupported OutputStream的分类 OutputStream是字节输出流 它的几种输出目的地可以是 1 一个字节数组2 一个文件3 一个管道 OutputStream的分类 常用的OutputStream流有下列几个 ByteArrayOutputStreamFileOutputStreamPipedOutputStream OutputStream的方法 OutputStream的常用方法 publicabstractvoidwrite intb throwsIOExceptionpublicvoidwrite byte data throwsIOExceptionpublicvoidwrite byte data intoffset intlength throwsIOExceptionpublicvoidflush throwsIOExceptionpublicvoidclose throwsIOException 字节流示例 TestFileInputStream javaTestFileOutputStream java Reader Writer的分类 Reader Writer的分类类似于InputStream和OutputStream的分类 所以下面我们通过一个表格来做对比 从而对Reader Writer的分类加以介绍 Reader Writer的分类 Reader Writer的分类 其中 InputStreamReader将一个字节流转换为字符流来读入 OutputStreamWriter将一个字符流转换为字节流写出 字符流示例 TestFileReader javaTestFileWriter java 什么是处理流 Filter 处理流 过滤流 是建立在其他流的基础上的 例如 InputSteam System in InputStreamReader BufferedReader 处理流的分类 各种处理流实现不同的过滤 有的可以暂存数据 有的可以统计经过的数据 有的可以转换数据类型 Filter的分类面向字节的Filter面向字符的Filter 处理流 面向字节 FilterInputStream和FilterOutputStream FilterInputStream和FilterOutputStream都是抽象类 分别继承自InputStream和OutputStream根据实现过滤功能的不同 面向字节的Filter也分成不同的类别 下表给出它们的分类 处理流 面向字节 详细分类 处理流 面向字符 FilterReader和FilterWriter 根据实现过滤功能的不同 面向字符的Filter也分成不同的类别 下表给出它们的分类 处理流 面向字符 详细分类 处理流示例 TestBufferedStream1 javaTestBufferedStream2 java 文件I O 文件I O相关类 FileInputStreamFileOutputStreamFileReaderFileWriterDataInputStream DataOutputStreamRandomAccessFile 二进制数据访问 Java利用DataInputStream DataOutputStream来访问二进制数据 例如访问二进制数据文件 DataInputStream DataOutputStream提供读取和写入基本数据类型以及字符串类型数据的能力DataInputStream DataOutputStream的方法 参见API文档 示例 TestDataStream java 文件的随机访问 Java利用RandomAccessFile类来实现随机访问随机访问文件方式可以在指定位置读 写字节内容RandomAccessFile同时具有DataInputStream和DataOutputStream的功能提供方法voidseek longpos 指定位置 以便读写数据示例 TestRandomAccessFile java 更多例子例1 文件I O举例 下面这个程序FileIO java演示文件读写操作 在这个例子中 假设在程序当前执行目录下已经存在一个文件in txt 它的格式如图1 FileIO java程序读取in txt这个文件 然后生成一个新的文件out txt 生成的新文件out txt的格式如图2 例1 文件I O举例 in txt文件格式如图1 firstsecondthirdforthfifthsixthseventh 图1 line1 firstline2 secondline3 thirdline4 forthline5 fifthline6 sixthline7 seventh 图2 out txt文件格式如图2 1 try 2 BufferedReaderin newBufferedReader newFileReader in txt 3 PrintWriterout newPrintWriter 4 newBufferedWriter 5 newFileWriter out txt 6 Strings 7 inti 1 8 while s in readLine null 9 out println line i s 10 i 11 12 in close 13 out close 14 catch FileNotFoundExceptione 15 System err println cannotopenin txt 16 catch IOExceptione 17 System err println I Oexception 18 FileIO java代码 例1 文件I O举例 firstsecondthirdforthfifthsixthseventh line1 firstline2 secondline3 thirdline4 forthline5 fifthline6 sixthline7 seventh 正确运行后 例1 文件I O举例 如果在当前目录下没有in txt文件 则运行返回结果如下 例2 DataOutputStream举例 这个例子使用DataOutputStream过滤流 生成一个文件 Stream 1 importjava io 2 publicclassDataIODemo 3 publicstaticvoidmain String args 4 try DataOutputStreamout newDataOutputStream newFileOutputStream text dat 7 double prices 6 55 9 99 1 8 2 33 0 90 8 int units 12 9 5 6 7 String descs chicken beef lettuce potato tomato 10 for inti 0 i prices length i 11 out writeDouble prices i out writeChar t 12 out writeInt units i out writeChar t 13 out writeChars descs i out writeChar n 14 15 out close 16 catch IOExceptione 17 18 DataIODemo java 例3 DataInputStream举例 这个例子使用DataInputStream过滤流 读取例2生成的文件 Stream 1 importjava io 2 publicclassDataIODemo2 3 publicstaticvoidmain String arg 4 DataInputStreamin null 5 try 6 in newDataInputStream newFileInputStream text dat 7 doubleprice total 0 0 8 intunit charch StringBufferdesc 9 while true 10 price in readDouble in readChar 11 unit in readInt in readChar 12 desc newStringBuffer 20 13 while ch in readChar n 14 desc append ch 15 total price unit 16 System out println youordered desc17 t price unit total 18 19 DataIODemo2 java 接上页20 catch EOFExceptione 21 try 22 in close 23 catch IOExceptione1 24 25 catch IOExceptione 26 27 DataIODemo2 java File类 java io File类提供文件与目录的各种有用信息File类并不打开文件 也不处理文件内容例 Filef1 newFile etc passwd Filef2 newFile etc passwd File类的对象经常作为文件流类构造方法的参数 File类 通过方法exists 判断文件或路径是否存在创建了类File的实例对象 并不等价于在硬盘上创建该文件FileOutputStream在删除文件内容时 没有警告信息File的实例对象可以判断出文件是否存在 提供警告信息 或改变打开文件方式 路径或文件名中的分隔符 分隔符分隔路径中的目录名 子目录名以及文件名 Unix 或 Windows 这两种分隔符Java均可以识别在字符串常量中用 或 最正规的方法是使用File separator静态字段 File类示例 TestFile java 格式化文本输出 格式化文本输出类 PrintStream和PrintWriter前者将所有字符按照平台默认的字符编码转换为字节 后者直接写入字符这两个类提供了print println printf 等常用方法以方便格式化输出这两个类的一个重要特点是输出时不抛出IOException示例 TestPrintStream1 java TestPrintStream2 java 标准输入输出 标准输入默认是指从键盘输入 Java用System in来指向系统的标准输入System in的类型是InputStream 其重要的方法是read 现在更方便的做法是使用Scanner类由于历史的原因 System out的类型是PrintStream 而不是PrintWriter 其重要方法有print println write flush 等 如何读取文本文件中的数据 如果不必按行分析 可直接使用Scanner如果需要按行分析数据 且每行的数据不一样多 可利用BufferedReader套在FileReader上 利用前者的readLine 读取一行 然后利用所读取的一行字符串构造Scanner对象进行处理 或者用String类的split 方法分解这一行 然后用各个基本数据类型封装类的ParseXxx 方法进行转换也可以使用Scanner的nextLine 方法 读取一行 然后对这一行作上述的分析 小专题 实验 假设文本文件abc1 txt中有一些数据 分为若干行 每行有一些个数不等的整数 用空格隔开 写一个程序读入该文件中的数据 对每行数据从小到大进行排序 然后按行输出到文本文件abc2 txt中 输出的文件中数据的格式与输入文件相同 123577451234567912118901 11234567890 45 1543216713345678999811111111111 文件IO小结 二进制数据输入输出 用DataInputStream DataOutputStream 二进制 随机文件读写 用RandomAccessFile文本数据格式化输出 用PrintWriter文本数据输入 可以用Scanner类 或者用BufferedReader读入一行 然后用String类的split 方法分解这一行 然后用各个基本数据类型封装类的ParseXxx 方法进行转换 综合示例 TextFileTest javaRandomFileTest java 对象序列化 Java提供一种机制 能够将内存中存在的对象转化为流 以便保存到文件中 或者通过网络进行传输等等 这种机制称为序列化 Java利用ObjectInputStream类和ObjectOutputStream类创建对象输入流和对象输出流 对象输出流使用writeObject Objectobj 方法将一个对象obj写入输出流送往目的地 对象输入流使用readObject 从源中读取一个对象到程序中 ObjectInputStream类和ObjectOutputStream类的构造方法分别是 ObjectInputStream InputStreamin ObjectOutputStream OutputStreamout Serializable接口 一个类的对象若要进行序列化 必须实现Serializable接口 Serializable接口没有任何方法 是一个标记接口 JDK5 0以后 要求实现了Serializable接口的类提供一个serialVersionUID静态字段 否则会给出一个编译警告 序列化和反序列化的过程由Java实现 使用者可以不必了解其细节 简单示例 TestObjectIO java transient关键字和Externalizable接口 transient 瞬时的 短暂的 用来修饰成员变量 控制该成员变量不参与序列化 Externalizable接口是Serializable的子接口 凡是实现了该接口的类 可以自行定义如何实现序列化和反序列化的过程 而不是使用Java的实现 复杂示例 ObjectStreamTest java Zip文件流 ZipTest java
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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