《第09章 输入输出流和文件操作(修改2缩减)》由会员分享,可在线阅读,更多相关《第09章 输入输出流和文件操作(修改2缩减)(51页珍藏版)》请在金锄头文库上搜索。
1、第9章 输入输出流和文件操作w流的基本概念 w流类nInputStream抽象字节输入流类nOuputStream 抽象字节输出流类nReader抽象字符输入流类nWriter抽象字符输出流类 w文件操作类nFile文件类nRandomAccessFile随机存取文件类第9章 本章主要内容9.19.1流的基本概念n流(stream)是指一组有顺序、有起点和终点的字节集合,是对数据传输的总称或抽象。数据在两个对象之间的传输称为流。n流的方向:数据由外部输入设备流向内存的过程称为数据输入;由内存流向外部输出设备的过程称为数据输出。因此,从程序所在的内存角度看,流入内存的为输入流,流出内存的为输出流
2、。n流的基本操作:读和写。从流中取得数据的操作称为读;向流中添加数据的操作称为写。输入流只能进行读;输出流只能进行写。9.19.1流的基本概念在程序代码中,用输入流从外部设备中读取数据到内存;用输 出流将内存数据写到外部设备中。 不同的外部设备对应不 同的流类。 程序代码(内存中)输入流输出流键盘显示器打印机文件文件读取写入标准输入流标准输出流文件输入流文件输出流9.19.1流的基本概念流采用缓冲区技术:对流进行读/写操作,一次只能读/写一个字节,数据传输效率低。为提高效率,将一块内存空间设计成缓冲区。配备缓冲区的流称为缓冲流。n当向流写入数据时,数据被发送到缓冲区,当缓冲区满时,系统将数据全
3、部发送到相应的设备。如果在此之前要传输数据,可以使用flush()操作;n当从流读取数据时,系统实际从缓冲区读。当缓冲区空时,系统就从相关设备自动读取数据充满缓冲区。9.19.1流的基本概念java.io包中的数据流n字节流:以字节作为流中元素的基本类型。n字符流:以字符作为流中元素的基本类型。nInputStream抽象的字节输入流根类nOuputStream抽象的字节输出流根类nReader抽象的字符输入流根类nWriter抽象的字符输出流根类9.2 字节输入/输出流类9.2.1 抽象字节流9.2.2 Java标准输入/输出9.2.3 文件字节流9.2.4 数据字节流9.2.5 对象字节流
4、9.2 .19.2 .1抽象抽象字节流n字节输入流类InputStream :所有面向字节的输入流超类。 public abstract class InputStream extends Object implements Closeable public abstract int read() throws IOException; /返回读取的一个字节,抽象方法public int read(byte b) throws IOException/读取若干字节到指定缓冲区b,返回实际读取的字节数public void close() throws IOException/关闭输入流 Inp
5、utStream类的子类9.2 .19.2 .1抽象抽象字节流n字节输出流类OutputStream:所有面向字节的输出流超类。 public abstract class OutputStream extends Object implements Closeable, Flushable public abstract void write(int b) throws IOException; /写入一个字节,抽象方法public void write(byte b) throws IOException /将缓冲区中的若干字节写入输出流public void flush() throws
6、 IOException /立即传输public void close() throws IOException/关闭输出流 OutputStream类的子类9.2 .19.2 .1抽象抽象字节流1、字节输入流InputStream类 :所有面向字节的输入流的超类。2、字节输出流OutputStream类:所有面向字节的输出流的超类。字节流相关内容: 标准输入/输出流 文件字节流 数据字节流 对象字节流9.2.2 Java标准输入/输出n标准输入/输出常量 public final class System extends Object public final static InputStr
7、eam in /标准输入常量public final static PrintStream out /标准输出常量public final static PrintStream err/标准错误输出常 量 System.in是InputStream类的常量对象,调用read()方法可以从键盘接收数据;System.out是PrintStream类的常量对象,调用print()和println()方法可以向显示器输出数据。 nPrintStream类 public class PrintStream extends FilterOutputStream public void print(boo
8、lean b) public void print(char c) public void print(long l)public void print(int i) public void print(float f) public void print(double d) public void print(String s) public void print(Object obj) public void println() 9.2.2 Java标准输入/输出 【例9.1】 标准输入/输 出图9.5 标准输入过程 图9.6 标准输出过程9.2.3 文件字节流1、文件字节输入流(File
9、InputStream)用于从文件读数据。构造方法npublic FileInputStream (String name) throws FileNotFoundExceptionnpublic FileInputStream (File file) throws FileNotFoundException读取字节的方法npublic int read() throws IOExceptionnpublic int read(byte b) throws IOExceptionnpublic int read(byte b ,int off , int len) throws IOExcep
10、tion关闭输入流npublic void close() throws IOException例子: FileInputStream fin = new FileInputStream (“文件1”); /创建“文件1”的输入流对象 count = fin.read(buffer); /从文件1中读取的数据放入数组buffer中, count中是返回读出 的字节数,当返回-1时文件读完。 fin.close();/关闭输入流9.2.3 文件字节流2、文件字节输出流(FileOutputStream)用于向文件写数据。 构造方法npublic FileOutputStream (String
11、name) throws FileNotFoundExceptionnpublic FileOutputStream (File file) throws FileNotFoundExceptionnpublic FileOutputStream (String name, Boolean append) throws FileNotFoundException 写入字节的方法npublic int write(int b) throws IOException npublic int write (byte b) throws IOException npublic int write (b
12、yte b ,int off , int len) throws IOException 关闭输出流npublic void close() throws IOException例子: FileOutputStream fout = new FileOutputStream(“文件1”); /创建“文件1”的输出流对象fout.write(buffer); /将buffer数组中的数据写入输出流,即写入到文件中。fout.close(); /关闭输出流9.2.3 文件字节流append:默认falsentrue为添加方式,数据添加在原文件的末尾nfalse为重写方式,数据从原文件开始处写入,覆
13、盖文件中原有的数据。读文件时指定文件不存在,抛出异常;写文件时指定文件不存在,则创建一个新文件写入数据。9.2.3 文件字节流 【例9.2】 使用文件字节输入/输出流实现文件的输入/输出操作。n文件输入操作n文件输出操作n文件复制操作 9.2.4 数据字节流数据流允许程序按与机器无关的风格读取或写入数据。可以读取或写入任何Java类型数据。数据输入流DataInputStream数据输出流DataOutputStream以前只能写字节数据 现在任何JAVA数据 类型的数据都能写 了!数据字节流是在字节流的基础上对数据进行加工! 真正进行传输的还是字节流!9.2.4 数据字节流nDataInpu
14、tStream类 public class DataInputStream extends FilterInputStream implements DataInput public DataInputStream(InputStream in) /构造方法public final short readShort() throws IOException public final byte readByte() throws IOException public final int readInt() throws IOException /读取一个整型public final long re
15、adLong() throws IOException public final float readFloat() throws IOException public final double readDouble() throws IOException public final char readChar() throws IOException /读取一个字符public final boolean readBoolean() throws IOException 当输入流结束时,抛出EOFException异常; 发生I/O错误时,抛出IOEception异常。FileInputStream fin = new FileInputStream (“文件1”); /创建“文件1”的输入流对象 DataInputStream din = new DataInputStream(fin); int arrInt = din.readInt(); /从“文件1”中读取一个int类型数据放入arrInt变量中。 din.close(); fin.close();/关闭输入流9.2.4 数据字节流nDataOutputStream类 public class DataOutputStrea