Java应用开发与实践-IO操作_第1页
Java应用开发与实践-IO操作_第2页
Java应用开发与实践-IO操作_第3页
Java应用开发与实践-IO操作_第4页
Java应用开发与实践-IO操作_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

I/O操作Java应用开发与实践

酒店管理系统的设计学习目标理解I/O流与文件的概念掌握创建流与文件的方法理解输入/输出流的概念理解字节流/字符流的概念了解ZIP压缩输入/输出流11.1I/O流与文件11.2输入/输出流11.3字节流11.4字符流11.5ZIP压缩输入/输出流11.6实训11输入输出流的应用目录11.1I/O流与文件I/O(Input/Output)即输入/输出,指信号或数据在计算器的内部存储器和外部存储器或其它周边设备之间的传递。Java的I/O是实现输入和输出的基础,可以方便的实现各种数据的输入和输出操作。在Java中把不同的输入/输出源如键盘、文件、网络连接等抽象表述为“流”(stream)。通过流的形式允许Java程序使用相同的方式来访问不同的输入/输出源。11.1.1I/O流的概念和分类11.1I/O流与文件I/O的形式分为下面四种,本章讨论第一种,文件的读/写。文件(File)读/写,以文件为读/写对象。控制台(console,如DOS窗口)。例如打印到显示器/键盘读入。网络接口(TCP/UDP端口)读/写,例如,网上冲浪、网络聊天、邮件发送。程序(线程)间通信,例如,数据传输。11.1.1I/O流的概念和分类11.1I/O流与文件Java语言采用流的机制来实现输入/输出。流就是一个传送有序的字节序列。我们可以把它想象成为一个数据节点和程序之间建立起来的连接通道上的字节序列。流就是对输入数据源和输出目的地的抽象表示。11.1.1I/O流的概念和分类11.1I/O流与文件输入流:程序在内存中运行,文件在磁盘上,把文件从磁盘上读入内存中来,这个方向的流称为输入流。输出流:把内存中的数据写到磁盘上的文件,这个方向的流称为输出流。字节流:用于读写二进制文件及其他任何类型文件,以byte为单位传输。字符流:用于读写文本文件,以字符为单位传输。不能操作二进制文件。11.1.1I/O流的概念和分类11.1I/O流与文件应用程序中经常需要从外部的文件中读取信息和向外部文件写出数据进行保存,就需要创建File类的对象——文件。Java中的File类是文件和目录路径名的抽象形式。File类是java.io包中唯一代表磁盘文件本身的对象。File类定义了一些与平台无关的方法来操作文件。File类主要用于文件和目录的创建、文件的查找和文件的删除等。11.1.2File类11.1I/O流与文件

//创建文件对象file1,参数是文件所在路径Filefile1=newFile("d:\\myDoc\\first.txt");if(file1.exists())//判断是否是文件

System.out.println("文件"+file1.getName()+"已经存在");else{ System.out.println("文件"+file1.getName()+"不存在");} 11.1.2File类11.1I/O流与文件创建一个文件对象,不管这个文件是否存在于文件系统中,都必须使用File类先实例化这个文件对象,即使它是一个并不存在的文件。Filefile1=newFile("d:\\myDoc\\first.txt");Filefile2=newFile("d:\\myDoc\\second.txt");if(file1.exists())//判断是否是文件

System.out.println("文件"+file1.getName()+"已经存在");else{ try{//这里需要处理异常

file1.createNewFile(); }catch(IOExceptione){ e.printStackTrace(); }}11.1.3文件的创建与删除11.1I/O流与文件File类有很多的方法,可以得到文件本身的属性,如getName()方法获得文件名、length()方法获得文件长度、getAbsolutePath()方法获得文件路径等。System.out.println("文件"+file1.getName()+"的地址是:"+file1.getAbsolutePath());System.out.println("文件"+file1.getName()+"的长度是:"+file1.length());System.out.println("文件"+file2.getName()+"的地址是:"+file2.getAbsolutePath());System.out.println("文件"+file2.getName()+"的长度是:"+file2.length());11.1.4获取文件信息11.2输入/输出流把文件从磁盘上读入内存中的流称为输入流,输入流连接的数据源可以是任何串行数据源,如磁盘文件、网络另一端的信息发送程序、键盘等。11.2.1输入流11.2输入/输出流把内存中的数据写到磁盘上的文件,该流被称为输出流。输出流可以连接硬盘上的文件、网络上的另一端等任何可以接收字节序列的设备。11.2.2输出流11.3字节流1.抽象字节输入流InputStreamInputStream类(字节输入流)是所有字节输入流的抽象父类,它的所有子类继承自InputStream,它本身并不能创建实例来执行输入,但它将成为所有输入流的模板,所以它的方法是所有输入流都可使用的方法。InputStream流及其子类都是向程序中输入数据的,且数据单位为字节(8bit)。11.3.1抽象字节流InputStream和OutputStream11.3字节流2.抽象字节输出流OutputStreamOutputStream类(字节输出流)是所有字节输出流的抽象父类,它本身并不能创建实例来执行输出,但它将成为所有输出流的模板,所以它的方法是所有输出流都可使用的方法。11.3.1抽象字节流InputStream和OutputStream11.3字节流1.字节文件输入流FileInputStreamFileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节。在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,起着缓存数据的中间角色的作用。2.字节文件输出流FileOutputStreamFileOutputStream是用来处理以文件作为数据输出目的数据流,或者说是从内存区读数据到文件。FileOutputStream类用来处理以文件作为数据输出目的数据流。11.3.2字节文件流FileInputStream和FileOutputStream11.3字节流为了减少访问外存的次数,应该在一次对外设的访问中,读写更多的数据。为此,除了程序和流节点间交换数据必需的读写机制外,还应该增加缓冲机制。缓冲流就是每一个数据流分配一个缓冲区,一个缓冲区就是一个临时存储数据的内存。这样可以减少访问硬盘的次数,提高传输效率。字节缓冲输入流BufferedInputStream的作用是当向缓冲流写入数据时候,数据先写到缓冲区,待缓冲区写满后,系统一次性将数据发送给输出设备。字节缓冲输出流BufferedOutputStream的作用是当从向缓冲流读取数据时候,系统先从缓冲区读出数据,待缓冲区为空时,系统再从输入设备读取数据到缓冲区。11.3.3字节缓冲流BufferedInputStream和BufferedOutputStream11.3字节流将文件读入内存,需要将BufferedInputStream与FileInputStream相结合,语法格式如下:FileInputStreamfis=newFileInputStream("abc.txt");BufferedInputStreambis=newBufferedInputStream(fis);将内存写入文件,需要将BufferedOutputStream与FileOutputStream相结合,语法格式如下:FileOutputStreamfos=newFileOutputStream("abc.txt");BufferedOutputStreambos=newBufferedInputStream(fos);将键盘输入流读到内存,需要将BufferedReader与标准的数据流相结合,语法格式如下:InputStreamReaderisr=newInputStreamReader(System.in);BufferedReaderbr=newBufferedReader(isr);11.3.3字节缓冲流BufferedInputStream和BufferedOutputStream11.3字节流1.数据输入流DataInputStream数据输入流DataInputStream允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。2.数据输出流DataOutputStreamDataOutputStream数据输出流允许应用程序将基本Java数据类型写到基础输出流中。11.3.4字节数据流DataInputStream和DataOutputStream11.4字符流1.Reader抽象类Reader是用于读取字符流的抽象类,它能够将输入流中采用其它编码类型的字符转换为Unicode字符,然后在内存中为其分配内存。其子类必须实现的方法只有read(char[],int,int)和close()。11.4.1抽象字符流Reader和Writer11.4字符流2.Writer抽象类Writer是写入字符流的抽象类,它能够将内存中的Unicode字符转换为其它编码类型的字符,再写到输出流中。其子类必须实现的方法仅有write(char[],int,int)、flush()和close()。11.4.1抽象字符流Reader和Writer11.4字符流FileReader与FileInputStream都是读取文件的输入流,FileReader主要用来读取字符文件,使用缺省的字符编码。11.4.2字符文件流FileReader和FileWriter11.4字符流为了提高字符流读写的效率,引入了缓冲机制,进行字符批量的读写,提高了单个字符读写的效率。BufferedReader用于加快读取字符的速度,BufferedWriter用于加快写入的速度。BufferedReader是为了提供读的效率而设计的一个包装类,它可以包装字符流。可以从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。BufferedReader的StringreadLine()这个方法一次可以读取一个文本行,返回的直接就是这一行的字符串,如果读到行尾了就返回null。11.4.3字符缓冲流BufferedReader和BufferedWriter11.4字符流InputStreamReader是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。每次调用InputStreamReader中的一个read()方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。在BufferedReader类里包装InputStreamReader对象是一种从键盘输入字符或字符串的常用方法。11.4.4转换流InputStreamReader和OutputStreamWriter11.5ZIP压缩输入/输出流ZIP是一种较为常见的文件压缩形式,在Java中要想实现ZIP的压缩需要导入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream、ZipEntry几个类完成文件的压缩。11.5.1压缩文件11

温馨提示

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

评论

0/150

提交评论