第 12 章 学习目的、知识点、基本要求
330 likes | 575 Views
第 12 章 学习目的、知识点、基本要求. 学习目的: 把不同类型的输入、输出源抽象为流 (Stream) ,用来统一表示。从而进行 Java 程序输入、输出的实现和文件与目录管理。 基本知识点: * 学习输入、输出流的基本概念; * 学习 字节流和字符流的概念; * 学习 字节流和字符流类及其子类的常用方 法及其作用; * 学习 文件与目录的管理类 File ; * 学习 文件访问的基本步骤。. 第 12 章 学习目的、知识点、基本要求. 基本要求: * 掌握输入、输出流的基本概念; * 掌握字节流和字符流的概念;
第 12 章 学习目的、知识点、基本要求
E N D
Presentation Transcript
第12章 学习目的、知识点、基本要求 学习目的: 把不同类型的输入、输出源抽象为流(Stream),用来统一表示。从而进行Java程序输入、输出的实现和文件与目录管理。 基本知识点: * 学习输入、输出流的基本概念; * 学习字节流和字符流的概念; * 学习字节流和字符流类及其子类的常用方 法及其作用; * 学习文件与目录的管理类File; * 学习文件访问的基本步骤。
第12章 学习目的、知识点、基本要求 基本要求: * 掌握输入、输出流的基本概念; * 掌握字节流和字符流的概念; * 掌握字节流和字符流类及其子类的常用方 法及其作用; * 理解并掌握文件与目录的管理类File; * 掌握文件访问的基本步骤。
第12章 输入与输出 12.1 输入输出流类 12.2 目录和文件管理 12.3 字节流类 12.4 字符流类 12.5 文件的访问
12.1输入输出流类 1 输入/输出流概念 数据流(Stream): 是所有数据通信通道之中数据的起点和终点。 输入数据流—— 表示从外部设备到到计算机的数据流动 输出数据流—— 表示从计算机到外部设备的数据流动 缓冲流—— 使用缓冲区为一个流配备的一个缓冲区
2 Java标准数据流 System类是继承Object类终极类,它有三个表示标准输入、标准输出和标准错误的类变量 (1) 标准输入:in public static final InputStream in //对应键盘输入 (2) 标准输出:out public static final OutputStream in //对应显示器输出 (3) 标准错误:err public static final PrintStream err //对应显示器输出
程序分析 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); } }
3 Java.io包中数据流类文件 输入输出类库—— java.io包提供了60多个输入流类和输出流类 从结构上分两类(4个基本流类): 字符流: Reader, Writer 字节流: InputStream, OutputStream
12.2 目录和文件管理——File类 java.io.File类是java.lang.Object的子类 File类是专门用来管理磁盘文件和目录的。 每个File类的对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息,如文件或目录的名称、文件的长度、目录中所含文件的个数等。 调用File类的方法则可以完成对文件或目录的常用管理操作,如创建文件或目录、删除文件或目录、查看文件的有关信息等。
12.2 目录和文件管理——File类 1 创建File类对象的构造方法 public File(String path): 使用指定路径构造一个对象。 public File(String path, String name): 使用指定路径和字符串构造一个对象。 public File(File dir, String name): 使用指定文件目录和字符串构造一个对象。
12.2 目录和文件管理——File类 2 File类的常用方法——
12.2 目录和文件管理——File类 2 File类的常用方法——
12.3 字节流类 字节流类(InputStream类及其继承派生关系) 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()
12.3 字节流类 字节流类( OutputStream类及其继承派生关系) 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()关闭输出流
数据介质 数 据 介 质 InputStream对象 OnputStream对象 读入 1B 1B 1B 1B 写出 12.3 字节流类 字节输入流与字节输出流
12.4 字符流类 字符流类(Reader类及其继承派生关系) java .lang.Object java.io.Reader java.io.BufferedReader java.io.LineNumberReader java.io.CharArryReader java.io.FilerReader java.io.PushbackReader java.io.InputStreamReader java.io.FileReader java.io. PipedReader java.io.StringReader
12.4 字符流类 字符流类(Witer类及其继承派生关系) java .lang.Object java.io.Witer java.io.BufferedWiter java.io.CharArryWiter java.io.FilerWiter java.io.OutputStreamWiter java.io.FileWiter java.io. PipedWiter java.io.StringWiter java.io.PrintWiter
数据介质 数 据 介 质 若干字节 若干字节 Reader 对象 读入 1个字符 Writer 对象 1个字符 写出 12.4 字符流类 字符输入流与字符输出流
Object InputStream OutputStream RandomAccessFile FilterInputStream FilterOutputStream DataInputStream DataOutputStream DataInput DataOutput 输入和输出接口的使用
程序分析 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(); } } 基于字符型的文件输入输出流与缓冲流的应用。
12.5 文件的访问 输入/输出流操作的一般步骤: 1 使用引入语句引入包:import java.io.*; 2 根据不同数据源和输入输出任务,建立字节流 或字符流对象。 3 若需要对字节或字符流信息组织加工为数据, 在已建字节流或字符流对象上构建数据流对象。 4 用输入输出流对象类的成员方法进行读写操 作,需要时设置读写位置指针。 5 关闭流操作。
文件的顺序访问—1 文件字符流 FileReader类和FileWriter类 FileReader类用于读取文件字符数据。 * FileReader类的构造方法 (1)FileReader(String fileName) 使用指定的文件名创建一个FileReader对象。 (2)FileReader(File file) 使用指定的文件对象创建一个FileReader对象。 (3)FileReader(FileDescriptor fd) 使用指定的文件描述符创建一个FileReader对象。
文件的顺序访问—1文件字符流 FileReader类和FileWriter类 FileWriter类用于向文件写入字符数据。 * FileWriter类的构造方法 (1)FileWriter(String fileName) 使用指定的文件名创建一个FileWriter对象。 (2)FileWriter(File file) 使用指定的文件对象创建一个FileWriter对象。 (3)FileWriter(FileDescriptor fd) 使用指定的文件描述符创建一个FileWriter对象。
文件的顺序访问—1 文件字符流 FileReader类和FileWriter类 FileReader类和FileWriter类的成员方法 这两个类没有自己独特的成员方法,它们的 成员方法都直接继承自父类的。
文件的顺序访问—2 文件字节流 FileInputStream类: 用于读取文件中字节数据的字节文件输入流类。 * FileInputStream类构造方法 (1)使用指定的字符串创建一个FileInputStream对象。 FileInputStream(String name) (2)使用指定的文件对象创建一个FileInputStream对象。 FileInputStream(File file) (3)使用指定的FileDescriptor创建一个FileInputStream对象。 FileInputStream(FileDescriptor fdObj)
文件的顺序访问—2 文件字节流 FileInputStream类: 用于读取文件中字节数据的字节文件输入流类。 * FileInputStream类的常用成员方法 (1)read(): 自输入流中读取一个字节。 (2)read(byte b[]):将输入数据存放在指定的字节数组b中 (3)read(byte b[],int offset, int len):自输入流中的offset位 置开始读取len个字节并存放在指定的数组b中。 (4)available():返回输入流中的可用字节个数。 (5)skip(long n):从输入流中跳过n个字节。
文件的顺序访问—2 文件字节流 FileOutputStream类: 用于向文件写入字节数据的字节文件输出流。 * FileOutputStream类构造方法 (1)使用指定的字符串创建一个FileOutputStream对象。 FileOutputStream(String name) (2)使用指定的文件对象创建一个FileOutputStream对象。 FileOutputStream(File file) (3)使用指定的FileDescriptor创建一个FileOutputStream对象。 FileOutputStream(FileDescriptor fdObj)
文件的顺序访问—2 文件字节流 FileOutputStream类: 用于向文件写入字节数据的字节文件输出流。 * FileOutputStream类的常用成员方法 (1)write(int b): 写入一个字节到文件输入流。 (2)write(byte b[]):写一个字节数组。 (3)write(byte b[],int offset, int len):将字节数组b从offset位 置开始的len个字节数组的数据写到输出流中。 (4)getFD():获取与此流关联的文件描述符。 (5)close(long n):关闭输入/输出流,释放占用的所有资源。
3 文件的随机访问 * 建立随机访问文件流对象 RandomAccessFile类的构造方法 (1)RandomAccessFile(File file, String mode) 使用指定字符串和存取模式创建其类对象。 (2)RandomAccessFile(String name, String mode) 使用指定字符串和存取模式创建其类对象。 存取模式: r__代表以只读方式打开文件; (mode) rw__代表以读写方式打开文件。
3 文件的随机访问 * 访问随机访问文件 RandomAccessFile对象的读写操作和DataInput/DataOutput对象操作方式一样,可以使用在DataInputStream和DataOutputStream里出现的所有read()和write()方法。 RandomAccessFile类中的常用成员方法: (1)read() (2)read(byte b[]) (7)getFilePointer()//取文件的指针 (3)read(byte b[],int offset,int len) (8)length() (4)write(int b) (9)seek(long pos)//指针放pos处 (5)write(byte b[]) (10) close() (6)write(byte b[],int offset,int len)
3 文件的随机访问 * 对文件指针的操作——操作遵循的原则 (1)新建RandomAccessFile对象文件位置指针位于文件开头处。 (2)每次读写操作后,文件位置指针都后移所读写的字节数。 (3)利用seek()方法可以移动文件指针到一个新的位置。 (4)利用getPointer()方法可以获得本文件当前的文件位置指针。 (5)利用length()方法可以得到文件的字节长度。 利用getPointer()方法和length()方法可以判断读取的文件是否到文件尾部。
程序分析 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=newRandomAccessFile("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){} } }
上机及课后作业 调试程序: 例题2,4,5。 课后作业: 例题分析标注,例题2,4,5。