33
12 12 第第第第 第第第第 第第第第 、、 第第第第 第第第第 第第第第 、、 第第第第第第第第第第第第第第第第 第第第第第第第 (Stre am) 第第 第第第 第第第第 一。 Java 第第第第 第第第第第第 第第第第第第第第第第第第第第第第第* 第第第第 第第第第第第第第第 、; * 第第 第第第第第第第第第第第第第第第第第第第第* * 第第 第第第第第第第第第第第第第第第第 第第第第第第第第第第第第第第第第 第第第第第第第第第第* * 第第 第第第第第第第第第 第第第第第第第第第 File File * * 第第 第第第第第第第第第第第第第第第第第第

第 12 章 学习目的、知识点、基本要求

  • Upload
    ethel

  • View
    158

  • Download
    8

Embed Size (px)

DESCRIPTION

第 12 章 学习目的、知识点、基本要求. 学习目的: 把不同类型的输入、输出源抽象为流 (Stream) ,用来统一表示。从而进行 Java 程序输入、输出的实现和文件与目录管理。 基本知识点: * 学习输入、输出流的基本概念; * 学习 字节流和字符流的概念; * 学习 字节流和字符流类及其子类的常用方 法及其作用; * 学习 文件与目录的管理类 File ; * 学习 文件访问的基本步骤。. 第 12 章 学习目的、知识点、基本要求. 基本要求: * 掌握输入、输出流的基本概念; * 掌握字节流和字符流的概念; - PowerPoint PPT Presentation

Citation preview

Page 1: 第 12 章  学习目的、知识点、基本要求

第第 1212 章 学习目的、知识点、基本要章 学习目的、知识点、基本要求求

学习目的:学习目的: 把不同类型的输入、输出源抽象为流 (Str

eam) ,用来统一表示。从而进行 Java 程序输入、输出的实现和文件与目录管理。

基本知识点:基本知识点:* 学习输入、输出流的基本概念;* 学习字节流和字符流的概念;字节流和字符流的概念;* * 学习字节流和字符流类及其子类的常用方字节流和字符流类及其子类的常用方

法及其作用;法及其作用;* * 学习文件与目录的管理类文件与目录的管理类 FileFile ;;* * 学习文件访问的基本步骤。文件访问的基本步骤。

Page 2: 第 12 章  学习目的、知识点、基本要求

第第 1212 章 学习目的、知识点、基本要章 学习目的、知识点、基本要求求

基本要求:基本要求:* 掌握输入、输出流的基本概念;* 掌握字节流和字符流的概念;掌握字节流和字符流的概念;* * 掌握字节流和字符流类及其子类的常用方掌握字节流和字符流类及其子类的常用方

法及其作用;法及其作用;* * 理解并掌握文件与目录的管理类理解并掌握文件与目录的管理类 FileFile ;;* * 掌握文件访问的基本步骤。掌握文件访问的基本步骤。

Page 3: 第 12 章  学习目的、知识点、基本要求

第 12 章 输入与输出

12.1 12.1 输入输出流类输入输出流类

12.2 12.2 目录和文件管理目录和文件管理

12.3 12.3 字节流类字节流类

12.4 12.4 字符流类字符流类

12.5 12.5 文件的访问文件的访问

Page 4: 第 12 章  学习目的、知识点、基本要求

12.112.1 输入输出流类输入输出流类

1 1 输入输入 // 输出流概念输出流概念数据流数据流(( StreamStream ):):

是所有数据通信通道之中数据的起点和终点。是所有数据通信通道之中数据的起点和终点。输入数据流输入数据流————

表示从外部设备到到计算机的数据流动表示从外部设备到到计算机的数据流动输出数据流输出数据流————

表示从计算机到外部设备的数据流动表示从计算机到外部设备的数据流动缓冲流缓冲流————

使用缓冲区为一个流配备的一个缓冲区使用缓冲区为一个流配备的一个缓冲区

Page 5: 第 12 章  学习目的、知识点、基本要求

2 2 JavaJava 标准数据流标准数据流

SystemSystem 类是继承类是继承 ObjectObject 类终极类,它有三个类终极类,它有三个表示标准输入、标准输出和标准错误的类变量表示标准输入、标准输出和标准错误的类变量

(1) (1) 标准输入:标准输入: inin public static final InputStream in //public static final InputStream in // 对应键盘输入对应键盘输入

(2) (2) 标准输出:标准输出: outout public static final OutputStream in //public static final OutputStream in // 对应显示器输出对应显示器输出

(3) (3) 标准错误:标准错误: errerr public static final PrintStream err //public static final PrintStream err // 对应显示器输出对应显示器输出

Page 6: 第 12 章  学习目的、知识点、基本要求

程序分析程序分析class IO1{ public static void main(String[] args) throws java.io.IOException { byte buffer[]=new byte[40]; System.out.println(" 从键盘输入不超过 40 个字符,按回车键结束输入 :"); int count=System.in.read(buffer); System.out.println(" 保存在缓冲区的元素个数为 "+count); System.out.println(" 输出 buffer 元素值 :"); for(int i=0;i<count;i++){

System.out.print(" "+ buffer[i]);}System.out.println();System.out.println(" 输出 buffer 字符元素 :");System.out.write(buffer,0,buffer.length);

}}

Page 7: 第 12 章  学习目的、知识点、基本要求

程序结果程序结果

Page 8: 第 12 章  学习目的、知识点、基本要求

3 3 Java.ioJava.io 包中数据流类文件包中数据流类文件

输入输出类库——输入输出类库——java.iojava.io 包提供了包提供了 6060 多个输入流类和输出流类多个输入流类和输出流类

从结构上分两类从结构上分两类 (4(4 个基本流类个基本流类 )) ::

字符流字符流 : Reader, Writer: Reader, Writer

字节流字节流 : InputStream, OutputStream: InputStream, OutputStream

Page 9: 第 12 章  学习目的、知识点、基本要求

12.2 12.2 目录和文件管理——目录和文件管理—— FileFile类类

java.io.Filejava.io.File 类是类是 java.lang.Objectjava.lang.Object 的子类的子类 FileFile 类是专门用来管理磁盘文件和目录的。类是专门用来管理磁盘文件和目录的。

每个每个 FileFile 类的对象表示一个磁盘文件或目类的对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信录,其对象属性中包含了文件或目录的相关信息,如文件或目录的名称、文件的长度、目录息,如文件或目录的名称、文件的长度、目录中所含文件的个数等。中所含文件的个数等。

调用调用 FileFile 类的方法则可以完成对文件或目类的方法则可以完成对文件或目录的常用管理操作,如创建文件或目录、删除录的常用管理操作,如创建文件或目录、删除文件或目录、查看文件的有关信息等。文件或目录、查看文件的有关信息等。

Page 10: 第 12 章  学习目的、知识点、基本要求

12.2 12.2 目录和文件管理——目录和文件管理—— FileFile类类1 1 创建创建 FileFile 类对象的构造方法类对象的构造方法 public File(String path): public File(String path):

使用指定路径构造一个对象。使用指定路径构造一个对象。public File(String path, String name): public File(String path, String name):

使用指定路径和字符串构造一个对象。使用指定路径和字符串构造一个对象。 public File(File dir, String name):public File(File dir, String name):

使用指定文件目录和字符串构造一个对象。使用指定文件目录和字符串构造一个对象。

Page 11: 第 12 章  学习目的、知识点、基本要求

12.2 12.2 目录和文件管理——目录和文件管理—— FileFile 类类2 File2 File 类的常用方法——类的常用方法——

(1)(1) getName() getName() 获取对象所代表的文件名获取对象所代表的文件名(2)(2) getParent() getParent() 获取文件对象的路径的父类信息获取文件对象的路径的父类信息(3)(3) getPath() getPath() 获取对象所代表文件的路径名获取对象所代表文件的路径名(4)(4) canRead() canRead() 测试能否从指定的文件中读数据测试能否从指定的文件中读数据(5)(5) canWrite() canWrite() 测试能否对指定的文件写入数据测试能否对指定的文件写入数据(6)(6) exists() exists() 测试文件是否存在测试文件是否存在(7)(7) length() length() 获取文件对象所代表的文件长度获取文件对象所代表的文件长度(8)(8) list() list() 获取文件对象指定的目录中文件列表获取文件对象指定的目录中文件列表

Page 12: 第 12 章  学习目的、知识点、基本要求

12.2 12.2 目录和文件管理——目录和文件管理—— FileFile类类(9)(9) getAbsolutePath() getAbsolutePath() 获取文件的绝对路径获取文件的绝对路径

(10)(10) getCanonicalPath() getCanonicalPath() 获取文件对象路径名的标准格式获取文件对象路径名的标准格式

(11)(11) isAbsolute()isAbsolute() 测试 测试此文件对象代表的文件是否是绝对路径测试 测试此文件对象代表的文件是否是绝对路径

(12)(12) isDirectory() isDirectory() 测试此文件对象代表的文件是否是一个目录测试此文件对象代表的文件是否是一个目录

(13)(13) isFile() isFile() 测试此对象所代表的是否是一个文件测试此对象所代表的是否是一个文件

(14)(14) delete() delete() 删除此对象指定的文件删除此对象指定的文件

(15)(15) makdir() makdir() 创建一个目录,其路径名由此文件对象指定创建一个目录,其路径名由此文件对象指定

(16)(16) makdirs() makdirs() 创建一个目录,其路径名由此文件对象指定并包括创建一个目录,其路径名由此文件对象指定并包括 必要的父目录必要的父目录

2 File 类的常用方法——

Page 13: 第 12 章  学习目的、知识点、基本要求

12.3 12.3 字字节节流类流类字字节节流类流类 ((InputStreamInputStream 类类及其继承派生关系及其继承派生关系 ))

java .lang.Object java.io.InputStream java.io.ByteArrayInputStream java.io.PipedInputStream java.io.SequenceInputStream java.io. StringBufferInputStream java.io.FileInputStream java.io. DataInputStream java.io.LineNumberInputStream java.io.BufferedInputStream java.io.PushbackInputStream

常用方法:read() 读数据;available() 获取输入流字节数;skip()

reset() 指针定位mark()

Page 14: 第 12 章  学习目的、知识点、基本要求

12.3 12.3 字字节节流类流类字字节节流类流类 ( ( OutputStreamOutputStream 类类及其继承派生关系及其继承派生关系 ))

java .lang.Object java.io.OutputStream java.io.ByteArrayOutputStream java.io.PipedOutputStream java.io.ObjectOutputStream java.io.FileOutputStream java.io.PrintStream java.io.DataOutputStream java.io.BufferedOutputStream

常用方法:write() 写数据;flush() 写缓冲区内 的所有数据close() 关闭输出流

Page 15: 第 12 章  学习目的、知识点、基本要求

12.3 12.3 字字节节流类流类 字节输入流与字节输出流字节输入流与字节输出流

数据介质

读入

写出

数据介质

Inp

utS

tream

对象

On

pu

tStream

象1B 1B 1B 1B

Page 16: 第 12 章  学习目的、知识点、基本要求

12.4 12.4 字字符符流类流类字字符符流类流类(( ReaderReader 类及其继承派生关系)类及其继承派生关系)

java .lang.Objectjava .lang.Object java.io.java.io.ReaderReader java.io.BufferedReaderjava.io.BufferedReader

java.io.LineNumberReaderjava.io.LineNumberReader java.io.CharArryReaderjava.io.CharArryReader java.io.FilerReaderjava.io.FilerReader

java.io.PushbackReaderjava.io.PushbackReader java.io.InputStreamReaderjava.io.InputStreamReader

java.io.FileReaderjava.io.FileReader java.io. PipedReaderjava.io. PipedReader java.io.StringReaderjava.io.StringReader

Page 17: 第 12 章  学习目的、知识点、基本要求

12.4 12.4 字字符符流类流类字字符符流类流类(( WiterWiter 类及其继承派生关系)类及其继承派生关系) java .lang.Objectjava .lang.Object java.io.java.io.WiterWiter java.io.BufferedWiterjava.io.BufferedWiter

java.io.CharArryWiterjava.io.CharArryWiter java.io.FilerWiterjava.io.FilerWiter

java.io.OutputStreamWiterjava.io.OutputStreamWiterjava.io.FileWiterjava.io.FileWiter

java.io. PipedWiterjava.io. PipedWiter java.io.StringWiterjava.io.StringWiter

java.io.PrintWiterjava.io.PrintWiter

Page 18: 第 12 章  学习目的、知识点、基本要求

12.4 12.4 字字符符流类流类

数据介质

读入

写出

数据介质

Read

er

对象

Writer

象1 个字符 若干字节 若干字节 1 个字符

字符输入流与字符输出流字符输入流与字符输出流

Page 19: 第 12 章  学习目的、知识点、基本要求

输入和输出输入和输出接口的使用接口的使用

Object

InputStream OutputStream

FilterInputStream FilterOutputStream

DataInputStream DataOutputStream

DataInput DataOutput

RandomAccessFile

Page 20: 第 12 章  学习目的、知识点、基本要求

程序分析程序分析

import java.io.*;public class IO2{ public static void main(String[] args) throws IOException{ FileReader in=new FileReader("Hello.java"); // 建立文件输入流 BufferedReader bin=new BufferedReader(in); // 建立缓冲输入流 FileWriter out=new FileWriter("Hello.txt",true);// 建立文件输出流 String str; while ((str=bin.readLine())!=null){ System.out.println(str); out.write(str+"\n"); } in.close(); out.close(); }}

基于字符型的文件输入输出流与缓冲流的应用。

Page 21: 第 12 章  学习目的、知识点、基本要求

12.5 12.5 文件的访问文件的访问

输入输入 // 输出流操作的一般步骤:输出流操作的一般步骤:1 1 使用引入语句引入包:使用引入语句引入包: import java.io.*import java.io.* ;;2 2 根据不同数据源和输入输出任务,建立字节流 根据不同数据源和输入输出任务,建立字节流

或字符流对象。或字符流对象。3 3 若需要对字节或字符流信息组织加工为数据, 若需要对字节或字符流信息组织加工为数据,

在已建字节流或字符流对象上构建数据流对象。在已建字节流或字符流对象上构建数据流对象。4 4 用输入输出流对象类的成员方法进行读写操用输入输出流对象类的成员方法进行读写操

作,需要时设置读写位置指针。作,需要时设置读写位置指针。5 5 关闭流操作。关闭流操作。

Page 22: 第 12 章  学习目的、知识点、基本要求

文件的顺序访问文件的顺序访问— — 1 1 文件字符流文件字符流

FileReaderFileReader 类和类和 FileWriterFileWriter 类类FileReaderFileReader 类用于读取文件字符数据。类用于读取文件字符数据。* FileReader* FileReader 类的构造方法类的构造方法(( 11 )) FileReader(String fileName)FileReader(String fileName)

使用指定的文件名创建一个使用指定的文件名创建一个 FileReaderFileReader 对象。对象。(( 22 )) FileReader(File file)FileReader(File file)

使用指定的文件对象创建一个使用指定的文件对象创建一个 FileReaderFileReader 对象。对象。(( 33 )) FileReader(FileDescriptor fd)FileReader(FileDescriptor fd)

使用指定的文件描述符创建一个使用指定的文件描述符创建一个 FileReaderFileReader 对象。对象。

Page 23: 第 12 章  学习目的、知识点、基本要求

文件的顺序访问文件的顺序访问— — 11 文件字符流文件字符流

FileReaderFileReader 类和类和 FileWriterFileWriter 类类FileWriterFileWriter 类用于向文件写入字符数据。类用于向文件写入字符数据。* FileWriter* FileWriter 类的构造方法类的构造方法(( 11 )) FileWriter(String fileName)FileWriter(String fileName)

使用指定的文件名创建一个使用指定的文件名创建一个 FileWriterFileWriter 对象。对象。(( 22 )) FileWriter(File file)FileWriter(File file)

使用指定的文件对象创建一个使用指定的文件对象创建一个 FileWriterFileWriter 对象。对象。(( 33 )) FileWriter(FileDescriptor fd)FileWriter(FileDescriptor fd)

使用指定的文件描述符创建一个使用指定的文件描述符创建一个 FileWriterFileWriter 对象。对象。

Page 24: 第 12 章  学习目的、知识点、基本要求

文件的顺序访问文件的顺序访问— — 1 1 文件字符流文件字符流

FileReaderFileReader 类和类和 FileWriterFileWriter 类类

FileReaderFileReader 类类和和 FileWriterFileWriter 类类的成员方的成员方法法

这两个类没有自己独特的成员方法,它们的这两个类没有自己独特的成员方法,它们的

成员方法都直接继承自父类的。成员方法都直接继承自父类的。

Page 25: 第 12 章  学习目的、知识点、基本要求

文件的顺序访问文件的顺序访问— — 2 2 文件字节流文件字节流

FileInputStreamFileInputStream 类:类:用于读取文件中字节数据的字节文件输入流类。用于读取文件中字节数据的字节文件输入流类。* FileInputStream* FileInputStream 类构造方法类构造方法(( 11 )使用指定的字符串创建一个)使用指定的字符串创建一个 FileInputStreamFileInputStream 对象。对象。

FileInputStream(String name)FileInputStream(String name)

(( 22 )使用指定的文件对象创建一个)使用指定的文件对象创建一个 FileInputStreamFileInputStream 对象。对象。FileInputStream(File file)FileInputStream(File file)

(( 33 )使用指定的)使用指定的 FileDescriptorFileDescriptor 创建一个创建一个 FileInputStreamFileInputStream 对象。对象。FileInputStream(FileDescriptor fdObj)FileInputStream(FileDescriptor fdObj)

Page 26: 第 12 章  学习目的、知识点、基本要求

文件的顺序访问文件的顺序访问— — 2 2 文件字节流文件字节流

FileInputStreamFileInputStream 类:类:用于读取文件中字节数据的字节文件输入流类。用于读取文件中字节数据的字节文件输入流类。* FileInputStream* FileInputStream 类的常用成员方法类的常用成员方法(( 11 )) read(): read(): 自输入流中读取一个字节。自输入流中读取一个字节。(( 22 )) read(byte b[]):read(byte b[]): 将输入数据存放在指定的字节数组将输入数据存放在指定的字节数组 bb 中中(( 33 )) read(byte b[],int offset, int len):read(byte b[],int offset, int len): 自输入流中的自输入流中的 offsetoffset 位位 置开始读取置开始读取 lenlen 个字节并存放在指定的数组个字节并存放在指定的数组 bb 中。中。(( 44 )) available():available(): 返回输入流中的可用字节个数。返回输入流中的可用字节个数。(( 55 )) skip(long n):skip(long n): 从输入流中跳过从输入流中跳过 nn 个字节。个字节。

Page 27: 第 12 章  学习目的、知识点、基本要求

文件的顺序访问文件的顺序访问— — 2 2 文件字节流文件字节流

FileOutputStreamFileOutputStream 类:类:用于向文件写入字节数据的字节文件输出流。用于向文件写入字节数据的字节文件输出流。* FileOutputStream* FileOutputStream 类构造方法类构造方法(( 11 )使用指定的字符串创建一个)使用指定的字符串创建一个 FileOutputStreamFileOutputStream 对象。对象。

FileOutputStream(String name)FileOutputStream(String name)

(( 22 )使用指定的文件对象创建一个)使用指定的文件对象创建一个 FileOutputStreamFileOutputStream 对象。对象。FileOutputStream(File file)FileOutputStream(File file)

(( 33 )使用指定的)使用指定的 FileDescriptorFileDescriptor 创建一个创建一个 FileOutputStreamFileOutputStream 对象。对象。FileOutputStream(FileDescriptor fdObj)FileOutputStream(FileDescriptor fdObj)

Page 28: 第 12 章  学习目的、知识点、基本要求

文件的顺序访问文件的顺序访问— — 2 2 文件字节流文件字节流

FileOutputStreamFileOutputStream 类:类:用于向文件写入字节数据的字节文件输出流。用于向文件写入字节数据的字节文件输出流。* FileOutputStream* FileOutputStream 类的常用成员方法类的常用成员方法(( 11 )) write(int b): write(int b): 写入一个字节到文件输入流。写入一个字节到文件输入流。(( 22 )) write(byte b[]):write(byte b[]): 写一个字节数组。写一个字节数组。(( 33 )) write(byte b[],int offset, int len):write(byte b[],int offset, int len): 将字节数组将字节数组 bb 从从 offsetoffset

位位 置开始的置开始的 lenlen 个字节数组的数据写到输出流中。个字节数组的数据写到输出流中。(( 44 )) getFD():getFD(): 获取与此流关联的文件描述符。获取与此流关联的文件描述符。(( 55 )) close(long n):close(long n): 关闭输入关闭输入 // 输出流,释放占用的所有资源。输出流,释放占用的所有资源。

Page 29: 第 12 章  学习目的、知识点、基本要求

3 3 文件的随机访问文件的随机访问

* * 建立随机访问文件流对象建立随机访问文件流对象RandomAccessFileRandomAccessFile 类的构造方法类的构造方法(( 11 )) RandomAccessFile(File file, String mode)RandomAccessFile(File file, String mode)

使用指定字符串和存取模式创建其类对象。使用指定字符串和存取模式创建其类对象。(( 22 )) RandomAccessFile(String name, String mode)RandomAccessFile(String name, String mode)

使用指定字符串和存取模式创建其类对象。使用指定字符串和存取模式创建其类对象。存取模式: 存取模式: r__r__ 代表以只读方式打开文件;代表以只读方式打开文件; (mode) rw__(mode) rw__ 代表以读写方式打开文件。代表以读写方式打开文件。

Page 30: 第 12 章  学习目的、知识点、基本要求

3 3 文件的随机访问文件的随机访问* * 访问随机访问文件访问随机访问文件

RandomAccessFileRandomAccessFile 对象的读写操作和对象的读写操作和 DataInput/DataOutputDataInput/DataOutput对象操作方式一样,可以使用在对象操作方式一样,可以使用在 DataInputStreamDataInputStream 和和 DataOutDataOutputStreamputStream 里出现的所有里出现的所有 read()read() 和和 write()write() 方法。方法。

RandomAccessFileRandomAccessFile 类中的常用成员方法:类中的常用成员方法:(1)read()(1)read()(2)read(byte b[])(2)read(byte b[]) (7)getFilePointer()(7)getFilePointer() //// 取文件的指取文件的指针针(3)read(byte b[],int offset,int len)(3)read(byte b[],int offset,int len) (8)length()(8)length()(4)write(int b)(4)write(int b) (9)(9)seek(long pos)//seek(long pos)// 指针放指针放 pospos 处处(5)write(byte b[])(5)write(byte b[]) (10) close()(10) close()(6)write(byte b[],int offset,int len)(6)write(byte b[],int offset,int len)

Page 31: 第 12 章  学习目的、知识点、基本要求

3 3 文件的随机访问文件的随机访问

* * 对文件指针的操作对文件指针的操作——操作遵循的原则——操作遵循的原则

(( 11 )新建)新建 RandomAccessFileRandomAccessFile 对象文件位置指针位于文件开头处。对象文件位置指针位于文件开头处。(( 22 )每次读写操作后,文件位置指针都后移所读写的字节数。)每次读写操作后,文件位置指针都后移所读写的字节数。(( 33 )利用)利用 seek()seek() 方法可以移动文件指针到一个新的位置。方法可以移动文件指针到一个新的位置。(( 44 )利用)利用 getPointer()getPointer() 方法可以获得本文件当前的文件位置指针。方法可以获得本文件当前的文件位置指针。(( 55 )利用)利用 length()length() 方法可以得到文件的字节长度。方法可以得到文件的字节长度。 利用利用 getPointer()getPointer() 方法和方法和 length()length() 方法可以判断读取的文件是方法可以判断读取的文件是否到文件尾部。否到文件尾部。

Page 32: 第 12 章  学习目的、知识点、基本要求

程序分析程序分析import java.io.*;class IO3{ public static void main(String[] args){ String str[]={"First line\n","Second line\n","Last line\n"}; try{ RandomAccessFile rf=new RandomAccessFile("demo.txt","rw"); System.out.println("\n 文件指针位置为: "+rf.getFilePointer()); System.out.println(" 文件的长度为: "+rf.length()); rf.seek(rf.length()); System.out.println(" 文件指针现在的位置为: "+rf.getFilePointer()); for (int i=0; i<3; i++ ) rf.writeBytes(str[i]); // 字符串转换为字节串添加到文件末尾 rf.seek(0); System.out.println("\n 文件现在内容: "); String s; while ((s=rf.readLine())!=null)

System.out.println(s); rf.close(); } catch (FileNotFoundException fnoe){} catch (IOException ioe){} }}

Page 33: 第 12 章  学习目的、知识点、基本要求

上机及课后作业

调试程序:调试程序: 例题例题 22 ,, 44 ,, 55 。。

课后作业:课后作业:例题分析标注,例题例题分析标注,例题 22 ,, 44 ,, 55 。。