Java输入、输出流
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章输入输出流
【课前思考】
1.字节流和字符流的基类各是什么?
2.什么是对象的串行化?对象串行化的作用是什么?
【学习目标】
本讲主要讲述了java语言中的输入/输出的处理,通过本讲的学习,同学们可以编写更为完善的java 程序。
【学习指南】
仔细阅读本章各知识点的内容, 深刻理解 java 语言中输入/输出流的处理方法,掌握处理问题的方法,多练习,多上机。
【难重点】
●遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流。
●正确使用对象串行化的方法。
●处理字符流时,其构造方法的参数是一个字节流。
●对象串行化的概念。
【知识点】
●I/O 流概述
●文件处理
●过滤流
●字符流的处理
●对象的串行化
●其它常用的流
【内容】
第一节数据流的基本概念
理解数据流
流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个数人流,而屏幕则只是一个输出流。
Java的标准数据流
标准输入输出指在字符方式下(如DOS),程序与系统进行交互的方式,分为三种:
标准输入studin,对象是键盘。
标准输出stdout,对象是屏幕。
标准错误输出stderr,对象也是屏幕。
例 8.1 从键盘输入字符。
本例用System.in.read(buffer)从键盘输入一行字符,存储在缓冲区buffer中,count保存实际读入的字节个数,再以整数和字符两种方式输出buffer中的值。Read方法在java.io包中,而且要抛出IOException异常。程序如下:
import java.io.*;
public class Input1
{
public static void main(String args[]) throws IOException
{
System.out.println("Input: ");
byte buffer[] = new byte[512]; //输入缓冲区
int count = System.in.read(buffer); //读取标准输入流
System.out.println("Output: ");
for (int i=0;i { System.out.print(" "+buffer[i]); } System.out.println(); for (int i=0;i { System.out.print((char) buffer[i]); } System.out.println("count = "+ count); //buffer实际长度 } } 程序中,main方法采用throws子句抛出IOException异常交由系统处理。 Java.io包中的数据流及文件类 字节流: 从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。 ●InputStream、OutputStream ●◇ FileInputStream、FileOutputStream ●◇ PipedInputStream、PipedOutputStream ●◇ ByteArrayInputStream、ByteArrayOutputStream ●◇ FilterInputStream、FilterOutputStream ●◇ DataInputStream、DataOutputStream ●◇ BufferedInputStream、BufferedOutputStream 字符流: 从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位 Reader、Writer ◇ InputStreamReader、OutputStreamWriter ◇ FileReader、FileWriter ◇ CharArrayReader、CharArrayWriter ◇ PipedReader、PipedWriter ◇ FilterReader、FilterWriter ◇ BufferedReader、BufferedWriter ◇ StringReader、StringWriter 第二节字节流初步 InputStream 和OutputStream ●read():从流中读入数据 ●skip():跳过流中若干字节数 ●available():返回流中可用字节数 ●mark():在流中标记一个位置 ●reset():返回标记过得位置 ●markSupport():是否支持标记和复位操作 ●close():关闭流 ●int read() 从输入流中读一个字节,形成一个0~255之间的整数返回(是一个抽象方法)。 ●int read(byte b[]) 读多个字节到数组中。 ●int read(byte b[], int off, int len) ●write(int b) 将一个整数输出到流中(只输出低位字节,抽象) ●write(byte b[]) 将字节数组中的数据输出到流中 ●write(byte b[], int off, int len) 将数组b中从off指定的位置开始,长度为len的数据输出到流中 ●flush():刷空输出流,并将缓冲区中的数据强制送出 ●close():关闭流 从输入流中读取长度为len的数据,写入数组b中从索引off开始的位置,并返回读取得字节数。 进行I/O操作时可能会产生I/O例外,属于非运行时例外,应该在程序中处理。如:型 FileNotFoundException, EOFException, IOException 例 8.2 打开文件。 本例以FileInputStream的read(buffer)方法,每次从源程序文件OpenFile.java中读取512个字节,存储在缓冲区buffer中,再将以buffer中的值构造的字符串new String(buffer)显示在屏幕上。程序如下: import java.io.*; public class OpenFile { public static void main(String args[]) throws IOException { try { //创建文件输入流对象 FileInputStream rf = new FileInputStream("OpenFile.java"); int n=512; byte buffer[] = new byte[n]; while ((rf.read(buffer,0,n)!=-1) && (n>0)) //读取输入流 { System.out.print(new String(buffer)); } System.out.println(); rf.close(); //关闭输入流 } catch (IOException ioe) { System.out.println(ioe); } catch (Exception e) {