第8章输入输出技术_第1页
第8章输入输出技术_第2页
第8章输入输出技术_第3页
第8章输入输出技术_第4页
第8章输入输出技术_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第8章 输入输出技术 8.1 流式输入输出流式输入输出8.2 基本输入输出流基本输入输出流8.3 文件处理类文件处理类8.4 对象流对象流 习习 题题 8.1 流式输入输出流式输入输出 所有的计算机程序都必须接收输入和产生输出。针对输入、输出,Java提供了丰富的类库进行相应的处理,包括从普通的流式输入输出到复杂的文件随机访问。计算机系统使用的信息都是从输入经过计算机流向输出。这种数据流动就称为流(Stream)。输入流指数据从键盘或者文件等输入设备流向计算机;输出流指数据处理结果从计算机流向屏幕或文件等输出设备。 在Java中,通过java.io包提供的类来表示流,基本的输入输出流为Inpu

2、tStream和OutputStream。从这两个基本的输入输出流派生出面向特定处理的流,如缓冲区读写流、文件读写流等。Java定义的流如表8.1所示。 表表8.1 Java定义的输入输出流定义的输入输出流流 描 述 输 入 流 输 出 流 音频输入输出流 AudioInputStream AudioOutputStream 字节数组输入输出流 ByteArrayInputStream ByteArrayOutputStream 文件输入输出流 FileInputStream FileOutputStream 过滤器输入输出流 FilterInputStream FilterOutputStr

3、eam 基本输入输出流 InputStream OutputStream 对象输入输出流 ObjectInputStream ObjectOutputStream 管道输入输出流 PipedInputStream PipedOutputStream 顺序输入输出流 SequenceInputStream SequenceOutputStream 字符缓冲输入输出流 StringBufferInputStream StringBufferOutputStream 8.2 基本输入输出流基本输入输出流8.2.1 InputStream类类 InputStream是抽象类,代表字节输入流的所有类的超

4、类。这个类本身不能使用,只能通过继承它的具体类完成某些操作。它的常用方法如下: public int available() throws IOException 返回流中可用的字节数。 public void close() throws IOException 关闭流并释放与流相关的系统资源。用户使用完输入流时,调用这个方法。 public void mark(int readlimit) throws IOException 输入流中标志当前位置。 public boolean markSupported() throws IOException 测试流是否支持标志和复位。 public

5、 abstract int read() throws IOException 读取输入流中的下一个字节。 public int read(byte b) throws IOException 从输入流中读取字节并存储到缓冲区数组b中,返回读取的字节数,遇到文件结尾返回-1。 public int read(byte b, int off, int len) throws IOException 从输入流中读取len个字节并写入b中,位置从off开始。返回写的字节数。 public void reset() throws IOException 重定位到上次输入流中调用的位置。 public

6、long skip(long n) throws IOException 跳过输入流中n个字节,返回跳过的字节数,遇到文件结尾返回-1。8.2.2 OutputStream类类OutputSteam是抽象类,代表输出字节流的所有类的超类。public void close() throws IOException关闭输出流,释放与流相关的系统资源。 public void flush() throws IOException 清洗输出流,使得所有缓冲区的输出字节全部写到输出设备中。 public void write(byte b) throws IOException 从特定字节数组b将b数

7、组长度个字节写入输出流。 public void write(byte b, int off, int len) throws IOException 从特定字节数组b将从off开始的len个字节写入输出流。 public abstract void write(int b) throws IOException向输出流写一个特定字节。8.2.3 系统输入输出对象系统输入输出对象 Java定义了两个流对象System.in和System.out,允许用户在自己的程序中直接使用。System.in对象允许用户从键盘读取数据,System.out对象可以产生屏幕输出。 【例8.1】使用流对象Sys

8、tem.in和System.out,接收用户从键盘上输入的数据并将数据输出到屏幕上。测试情况如图8.1所示。源程序代码如下:/程序文件名为SystemIO.javaimport java.io.*;public class SystemIO public static void main(String args)int bytes = 0;byte buf = new byte255;System.out.println(n请输入任意文本:);try /接收输入字符串bytes = System.in.read(buf,0,255);System.out.println(这是你输入的文本行:)

9、;String inStr = new String(buf,0,bytes);/输出字符串System.out.println(inStr);catch(IOException e)System.out.println(e.getMessage(); ;图图8.1 例例8.1的屏幕显示的屏幕显示8.3 文文 件件 处处 理理 类类8.3.1 FileInputStream类类 FileInputStream(文件输入流)类是用来得到文件的输入字节流。大部分方法继承于InputStream类。它的构造方法如下: FileInputStream(File file) 通过打开一个到实际文件的链接

10、,创建一个文件输入流,参数file是一个文件对象。 FileInputStream(String name) 通过打开一个到实际文件的链接,创建文件输入流,参数name为文件的实际路径。 【例8.2】使用FileInputStream对象打开源程序文件,源文件的输出如图8.2所示。源程序代码如下:/程序文件名为UseFileInputStream.javaimport java.io.*;public class UseFileInputStream public static void main(String args)byte buf = new byte2056;try /构造文件输入流

11、FileInputStream fileIn = new FileInputStream(UseFileInputStream.java); /存入缓冲bufint bytes = fileIn.read(buf,0,2056);String inStr = new String(buf,0,bytes); /输出文件内容System.out.println(inStr); catch(IOException e) System.out.println(e.getMessage(); ;图8.2 输出源文件内容8.3.2 FileOutputStream类类 FileOutputStream(

12、文件输出流)类是将数据写入File或 FileDescriptor对象的输出流。它的方法大都是从OutStream继承来的,其构造方法如下: FileOutputStream(File file) 创建输出流写到特定的file对象。 FileOutputStream(File file, boolean append) 以追加的方式写入file对象。 FileOutputStream(FileDescriptor fdObj) 创建输出文件流到fdObj对象,代表一个到实际文件的链接。 FileOutputStream(String name) 创建输出流,写到指定的name文件。FileOu

13、tputStream(String name, boolean append) 是否以追加的方式写到指定的name文件。 【例8.3】使用FileOutputStream对象,打开一个文件,写入一行文本,然后追加一行从键盘接收的字符串(如图8.3的上部分所示),文件内容如图8.3的下部分所示。源程序代码如下:/程序文件名为UseFileOutputStream.javaimport java.io.*;public class UseFileOutputStream public static void main(String args)byte buf = new byte255;byte

14、bufIn = new byte255;tryString str = 你好,这是已有的文本;buf = str.getBytes(); /创建文件输出流对象FileOutputStream fileOut = new FileOutputStream(Hello.txt); /写入文件fileOut.write(buf,0,buf.length);fileOut.flush();fileOut.close();System.out.println(n请输入一行文本:); /从键盘接收文本int bytes = System.in.read(bufIn,0,255); /追加文本fileOut

15、 = new FileOutputStream(Hello.txt,true);fileOut.write(bufIn,0,bytes); catch(IOException e) System.out.println(e.getMessage(); ;图8.3 程序运行和写入的文件内容8.3.3 File类类 用户接口和操作系统使用依赖于系统的路径字符串来命名文件和目录。File类就表示这些文件和目录路径,它代表一个抽象的依赖于系统的层次路径视图。File类允许用户向系统查询该文件的所有信息,也可以使用类来创建新的目录或者删除和重命名文件。 当用户需要获得有关文件的信息时,就需要创建一个Fi

16、le类,而当File类用于文件读写时,通常与FileInputStream流相结合。 【例8.4】创建一个临时文件,写入一行数据,然后删除。临时文件的周期说明如图8.4所示。源程序代码如下:/程序文件名为UseFile.javaimport java.io.*;public class UseFile public static void main(String args)tryFile f = new File(temp.txt);System.out.println(创建临时文件);FileOutputStream fout = new FileOutputStream(f);PrintS

17、tream p = new PrintStream(fout);p.println(将这句话放入临时文件);System.out.println(写临时文件);f.deleteOnExit();System.out.println(删除临时文件);catch(IOException e)System.out.println(e.getMessage(); ;图8.4 临时文件的周期说明8.3.4 RandomAccessFile类类 RandomAccessFile(随机访问文件)类的实例支持对随机访问文件的读/写。随机访问文件就像存储在文件系统中的巨大的字节数组,通过游标或者索引(叫做文件指

18、示器)指向这个暗含的数组,输入操作从指示器处读取字节,然后前进指针。如果随机访问文件以可读/写模式创建,那么还支持输出操作,输出操作写到暗含数组的尾端,使得数组得以扩展。 【例8.5】随机访问文件,将文件内容输出,并写入两个字符“O”、“K”。文件内容显示如图8.5的下半部分所示,若文件内容直接输出到屏幕上,则出现如图8.5上半部分所示的乱码问题,添加一个parseChinese方法后,得以修正,输出结果如图8.6所示。源程序代码如下:/程序文件名为UseRandom.javaimport java.io.*;public class UseRandom public static void

19、main(String args)try /构建随机访问文件对象 RandomAccessFile f = new RandomAccessFile(Hello.txt,rw); /得到文件指针和长度 long flag = 0; long len = f.length(); /字符处理后输出 while(flag len) String s = f.readLine();System.out.println(parseChinese(s);flag = f.getFilePointer(); /末尾写入字符f.writeChar(O);f.writeChar(K);catch(IOExcep

20、tion e)System.out.println(e.getMessage();/解决中文转换问题public static String parseChinese(String inStr) String s = null; byte temp; if (inStr = null) return new String(); try temp=inStr.getBytes(iso-8859-1); s = new String(temp); catch(UnsupportedEncodingException e) System.out.println (e.toString(); retu

21、rn s; ;图8.5 文件内容及屏幕输出图8.6 字符处理后的屏幕输出8.4 对对 象象 流流8.4.1 ObjectInputStream类类 ObjectInputStream(对象输入流)可读取使用对象输出流写入的原始数据和类型,与文件输入输出流一起可以实现对象的持久性存储。它的构造函数和一个读对象的方法如下: public ObjectInputStream(InputStream in) throws IOException 从特定的输入流中读取并创建一个对象输入流。 Public Object readObject() 从对象输入流中读取对象。8.4.2 ObjectOutput

22、Stream类类 ObjectOutputStream(对象输出流)可将Java的原始数据类型和图形写入输出流,对象可以使用对象输入流读取,使用文件可以实现对象的持久存储。它的构造函数和一个写对象方法如下: public ObjectOutputStream(OutputStream out) throws IOException 创建一个对象输出流,可以写入特定的输出流。 void writeObject(Object obj) 将对象obj写入对象输出流。 【例8.6】将日期对象和向量对象写入文件,然后从文件中读出并输出到屏幕上,输出结果如图8.7所示。要求向量对象含有三个值“语文”、“数

23、学”和“物理”。源程序代码如下:/程序文件名为UseStream.javaimport java.io.*;import java.util.*;public class UseStream extends Objectpublic static void main(String args) /构建Vector对象Vector v = new Vector();v.add(语文);v.add(数学);v.add(物理);try /文件处理对象File f = new File(temp.txt);FileOutputStream fOut = new FileOutputStream(f);O

24、bjectOutputStream objOut = new ObjectOutputStream(fOut); /写入日期对象objOut.writeObject(new Date(); /写入Vector对象objOut.writeObject(v);objOut.close(); /构建readObj的实例readObj rObj = new readObj(); /调用方法输出rObj.readO(); catch(IOException e) System.out.println(e.getMessage(); ;/自定义类,实现读取对象并输出class readObj extends Object public void readO() try /文件处理对象File f = new File(temp.txt);FileInp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论