JAVA IO流学生课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

InputStream类层次
FileInputStream ObjectInputStream PipedInputStream InputStream SequenceInputStream PushbackInputStream FilterInputStream StringBufferInputStream LineNumberInputStream ByteArrayInputStream BufferedInputStream DataInputStream
FileOutputStream out; //声明一个Print Stream流 PrintStream p; try { out = new FileOutputStream("myfile.txt"); p = new PrintStream( out ); p.println ("面朝大海,春暖花开"); p.close(); } catch (Exception e) { System.err.println ("Error writing to file"); }
通过Stream拷贝文本文件例子(示例10-3)
通过FileInputStream和FileOutputStream,实现 从一个文本文件拷贝内容到另一个文件的例子 通过FileInputStream从源文本文件中读出数据, 然后通过FileOutputStream写入到另外一个文本 文件中。 使用高级流 (BufferedInputStream/BufferedOutputStream) 对低级流进行包装
其他方法:
void close():关闭Reader流。 boolean ready():判断流是否已经准备好被读取。 skip(long n):跳过指定的n个字符。 boolean markSupported():和InputStream中的markSupported方 法类似。 void mark(int readAheadLimit):和InputStream中的mark方法类似。 void reset():和InputStream中的reset方法类似。
Reader相关类
低级Reader类:
CharArrayReader: StringReader PipedReader FileReader
高级Reader类
BufferedReader InputStreamReader LineNumberReader
Reader类层次
PipedReader
OutputStream基本方法
三个基本的write方法:
void write(int c) void write(byte[] buffer) void write(byte[] buffer, int offset, int length)
其它方法
void close() void flush():将缓冲中的字节发送到流中,同时清空缓冲区
Java流
本节主要内容
流的概述 流的分类 InputStream/OutputStream Reader/Writer 流的几种典型流向 RandomAccessFile的用法
I/O流概述
为进行数据的输入/输出操作,Java中把不同的输入/输出源(键盘、文件、 网络连接等)抽象表述为“流”(stream)。 Stream是从起源(source)到接收(sink)的有序数据 java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能。 按照流的方向分两种基本的流:输入流和输出流
节点流和处理流
按照流的角色划分,分为节点流和处理流 可以从/向一个特定的IO设备(如磁盘、网络)读/写数据的流,称为 节点流。节点流也被称为低级流。例如:InputStream和Reader的子类 都有read()的方法,OutputStream和Writer的子类都有write()的方法,用 于读取/写入一个字节或字节数组.但是在实际使用中很少使用单一流 类产生的输入/输出流.而是使用这两个方法给其他的流类提供数据
节点流 处理流
InputStream例子(示例10-1)
byte[] buff = new byte[1024]; int n; FileInputStream fis = null; try{ fis = new FileInputStream(“C:\\a.txt”); while((n = fis.read(buff))!=-1){ System.out.write(buff, 0, n); } } catch (FileNotFoundException e){ System.out.println("没有找到文件"); System.exit(1); } ……
InputStream基本方法
三个基本的read方法: • int read():读取一个字节,并将它返回。 • int read(byte[] buffer):将数据读入一个字节数组,同时返回读取的字节 数。 • int read(byte[] buffer, int offset, int length):将数据读入一个字节 数组,放到数组的offset指定的位置开始,并用length来指定读取的最大字节 数。 注意:以上三个方法在读取到文件末尾时,都返回-1.可以用来判断是否全部读 注意:以上三个方法在读取到文件末尾时,都返回-1.可以用来判断是否全部读 取文件
输入流 :只能从中读取字节数据,而不能向其写出数据 输出流 :只能向其写入字节数据,而不能从中读取数据
按照流所处理的数据类型划分,可以分为:
字节流:用于处理字节数据(8个bit) 包括InputStream/OutputStream。 字符流:用于处理Unicode字符数据(16个bit)。 包括Writer/Reader
Reader/Writer
Reader/Writer处理的是字符类型的数据。它处理 流的方式是以字符为单位进行的。 Reader/Writer和InputStream/OutputStream一样, 也分为节点流(低级流)和处理流(高级流)。 Reader和InputStream一样,用于从流中读取数据。 它和InputStream的区别在于,InputStream以字节 为单位操作流,而Reader以字符为单位操作流。
DataOutputStream:可以向低级流中写入简单数据和 String类型的数据.这样,可以将底层的写入细节隐藏起来, 而直接处理简单类型和String类型的数据 BufferedOutputStream:提供缓冲能力的字节输出流
OutputStream类层次
FileOutputStream
InputStreamReader
InputStreamReader能将字节流转换为一个Reader,即能将字 节流转换为字符流
public static void readRile() { try { InputStreamReader isr = new InputStreamReader(new FileInputStream("c:\\a.txt")); BufferedReader bufferedReader = new BufferedReader(isr) String str = ""; while ((str =bufferedReader.readLine() ) != null){ System.out.println(str); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
• • • • • •
其它方法: void close():关闭流。 int available():返回可以从中读取的字节数。 long skip(long n):在输入流中跳过n个字节,将实际跳过的字节数返回。 boolean markSupported():判断流是否支持标记功能。 void mark(int readlimit):在支持标记的输入流的当前位置设置一个标记。 void reset():返回到流的上一个标记。注意必须流支持标记功能。
CharArrayReader
从内存的字符串数组中读取字符,它的数据源是一个字符数组,它把字符数组 类型转换为Reader类型: public static void readRile() { char [] arrays = {'a','你','好','啊','t'}; CharArrayReader reader = new CharArrayReader(arrays); int i = 0; try { while ( (i = reader.read()) != -1){ System.out.print((char)i); } } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } reader.close(); }
OutputStream类
低级OutputStream,用来向设备中写入字节流
OutputStream:所有字节输出流的基类 ByteArrayOutputStream :按字节数组方式向设备中写入 字节流的类 PipedOutputStream: PipedOutputStream:管道输出流
高级OutputStream
节点流 处理流
ObjectOutputStream DataOutputStream OutputStream FilterInputStream PrintStream BufferedOutputStream PiptStream
OutputStream例子(示例10-2)
节点流
CharArrayReader StringReader InputStreamReader BufferedReader FilterReader
处理流
Reader
FileReader LineNumberReader PushbackReader
Reader例子(示例10-4)
FileReader fr = new FileReader("C:/nos/tmp/mydata.txt"); BufferedReader br = new BufferedReader(fr); String record = new String(); while ((record = br.readLine()) != null) { recCount++; System.out.println("Line" + recCount + ": " + record); }
Reader常用方法
读取方法:
int read():用于从流中读出一个字符,并将它返回。 int read(char[] buffer):将从流中读出的字符放到字符数组buffer中, 返回读出的字符数。 int read(char[] buffer,int offset,int length):将读出的字符放到字符 数组的指定offset开始的空间,每次最多读出length个字符。
常见InputStream类
低级InputStream类(节点流): InputStream:所有字节流的超类,定义了很多用于处理输入流的 方法,是个抽象类 ByteArrayInputStream:为读取字节数组设计的流,用于从文件 中读取二进制数据 PipedInputStream:管道流, FileInputStream:用于读取文件中的信息 FilterInputStream:继承自InputStream,能将一个流连接到另一 个流的末端,将两个流连接起来 高级InputStream类(处理流): DataInputStream:可以从低级流中读取简单数据和String类型 的数据.这样,可以将底层的读取细节隐藏起来,而直接处理简单 类型和String类型的数据 BufferedInputStream:提供缓冲能力的字节输入流
数据源
程序
• 实现对一个已存在的流的连接和封装,通过所封装的流的功能调用
实现数据读/写功能的流,称为处理流 处理流也被称为高级流。 实现数据读/写功能的流,称为处理流。处理流也被称为高级流。 处理流。
数据源 程序
InputStream/OutputStream
InputStream/OutputStream用于处理字节数 据。它们读/写流的方式都是以字节为单位 进行的。
相关文档
最新文档