资源简介 (共37张PPT)单元八 Java的输入输出授课学时:8学时主讲:教学目标教学重点与难点新课导入与项目展示项目1-流与文件的基本操作项目2-以对象为单位读写数据项目3 -文件的压缩和解压缩项目4 -文件选择对话框主要内容教学目标知识目标流的基本概念字节流和字符流的定义、节点流和过滤流的定义使用流进行数据输入输出操作的基本过程熟悉常用的输入输出流类文件的随机读写、文件与目录的管理类File技能目标掌握流对象的创建掌握各种流类中常见方法的使用熟练使用File类教学重点及难点教学重点使用流进行输入输出操作的步骤熟悉常见输入输出流类教学难点在具体应用中如何选择适当的输入输出流新课导入与项目展示项目1:流与文件的基本操作。项目2:以对象为单位读写数据。项目3:文件的压缩和解压缩项目4:文件选择对话框项目描述任务1-1:获取文件属性任务分析文件或目录的属性主要是指文件的名字、大小、是否可写、是否可读、最后的修改日期和是否隐藏等属性。Java.io包中File类提供了获得了这些属性得方法。本案例将如何演示如何使用这些方法获得文件或目录得属性;任务1-1:获取文件属性相关知识点File类属于java.io包,它提供了一种与机器无关的方式来描述一个文件对象的方法,利用File类的方法可以方便地进行文件管理。文件或目录的生成:public File(String path):如果path是实际存在的路径,则该File对象表示的是目录;如果path是文件名,则该File表示的是文件。public File(String path,String name):path是路径名,name是文件名。public File(File dir,String name):dir是路径名,name是文件名。任务1-1:获取文件属性相关知识点文件名的处理:String getName():得到一个文件的名称(不包括路径);String getPath():得到一个文件的路径名;String getAbsolutePath():得到一个文件的绝对路径名;String getParent():得到一个文件的上一级目录名;String renameTo(Fiule newName):更改当前文件的文件名。普通文件信息和工具:long lastModified():得到文件最近一次修改的时间;long length():得到文件的长度,以字节为单位;boolean delete():删除当前文件。任务1-1:获取文件属性相关知识点文件属性测试:boolean exists():测试当前File对象所指示的文件是否存在;boolean canWrite():测试当前文件是否可写;boolean canRead():测试当前文件是否可读;boolean isFile():测试当前文件是否是文件(不是目录);boolean isDirectory():测试当前文件是否是目录。目录操作:boolea mkdir( ):根据当前对象生成一个由该对象指定的路径;string list( ):列出当前目录下的文件。任务1-1:获取文件属性任务实施代码实现:【程序文件:GetFileProperty.java】技能拓展任务本任务实现了对单个文件或目录属性的读取,我们也可以利用File同时获得多个目录或文件的信息。任务1-2:使用字符流复制文件任务分析本任务实现利用字符流复制文件的功能,在窗体上通过文本框输入源文件和目标文件,单击“复制”按钮,进行复制;利用源文件建立File对象,并建立相应的字符输入流对象;利用目标文件建立另一个File对象,并建立相应的字符输出流对象;再利用字符输出流对象的read( )方法读数据和输出流对象的write( )方法写数据,完成复制。任务1-2:使用字符流复制文件相关知识点Reader是处理所有字符输入流类的父类。主要的方法有:int read( ):读取一个字符,返回值为读取的字符。int read(char cbuf[ ]):读取一系字符到数组cbuf[]中,返回值为实际读取的字符数量。int read(char cbuf[ ],int off,int len ):读取len个字符,从数组cbu[ ]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现。boolean markSupported( ):判断当前流是否支持标记。void markSupported(int readAheadLimit ):标记当前,最多支持readAheadLimit个字符串回溯。void reset( ):将当前力流重置到标记处。void close( ):关闭流。任务1-2:使用字符流复制文件相关知识点Writer类是处理所有字符流输出类的父类。主要的方法有:void write (int c) : 将整形值C的低16位写入输出流。void write (char cbu[ ]) : 将字符数组cbu[ ] 写入输出流。abstract viod wirte (char cbu[ ],int off,int len ) : 将字符数组 char cbu[ ] 中从off 位置开始的len 个字符写入输出流。void write (string str ) : 将字符串str中的字符写入输出流。void write (string str,int off,int len ) :将字符数组 str 中从off 位置开始的len 个字符写入输出流。flush( ) : 刷空输出流,并输出所有被缓存的字节。void close ( ) : 关闭流。任务1-2:使用字符流复制文件相关知识点Filereader 是一个文件读入类。主要的方法有:Filereader(File file):根据File对象创建文件读入类对象。Filereader(file descriptor fd): 根据文件描述类的对象创建文件读入类对象。Filereader(string file name): 根据字符串创建文件读入类对象,字符串定义路径和文件名。read ( ) : 读入一个字符。getEncoding ( ) :取得文件读入类的编码机制。ready( ) : 标识该文件读入类是否可读,是否到达文件尾。任务1-2:使用字符流复制文件相关知识点Filewriter 是一个文件写出类。主要的方法有:File writer(File file): 根据File对象创建文件写出类对象。Filewriter(File file,boolean append): 根据File对象创建文件写出类对象,同时指定是否添加。Filewriter(string file name):根据字符串创建文件读入类对象,字符串定义路径和文件名。close ( ):关闭文件写入类,将内容保存到文件中。writer(char [ ]cbuf,int off ,int len):写入字符数组,off定义开始位置,len定义长度。write(int c):写入一个字符。write(String str,int off,int len):写入字符串,off定义开始位置,len定义长度。getEncoding():取得文件读入类的编码机制。任务1-2:使用字符流复制文件任务实施代码实现:【程序文件:CopyFileChar.java】技能拓展任务使用缓冲区流,实现一次读取一行数据。任务1-3:用字节流复制文件任务分析本任务实现利用字节流复制文件的功能。在窗体上通过文本框输入源文件和目标文件,单击“复制”按钮开始复制,并在文本区中显示复制信息。;利用源文件建立File对象,并建立相应的字节输入流对象;利用目标文件建立另一个File对象,并建立相应的字节输出流对象;再利用字节输入流对象的read()方法读数据以及输出流对象的write()方法写数据来完成复制。任务1-3:用字节流复制文件相关知识点InputStream类是所有字节输入流类的父类。主要的方法有:int read():读取一个字节,返回值为所读的字节。int read(byte[],):读取多个字节,放置到字节数组b中。通常读取的字节数量为b的长度,返回值为实际读取的数量。int read(byte b[],off,int len ):读取len个字节,放置到以下标off开始的字节数组b中,返回值为实际读取的字节的数量。int available():返回值为流中尚未读取的字节的数量。long skip(long n):读指针(读数据时的指针)跳过n个字节不读,返回值为实际跳过的字节数辆。close():流操作完毕后必须关闭。void reset():把读指针重新指向用mark方法所记录的位置。任务1-3:用字节流复制文件相关知识点OutputStream类是所有字节输出流类的分类。主要方法有:void write(int b):往流中写一个字节b。void write(byte b[]):往流中写一个字节数组b。void write(byte b[],int off,int len):把字节数组b中从下标off开始,长度len的字节写入流中。flush():刷空输出流,并输出所有被缓冲的字节。由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。close():流操作完毕后必须关闭。任务1-3:用字节流复制文件相关知识点通过使用Fileinputstream可以访问文件的一个字节、几个字节或整个文件。主要方法有:Fileinputstream(file file):创建一个输入文件流,从指定的file对象读取数据。Fileinputstream(string):创建一个输入文件流,从指定名称的文件读取数据。vold close():关闭当前文件输入流,并释放与它相关的任一系统资源。int read():从当前输入流中读取一字节数据。int read(byte b[ ]):读取多个字节,放置到字节数组b中。通常读取的字节数量为b的长度。int read(byte b[ ],int off,int len):读取len个字节,放置到以下标off开始的字节数组b中,返回值为实际读取的字节的数量任务1-3:用字节流复制文件相关知识点通过使用FileOutputStream向文件写入数据。主要方法有:Fileinputstream(file):创建一个文件输出流,向指定的file对象输出数据。Fileinputstream(string):创建一个文件输出流,向指定名称的文件输出数据。Fileinputstream(string,boolean):用指定系统的文件名创建一个输出文件void cloce():关闭当前文件输出流,且释放与它相关的任一系统资源。vold write(int b):往流中写一个字节b。vold write(byte b[ ]):往流中写一个字节数组b。vold write(byte b[ ],int off,int len);把字节数组b中从下标off开始,长度为len的字节写入流中。任务1-3:用字节流复制文件任务实施代码实现:【程序文件:CopyPicture.java】技能拓展任务利用DateInputStream和DataOutputStream两个流按数据类型读写数据。任务1-4:一个简单的随机文件读写程序任务分析本案例将演示如何随机读写文件。构造一个randomAccessfile对象,利用该对象的方法定位和读写数据。任务1-4:一个简单的随机文件读写程序相关知识点RandomAccessFile类提供了随机访问文件的方法:类RandomAccessFile的声明为:public class RandomAccessFile extends Object implements DataInput, DataOutput接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据或者读取指定长度的字节数。如 readBoolean()、readInt()、 readLine() 、readFully()等。接口DataOutput 中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的数组。如writeChar() 、writeDouble()、write()等。任务1-4:一个简单的随机文件读写程序相关知识点RandomAccessFile(String name,String mode): name 是文件名,mode是打开方式,例如r表示只读,rw表示可读写。RandomAccessFile(File file,String mode); file是文件对象。long getFilePointer():用于得到当前的文件指针。void seek(long pos):用于移动文件指针到指定的位置。int skipBytes(int n):使文件指针向前移动指定的n 个字节。任务1-4:一个简单的随机文件读写程序任务实施代码实现:【程序文件:RandomAfile.java】技能拓展任务随机访问文件流实现了DataInput和 DataOutput两个接口,按数据类型随机读写数据。任务2-1:读写学生对象数据任务分析本任务将演示如何以对象为单位读写学生对象数据。先定义一个Student类,实现Serializable接口,然后通过对象输出流的writeObject( )方法,将Student对象保存到文件data.ser中。之后,再通过对象输入流的readObject( )方法,从文件data.ser中读出保存下来的Student对象。任务2-1:读写学生对象数据相关知识点串行化:对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复,我们把对象的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性(Persistence).对象通过写出描述自己状态的数值来记录自己这个过程叫对象的串行化(Serialization).串行化的目的是为Java的运行环境提供一组特性,其主要任务是写出对象实例变量的数值。Serializable接口:在java.io包中,接口 Serializable 用来作为实现对象串行化的工具,只有实现了Serializable的类的对象才可以被串行化.Serializable接口中没有定义任何方法,只是一个特殊标记,用来告诉Java编译器这个对象参加了串行化的协议。任务2-1:读写学生对象数据相关知识点对象的输入输出流:要串行化一个对象,必须与一定的对象输入/输出流联系起来,通过对象输出流将对象状态保存下来,再通过对象输入流将对象状态恢复. Java.io包中提供了ObjectInputstream和ObjectOutputstream将数据流功能扩展至可读写对象。在 ObjectInputstream中用readObject()方法可以直接读取一个对象,ObjectOutputstream中用writeObject()方法可以直接将对象保存到输出流中。串行化的注意事项:串行化只能保存对象的非静态成员变量,不能保存任何的成员方法和静态的成员变量,而且串行化保存的只是变量的值,对于变量的任何装饰符,都不能保存。任务2-1:读写学生对象数据任务实施代码实现:【程序文件:Student.java】技能拓展任务默认的是串行化机制。对象串行化首先写人类数据和类字段的信息,然后按照名称的上升排列顺序写入其值。如果想自己明确地控制这些值的写入顺序和写入种类,必须定义自己的读取数据流的方式,也就是在类的定义中重写 writeObject() 和readObject()方法。试重写writeObject()和readObject()方法,对Student类定制其串行化。任务3-1:一个简单的压缩和解压程序任务分析本任务演示如何利用java.util.zip包中所提供的类实现压缩和解压zip格式的文件。压缩时,在源文件文本框输入一个要被压缩的文件名,在目标文本框中输入压缩后的目标文件(包括目录,扩展名为zip);当解压时,在源文件文本框中输入一个压缩文件名,在目标文本框中输入解压后文件所放的目录。任务3-1:一个简单的压缩和解压程序相关知识点ZipEntry类:表示zip文件中的一个压缩文件和文件夹。一般可以用如下构造方法创建一个该类的对象:ZipEntry(String name);ZipFile类:ZipFile类用来从一个zip文件中读取所有Zip文件中读取所有ZipEntry对象。创建对象的构造方法:ZipFile(File file):file为File对象表示zip文件。ZipFile(String name):name为路径表示的zip文件。public Enumeration entries():返回一个包含所有ZipEntry对象的Enumeration。可以用nextElement()方法得到ZipEntry对象:ZipEntry ze=(ZipEntry)enum.nextElement();//enum是Enumeration类地实例。任务3-1:一个简单的压缩和解压程序相关知识点ZipOuputStream类:该类可用来压缩文件。通过调用putNextEntry()方法,可以打开一个ZipEntry对象的输出流,其原型如下:public void putNextEntry(ZipEntry e) throws IOException任务3-1:一个简单的压缩和解压程序任务实施代码实现:【程序文件:ZipDemo.java】技能拓展任务该任务只能压缩一个文件。试改进实现压缩多个文件,如在源文件文本框中输入一个目录,那么会将该目录下的所有文件全部压缩。任务4-1:使用文件对话框打开和保存文件任务分析本案例实现打开和保存文件的功能。在打开文件和保存文件时,使用了文件选择对话框。任务4-1:使用文件对话框打开和保存文件相关知识点打开或保存文件时,使用文件对话框会很方便。java.swing包中提供的JFileChoose类可以实现打开或保存对话框。JFileChooser类主要方法:JFileChooser():建立一个JFileChooser对象,默认的文件对话框路径是用户的根目录。JfileChooser(FileSystemView fsv):建立一个JfileChooser对象,并设置文件图标查看方式。JfileChooser(String currentDirectoryPath):建立一个JfileChooser对象,并设置文件对话框的打开路径。JfileChooser(String currentDirectoryPath,FileSystemView fsv):建立一个JfileChooser对象,并设置文件对话框的打开路径与文件图标查看方式。showOpenDialog()或showSaveDialog():分别打开“打开文件对话框”和“保存文件对话框”。任务4-1:使用文件对话框打开和保存文件任务实施代码实现:【程序文件:FileChooserDemo.java】技能拓展任务显示文件时,有时希望文件类型图标与扩展名相一致。试利用FileView这个抽象类解决这个问题。 展开更多...... 收起↑ 资源预览