第08章 输入输出处理.ppt_第1页
第08章 输入输出处理.ppt_第2页
第08章 输入输出处理.ppt_第3页
第08章 输入输出处理.ppt_第4页
第08章 输入输出处理.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章输入输出处理 主要内容 8 1I O流的概念和划分8 2文件的操作8 3字节流处理8 4字符流处理8 5串行化 8 1I O流的概念和划分 I O流 Input Output 在Java中将信息的输入与输出过程抽象为I O流输入是指数据流入程序输出是指数据从程序流出一个流就是一个从源流向目的地的数据序列IO流类一旦被创建就会自动打开通过调用close方法 可以显式关闭任何一个流 如果流对象不再被引用 Java的垃圾回收机制也会隐式地关闭它 8 1I O流的概念和划分 Java程序通过流来完成输入 输出 流通过Java的输入 输出系统与物理设备链接 8 1I O流的概念和划分 按照流的方向划分 Java流的划分 按照流的内容划分字节流类处理字节的输入和输出提供了方便的方法字符流类为字符的输入和输出处理提供了方便读写数据的单位不同 IO流介绍 IO的体系 所具备的基本功能就有两个 读和写 1 字节流InputStream 读 OutputStream 写 2 字符流 Reader 读 Writer 写 IO流对象继承关系 字节流输入和输出类 其他常用与流有关的类 主要内容 8 1I O流的概念和划分8 2文件的操作8 3字节流处理8 4字符流处理8 5串行化 8 2文件的操作 File类 对文件的引用和表示File类提供了一些方法来操纵文件和获取文件的信息 对于目录 Java把它当作一种特殊类型的文件 即文件名单列表 通过File类的方法 可以得到文件或者目录的描述信息 包括名称 所在路径 读写性 长度等 还可以创建目录 创建文件 改变文件名 删除文件 列出目录中的文件等 一 File对象的构造 File Stringpath File Stringdir Stringfilename File Filedir Stringfilename File URIuri Filef1 newFile D Java Filef2 newFile D Java test txt Filef3 newFile f1 test txt Filef4 newFile file D Java test txt 二 File类的方法 在java中文件和目录都是用File对象来表示的 先创建一个File对象 并指定文件名或目录名 如果指定的文件名或目录名不存在 这要用以下几个创建方法创建文件或目录 如下 booleancreateNewFile 创建文件 如果被创建的文件已经存在 则不创建 booleanmkdir 创建文件夹 booleanmkdirs 创建多级文件夹 二 File类的方法 booleancanRead 测试文件是否可读booleandelete 删除文件BoleansetReadOnly 标记此抽象路径名指定的文件或目录 以便只可对其进行读操作 FilegetAbsoluteFile 返回绝对文件名booleanisDirectory 是否是目录longlastModified 上次修改时间 从1970年1月1号开始的标准时间 UTC 的毫秒数具体FileDemo java见例8 4程序 三 目录的操作 目录是一个包含其他文件和路径列表的File类 当你创建一个File对象且它是目录时 isDirectory 方法返回ture publicbooleanmkdir 创建此抽象路径名指定的目录 String list 文件列表在一个String对象数组中返回 File listFiles 文件列表在一个File对象的数组中返回 目录操作示例 三 目录的操作 我们有时需要列出目录下指定类型的文件 比如 java class等扩展名的文件 可以使用File类的下述三个方法 列出指定类型的文件 String list FilenameFilterFFObj File listFiles FilenameFilterFFObj File listFiles FileFilterFObj 三 目录的操作 importjava io publicclassFileList2 publicstaticvoidmain String args Filedir newFile Filefiles dir listFiles System out println dir for inti 0 i t files i getName 主要内容 8 1I O流的概念和划分8 2文件的操作8 3字节流处理8 4字符流处理8 5串行化 8 3字节流处理 标准输入 出流InputStream OutputStream文件字节流过滤流随机存取文件其它字节流 8 3 1标准输入 出流 Java通过系统类System实现标准输入输出的功能 定义了3个流变量 in out和err staticPrintStreamerrstaticInputStreaminstaticPrintStreamout通过read 方法从键盘接受数据 通过print和println 方法输出 通过键盘简单输入输出 importjava io classSystemInDemo publicstaticvoidmain Stringargs throwsIOException bytedata newbyte 25 声明一个字节数组System out println Entersomecharacters System in read data 从键盘读取字符并存入数组dataSystem out print Youentered for inti 0 i data length i System out print char data i 依次输出数组data中的字符 类Scanner与标准输入结合 JDK5 0新增类java util Scanner Scanner使用分隔符将输入分解为token 默认情况下该分隔符为空白 然后使用不同的next方法将得到的token转换为不同类型的值 importjava util Scanner publicclassTestScanner publicstaticvoidmain String args Scannercin newScanner System in cin useDelimiter 指定分隔符inta cin nextInt intb cin nextInt System out println a b 8 3 2InputStream OutputStream 8 3 2抽象类InputStream intread intread byteb intread byteb intoffset intlen intavailable voidclose voidmark intreadlimit 标记输入流的当前位置booleanmarkSupported voidreset longskip longn 抽象类OutputStream voidclose voidflush voidwrite intb voidwrite byteb voidwrite byteb intoffset intlen 8 3 3文件字节流 InputStream和OutputStream都是抽象类 不能实例化 因此在实际应用中都使用的是他们的子类 FileInputStream和FileOutputStream用于进行文件的输入输出处理 其数据源和接收器都是文件 FileInputStream FileInputStream用于顺序访问本地文件 对文件进行操作 不支持mark方法和reset方法 它的两个常用的构造函数如下 FileInputStream Stringfilepath FileInputStream FilefileObj FileInputStreamf1 newFileInputStream Test java Filef newFile Test java FileInputStreamf2 newFileInputStream f 输入流打开后 就可以通过read 方法读取信息 最后关闭该输入流f1 close FileOutputStream FileOutputStream用于向一个文本文件写数据 它从超类中继承write close 等方法 它常用的构造函数如下 FileOutputStream StringfilePath FileOutputStream FilefileObj FileOutputStream StringfilePath booleanappend FileOutputStream FilefileObj booleanappend 它们可以引发IOException或SecurityException异常 FileOutputStream FileOutputStream重写了抽象类OutputStream的写数据的方法 publicvoidwrite byte b throwsIOExceptionpublicvoidwrite byte b intoff intlen throwsIOExceptionpublicvoidwrite intb throwsIOExceptionb是int类型时 占用4个字节 只有最低的一个字节被写入输出流 忽略其余字节 见程序 文件拷贝 8 3 4字节过滤流 过滤流在读 写数据的同时可以对数据进行处理 它提供了同步机制 使得某一时刻只有一个线程可以访问一个I O流 过滤流扩展了输入 输出流的功能 如提供缓冲 字符字节转换 数据转换功能等 过滤字节流 FilterInputStream和FilterOutputStream FilterOutputStream OutputStreamos FilterInputStream InputStreamis 为了使用一个过滤流 必须首先把过滤流连接到某个输入 出流上 通过在构造方法的参数中指定所要连接的输入 出流来实现 过滤流的子类 1 BufferedInputStream和BufferedOutputStream 对输入 输出进行缓存 达到提高访问效率的目的BufferedInputStream InputStreaminput BufferedInputStream InputStreaminput intbufSize BufferedInputStream支持mark 和reset 方法 BufferedOutputStream OutputStreamoutput BufferedOutputStream OutputStreamoutput intbufSize 示例程序 2 DataInputStream和DataOutputStream 产生的原因 Data流可以直接读取任意一种数据类型 如浮点数 整数等 一般 对二进制文件常用DataInputStream 如 为什么要产生Data流 2 DataInputStream和DataOutputStream StringfileName c kuka1 dat intsum 0 try DataInputStreamin newDataInputStream newBufferedInputStream newFileInputStream fileName sum in readInt sum in readInt sum in readInt System out println Thesumis sum in close catch Exceptione e printStackTrace 8 3 5随机存取文件 对于InputStream和OutputStream 他们都是顺序访问流 从头至尾访问流 并且输入流只能读 不能写 输出流只能写 不能读 即对一个文件不能同时进行读写 RandomAccessFile类提供了一种称为 随机访问文件 方式 可以 对一个文件同时进行读写操作 可以在文件的任意位置进行读写操作 RandomAccessFile的使用 RandomAccessFile Stringname Stringmode throwsFileNotFoundException RandomAccessFile Filefile Stringmode throwsFileNotFoundException 其中 file识别文件路径 mode指定参数访问模式 r表示读 w表示写 rw表示读写 当文件不存在时 构造方法将抛出FileNotFoundException RandomAccessFile的方法 publiclonglength 返回文件的长度voidsetLength longlen 设置文件的新长度intread byte b 将b length个字节数据从此文件读入数组publicvoidseek longpos 改变文件指针位置publicfinalStringreadLine 读取文本的下一行publicfinalintreadInt 读入一个整数类型 publicfinalvoidwriteInt intv 写一个整数 publiclonggetFilePointer 获取文件指针位置 publicintskipBytes intn 跳过n个字节close 关闭文件见示例程序 8 3 6其它字节流 ByteArrayInputStreamByteArrayOutputStream用于内存数据的读写SequenceInputStream将多个输入流合为一个输入流PushbackInputStream包括一个单字节的缓冲区 使得在读数据时可以预读下个字节 主要内容 8 1I O流的概念和划分8 2文件的操作8 3字节流处理8 4字符流处理8 5串行化 思考 1 字节与字符的区别 2 字节串与字符串的区别 3 字节流与字符流的区别 区别 1 字节流是最基本的 主要用在处理二进制数据 它是按字节来处理的 2 字符流是按虚拟机的编码来处理 也就是要进行字符集的转化 8 4字符流处理 Reader Writer文件字符流字节流和字符流的转化 8 4 1Reader Writer Reader是定义Java的字符流输入模式的抽象类 该类的所有方法在出错情况下都将引发IOException异常 Writer是定义Java的字符流输出模式的抽象类 该类的所有方法都返回一个void值 在出错情况下都将引发IOException异常 Reader类的方法 abstractvoidclose voidmark intnumChars booleanmarkSupported intread intread charbuffer abstractintread charb intoffset intlen booleanready voidreset longskip longn Writer类的方法 abstractvoidclose abstractvoidflush voidwrite intch voidwrite charbuffer abstractvoidwrite charb intoffset intlen voidwrite Stringstr voidwrite Stringstr intoffset intlen publicWriterappend charc publicWriterappend CharSequencecsq publicWriterappend CharSequencecsq intstart intend 8 4 2文件字符流 FileReader类是一个以字符方式读取文件内容的Reader类的子类 FileReader StringfilePath FileReader FilefileObj FileWriter类是一个以字符方式写文件内容的Writer类的子类 FileWriter StringfilePath FileWriter StringfilePath booleanappend FileWriter FilefileObj FileReaderexample 例如 从一个文件逐个读取并把它输出到标准输入流和复制到目标文件中 importjava io classFileReaderDemo publicstaticvoidmain Stringargs throwsException FileReaderfr newFileReader d test txt FileWriterwr newFileWriter d dest txt intc while c fr readLine 1 System out prinln char c wr write c fr close wr close 解析文本文件的数据 ScannerPrintWriter把对象按文本格式打印输出到输出流 使用print 方法 支持格式化输出 publicclassScannerPrintWriterDemo publicstaticvoidmain String args Scanners null PrintWriterpw null try s newScanner newFile source txt pw newPrintWriter dest txt while s hasNextLine StringstrLine s nextLine 调用方法求每一行的和intsum getLineSum strLine pw println strLine t sum catch FileNotFoundExceptione e printStackTrace finally if s null s close if pw null pw close 计算每一行的和的方法privatestaticintgetLineSum StringstrLine 使用Scanner分割每一行为多个整数Scanners newScanner strLine intsum 0 while s hasNextInt sum s nextInt returnsum 8 4 3字节流和字符流的转化 字节流和字符流是Java提供的两种输入输出处理方式 InputStreamReader和OutputStreamWriter是一个字节流和字符流转换的桥梁 InputStreamReader读入字节流并按指定的字符编码转换为字符流 字符编码可以是那个编码名指定或用平台默认的编码方式 OutputStreamWriter使用指定的charset将要写入的字符编码为字节 InputStreamReader publicInputStreamReader InputStreamin publicInputStreamReader InputStreamin StringcharsetName throwsUnsupportedEncodingExceptionpublicInputStreamReader InputStreamin Charsetcs publicInputStreamReader InputStreamin CharsetDecoderdec Filefile newFile src StreamToReaderWriter java FileInputStreamfin newFileInputStream file InputStreamReaderisr newInputStreamReader fin GBK OutputStreamWriter publicOutputStreamWriter OutputStreamout publicOutputStreamWriter OutputStreamout StringcharsetName throwsUnsupportedEncodingExceptionpublicOutputStreamWriter OutputStreamout Charsetcs publi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论