单元七输入、输出._第1页
单元七输入、输出._第2页
单元七输入、输出._第3页
单元七输入、输出._第4页
单元七输入、输出._第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、单元七单元七 Java的输入输出的输入输出 u文件和文件夹的操作文件和文件夹的操作 uJavaJava的输入、输出流的输入、输出流 任务任务1-11-1:获取文件属性:获取文件属性 任务分析任务分析 文件或目录的属性主要是指文件的名字、大小、是否可写、是 否可读、最后的修改日期和是否隐藏等属性。Java.io包中File类 提供了获得了这些属性得方法。本案例将如何演示如何使用这些方 法获得文件或目录得属性; 任务任务1-11-1:获取文件属性:获取文件属性 相关知识点相关知识点 File类属于java.io包,它提供了一种与机器无关的方式来描述一 个文件对象的方法,利用File类的方法可以方便

2、地进行文件管理。 文件或目录的生成: 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-11-1:获取文件属性:获取文件属性 相关知识点相关知识点 文件名的处理: String getName():得到一个文件的名称(不包括路径); String getPa

3、th():得到一个文件的路径名; String getAbsolutePath():得到一个文件的绝对路径名; String getParent():得到一个文件的上一级目录名; String renameTo(Fiule newName):更改当前文件的文件名。 普通文件信息和工具: long lastModified():得到文件最近一次修改的时间; long length():得到文件的长度,以字节为单位; boolean delete():删除当前文件。 任务任务1-11-1:获取文件属性:获取文件属性 相关知识点相关知识点 文件属性测试: boolean exists():测试当前F

4、ile对象所指示的文件是否存在; boolean canWrite():测试当前文件是否可写; boolean canRead():测试当前文件是否可读; boolean isFile():测试当前文件是否是文件(不是目录); boolean isDirectory():测试当前文件是否是目录。 目录操作: boolea mkdir( ):根据当前对象生成一个由该对象指定的路径; string list( ):列出当前目录下的文件。 任务任务1-11-1:获取文件属性:获取文件属性 import java.io.*; public class FileTest public static vo

5、id main(String args) File file1=new File(myfirstjava); /创建文件对象 /获取文件信息的操作 if(file1.exists() System.out.println(文件名:+file1.getName(); System.out.println(绝对路径:+file1.getAbsolutePath(); System.out.println(文件路径:+file1.getPath(); System.out.println(父目录:+new File(file1.getAbsolutePath().getParent(); Syste

6、m.out.println(是否为文件:+file1.isFile(); System.out.println(是否为目录:+file1.isDirectory(); System.out.println(是否为绝对路径:+file1.isAbsolute(); /创建文件和目录操作 else file1.mkdir(); /创建文件目录 File file2=new File(file1.getPath()+test.txt);/创建文件对象 try file2.createNewFile();/创建文件 catch (IOException e) /捕获文件创建异常 e.printStac

7、kTrace(); 7.2 7.2 Java的输入、输出流的输入、输出流 u Java输入、输出流的基本概念 u 文件流 u 缓冲流 u 打印流 u 转换流 一、Java输入、输出流的基本概念 1、输入、输出流 输入、输出流是一个抽象的概念,可以理解为数据像流水一样, 从数据源通过管道(输入、输出流)流向目的地点。输入、输出流是 相对于程序本身而言,程序读取数据是输入流,程序向其他数据源写 入数据是输出流。程序读入数据时,首先建立一个输入流,数据源中 的数据通过输入流像流水一样被读入到程序中;程序输出数据,会建 立一个输出流,输出的数据通过输出流写入目的数据源。 数据源 目的数 据源 计算机

8、内存中 输入流输出流 一、Java输入、输出流的基本概念 2、字节流、字符流 Java的输入、输出流按照处理单位的不同,可分为字节流和字符流两大类,字 节流每次读取或输出的单位为字节,字符流每次读取或输出的单位为字符。 (1)字节流 java.io包中提供了两个抽象类InputStream和OutputStream,通过调用这两个抽 象类的子类,可以实现以字节为单位输入、输出数据。常用的字节流有 FileInputStream(文件输入流)、FileOutputStream(文件输出流)、 PipedInputStream(管道输入流)、PipedOutputStream(管道输出流)、 Bu

9、fferedInputStream(缓冲输入流)、BufferedOutputStream(缓冲输出流),他们 都是InputStream和OutputStream的子类,并且都是成对出现,有一个输入流,就有 一个输出流。下面通过InputStream和OutputStream的常用方法,了解字节流输入、 输出数据的常用方法。 一、Java输入、输出流的基本概念 lInputStream类常用方法: read():从输入流中读取数据的下一个字节。 read(byte b):从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 available():返回此输入流下一个方法调用可以不受

10、阻塞地从此输入流读取 (或跳过)的估计字节数。 mark(intreadlimit):在此输入流中标记当前的位置。 reset():将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。 close():关闭此输入流并释放与该流关联的所有系统资源。 lOutputStream类常用方法: write(int b):将指定的字节写入此输出流。 write (byte b):将b.length个字节从指定的 byte 数组写入此输出流。 close():关闭此输出流并释放与此流有关的所有系统资源。 flush():刷新此输出流并强制写出所有缓冲的输出字节。 一、Java输入、输出流的基本

11、概念 (2)字符流 字符流以字符为单位输入、输出数据。与字节流相类似,在java.io包中同样提 供的两个抽象类Reader和Writer,作为字符流的父类。绝大多数字节流处理中出现 的类,都可以在字符流中找到其对应类。常用的字符流有FileReader、FileWriter、 PipedReader、PipedWriter、BufferedReader、BufferedWriter、InputStreamReader、 OutputStreamWriter等。下面通过Reader和Writer的常用方法,了解字符流输入、输 出数据的常用方法。 lReader类常用方法: read():读取单

12、个字符。 read(char cbuf):将字符读入数组。 read(char cbuf, int off, intlen):将字符读入数组的某一部分。 skip(long n):跳过字符。 close():关闭该流并释放与之关联的所有资源。 lWriter常用方法: write(char cbuf):写入字符数组。 write(char cbuf, int off, intlen):写入字符数组的某一部分。 write(int c):写入单个字符。 write(String str):写入字符串。 write(String str, int off, intlen):写入字符串的某一部分。

13、close():关闭此流,但要先刷新它。 flush():刷新该流的缓冲。 一、Java输入、输出流的基本概念 3、节点流、处理流 按照处理功能的不同,流可以划分为节点流、处理流。直接对数据源进行读、 写操作的流称为节点流,对一个已存在的流进行处理的流称为处理流。节点流又被 称为低级流,其功能主要面向底层的输入、输出接口,有时不满足用户需要,这时 就需要在节点流的基础上为其添加一层处理流,通过对节点流的封装,产生可以满 足用户输入、输出需要的流。常用的节点流有文件流、管道流、数组流,常用的处 理流有缓冲流、转换流、打印流等。 数据源 目的数 据源 计算机 内存中 处理流节点输入流处理流节点输出

14、流 二、文件流 相关知识点相关知识点 文件流用来处理文件之间数据传输,可以把数据以字节流或字 符流的方式从文件中读取出来,再保存到别的文件中。文件流是 Java输入、输出中最常见的流,也是最基础的流,它是节点流。Java 提供了四个类FileInputStream、FileOutputStream、FileReader、 FileWriter用于文件流操作,其中FileInputStream、FileOutputStream 是以字节为单位传输数据,FileReader、FileWriter是以字符为单位传 输数据。它们分别是四个抽象类InputStream、OutputStream、 Rea

15、der、Writer的子类,它们常用的方法,与抽象类相同。 二、文件流 相关知识点相关知识点 1、FileInputStream、FileOutputStream类 使用FileInputStream和FileOutputStream可以从文件中以字节为单位读 写数据,可以用来读写诸如图像数据之类的原始字节流。 (1)FileInputStream构造方法 FileInputStream(File file):通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。 FileInputStream(String name)

16、:通过打开一个到实际文件的连接来创建 一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。 (2)FileOutputStream构造方法 FileOutputStream(File file):创建一个向指定 File 对象表示的文件中写入 数据的文件输出流。 FileOutputStream(File file, boolean append):创建一个向指定 File 对象 表示的文件中写入数据的文件输出流,append为true时表示是追加写入, 否则将覆盖文件中内容。 FileOutputStream(String name):创建一个向具有指定名称的

17、文件中写 入数据的输出文件流。 FileOutputStream(String name, boolean append):创建一个向具有指定 name 的文件中写入数据的输出文件流append为true时表示是追加写入,否 则将覆盖文件中内容。 二、文件流 相关知识点相关知识点 (3)FileInputStream、FileOutputStream读写文件示例 import java.io.*; public class FileStreamTest public static void main(String args) /声明输入、输出对象 FileInputStream in=null

18、; FileOutputStream out=null; int b=0;/定义保存读出字节的变量 try /捕获输入、输出异常 /定义输入、输出对象 in=new FileInputStream(D:javaFileStreamTest.java); out=new FileOutputStream(D:FileStreamTest.java); /读取数据,使用read()方法,一次读取一个字节。并将读取结果保存于变量 b中。 while(b=in.read()!=-1)/读取数据,直至读完全部数据,返回-1时停止。 System.out.print(char)b); /在读取文件的同时,

19、通过输出流将数据输出到制定文件。 out.write(b); in.close(); out.close(); catch (Exception e) System.out.println(文件未找到); e.printStackTrace(); 二、文件流 相关知识点相关知识点 2、FileReader、FileWriter类 使用FileReader、FileWriter可以从文件中以字符为单位读写数据,可以 用来直接处理16位的Unicode字符。 (1)FileReader构造方法 lFileReader(File file):在给定从中读取数据的 File 的情况下创建一 个新 Fi

20、leReader。 l lFileReader(String fileName):在给定从中读取数据的文件名的情况 下创建一个新 FileReader。 (2)FileWriter构造方法 lFileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。 lFileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。 lFileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对 象。 lFileWriter(String

21、fileName, boolean append) 根据给定的文件名以及 指示是否附加写入数据的 boolean 值来构造FileWriter 对象。 二、文件流 相关知识点相关知识点 (3)FileReader、FileWriter读写文件示例 import java.io.*; public class FileReaderTest public static void main(String args) FileReader in=null; FileWriter out=null; int b=0;/定义保存读出字节的变量 try /定义输入、输出对象 in=new FileReade

22、r(D:javaFileStreamTest.java); out=new FileWriter(D:FileStreamTest.java); char char1=new char100; /读取数据,使用read()方法,一次读取一个字节。并将读取结果保存于 变量b中。 while(in.read(char1)!=-1) System.out.print(new String(char1); /在读取文件的同时,通过输出流将数据输出到制定文件。 out.write(char1); in.close(); out.close(); catch (Exception e) System.ou

23、t.println(文件未找到); e.printStackTrace(); 任务任务1-21-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

24、str ) : 将字符串str中的字符写入输出流。 void write (string str,int off,int len ) :将字符数组 str 中从off 位置开始的len 个字符写入输出流。 flush( ) : 刷空输出流,并输出所有被缓存的字节。 void close ( ) : 关闭流。 任务任务1-21-2:使用字符流复制文件:使用字符流复制文件 相关知识点相关知识点 Filereader 是一个文件读入类。主要的方法有: Filereader(File file):根据File对象创建文件读入类对象。 Filereader(file descriptor fd): 根据

25、文件描述类的对象创建文件 读入类对象。 Filereader(string file name): 根据字符串创建文件读入类对象, 字符串定义路径和文件名。 read ( ) : 读入一个字符。 getEncoding ( ) :取得文件读入类的编码机制。 ready( ) : 标识该文件读入类是否可读,是否到达文件尾。 任务任务1-21-2:使用字符流复制文件:使用字符流复制文件 相关知识点相关知识点 Filewriter 是一个文件写出类。主要的方法有: File writer(File file): 根据File对象创建文件写出类对象。 Filewriter(File file,bool

26、ean 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():取得文件读入类的编码机制。

27、任务任务1-21-2:使用字符流复制文件:使用字符流复制文件 任务实施任务实施 代码实现:代码实现: 【程序文件:CopyFileChar.java】 技能拓展任务技能拓展任务 使用缓冲区流,实现一次读取一行数据。 任务任务1-31-3:用字节流复制文件:用字节流复制文件 任务分析任务分析 本任务实现利用字节流复制文件的功能。在窗体上通过文本框 输入源文件和目标文件,单击“复制”按钮开始复制,并在文本区 中显示复制信息。; 利用源文件建立File对象,并建立相应的字节输入流对象;利 用目标文件建立另一个File对象,并建立相应的字节输出流对象; 再利用字节输入流对象的read()方法读数据以及

28、输出流对象的 write()方法写数据来完成复制。 任务任务1-31-3:用字节流复制文件:用字节流复制文件 相关知识点相关知识点 InputStream类是所有字节输入流类的父类。主要的方法有: int read():读取一个字节,返回值为所读的字节。 int read(byte,):读取多个字节,放置到字节数组b中。通 常读取的字节数量为b的长度,返回值为实际读取的数量。 int read(byte b,off,int len ):读取len个字节,放置到以下标off 开始的字节数组b中,返回值为实际读取的字节的数量。 int available():返回值为流中尚未读取的字节的数量。 l

29、ong skip(long n):读指针(读数据时的指针)跳过n个字节 不读,返回值为实际跳过的字节数辆。 close():流操作完毕后必须关闭。 void reset():把读指针重新指向用mark方法所记录的位置。 任务任务1-31-3:用字节流复制文件:用字节流复制文件 相关知识点相关知识点 OutputStream类是所有字节输出流类的分类。主要方法有: void write(int b):往流中写一个字节b。 void write(byte b):往流中写一个字节数组b。 void write(byte b,int off,int len):把字节数组b中从下标off开 始,长度le

30、n的字节写入流中。 flush():刷空输出流,并输出所有被缓冲的字节。由于某些 流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。 close():流操作完毕后必须关闭。 任务任务1-31-3:用字节流复制文件:用字节流复制文件 相关知识点相关知识点 通过使用Fileinputstream可以访问文件的一个字节、几个字节或整个 文件。主要方法有: Fileinputstream(file file):创建一个输入文件流,从指定的file 对象读取数据。 Fileinputstream(string):创建一个输入文件流,从指定名称的 文件读取数据。 vold close():关闭当前文

31、件输入流,并释放与它相关的任一 系统资源。 int read():从当前输入流中读取一字节数据。 int read(byte b ):读取多个字节,放置到字节数组b中。通 常读取的字节数量为b的长度。 int read(byte b ,int off,int len):读取len个字节,放置到 以下标off开始的字节数组b中,返回值为实际读取的字节的数量 任务任务1-31-3:用字节流复制文件:用字节流复制文件 相关知识点相关知识点 通过使用FileOutputStream向文件写入数据。主要方法有: Fileinputstream(file):创建一个文件输出流,向指定的file对 象输出数

32、据。 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-31-3:用字节流复制文件:用字节流复制文

33、件 任务实施任务实施 代码实现:代码实现: 【程序文件:CopyPicture.java】 技能拓展任务技能拓展任务 利用DateInputStream和DataOutputStream两个流按数据类型读写 数据。 任务任务1-41-4:一个简单的随机文件读写程序:一个简单的随机文件读写程序 任务分析任务分析 本案例将演示如何随机读写文件。构造一个randomAccessfile 对象,利用该对象的方法定位和读写数据。 任务任务1-41-4:一个简单的随机文件读写程序:一个简单的随机文件读写程序 相关知识点相关知识点 RandomAccessFile类提供了随机访问文件的方法: 类Random

34、AccessFile的声明为: public class RandomAccessFile extends Object implements DataInput, DataOutput 接口DataInput 中定义的方法主要包括从流中读取基本类型的数 据、读取一行数据或者读取指定长度的字节数。如 readBoolean()、 readInt()、 readLine() 、readFully()等。 接口DataOutput 中定义的方法主要是向流中写入基本类型的数 据或者写入一定长度的数组。如writeChar() 、writeDouble()、write() 等。 任务任务1-41-4:

35、一个简单的随机文件读写程序:一个简单的随机文件读写程序 相关知识点相关知识点 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-41-4:一个简单的随

36、机文件读写程序:一个简单的随机文件读写程序 任务实施任务实施 代码实现:代码实现: 【程序文件:RandomAfile.java】 技能拓展任务技能拓展任务 随机访问文件流实现了DataInput和 DataOutput两个接口,按数 据类型随机读写数据。 任务任务2-12-1:读写学生对象数据:读写学生对象数据 任务分析任务分析 本任务将演示如何以对象为单位读写学生对象数据。 先定义一个Student类,实现Serializable接口,然后通过对象 输出流的writeObject( )方法,将Student对象保存到文件 data.ser中。之后,再通过对象输入流的readObject(

37、)方法,从 文件data.ser中读出保存下来的Student对象。 任务任务2-12-1:读写学生对象数据:读写学生对象数据 相关知识点相关知识点 串行化: 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可 能需要将对象的状态保存下来,在需要时再将对象恢复,我们把对象 的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性 (Persistence).对象通过写出描述自己状态的数值来记录自己这个过 程叫对象的串行化(Serialization).串行化的目的是为Java的运行环境 提供一组特性,其主要任务是写出对象实例变量的数值。 Serializable接口: 在java.i

38、o包中,接口 Serializable 用来作为实现对象串行化的工具, 只有实现了Serializable的类的对象才可以被串行化.Serializable接口 中没有定义任何方法,只是一个特殊标记,用来告诉Java编译器这个对 象参加了串行化的协议。 任务任务2-12-1:读写学生对象数据:读写学生对象数据 相关知识点相关知识点 对象的输入输出流: 要串行化一个对象,必须与一定的对象输入/输出流联系起来,通 过对象输出流将对象状态保存下来,再通过对象输入流将对象状态恢 复. Java.io包中提供了ObjectInputstream和ObjectOutputstream将数据 流功能扩展至可

39、读写对象。在 ObjectInputstream中用readObject()方 法可以直接读取一个对象,ObjectOutputstream中用writeObject()方 法可以直接将对象保存到输出流中。 串行化的注意事项: 串行化只能保存对象的非静态成员变量,不能保存任何的成员 方法和静态的成员变量,而且串行化保存的只是变量的值,对于变 量的任何装饰符,都不能保存。 任务任务2-12-1:读写学生对象数据:读写学生对象数据 任务实施任务实施 代码实现:代码实现: 【程序文件:Student.java】 技能拓展任务技能拓展任务 默认的是串行化机制。对象串行化首先写人类数据和类字段的 信息,

40、然后按照名称的上升排列顺序写入其值。如果想自己明确地 控制这些值的写入顺序和写入种类,必须定义自己的读取数据流的 方式,也就是在类的定义中重写 writeObject() 和readObject()方法。 试重写writeObject()和readObject()方法,对Student类定制其串行化。 任务任务3-13-1:一个简单的压缩和解压程序:一个简单的压缩和解压程序 任务分析任务分析 本任务演示如何利用java.util.zip包中所提供的类实现压缩和 解压zip格式的文件。压缩时,在源文件文本框输入一个要被压缩 的文件名,在目标文本框中输入压缩后的目标文件(包括目录,扩 展名为zip);当解压时,在源文件文本框中输入一个压缩文件名, 在目标文本框中输入解压后文件所放的目录。 任务任务3-13-1:一个简单的压缩和解压程序:一个简单的压缩和解压程序 相关知识点相关知识点 ZipEntry类: 表示zip文件中的一个压缩文件和文件夹。一般可以用如下构造 方法创建一个该类的对象: ZipEntry(String name); ZipFile类: ZipFi

温馨提示

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

评论

0/150

提交评论