您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Java输入、输出流
Java2程序设计实用教程(电子教案)第1页共20页第八章输入输出流【课前思考】1.字节流和字符流的基类各是什么?2.什么是对象的串行化?对象串行化的作用是什么?【学习目标】本讲主要讲述了java语言中的输入/输出的处理,通过本讲的学习,同学们可以编写更为完善的java程序。【学习指南】仔细阅读本章各知识点的内容,深刻理解java语言中输入/输出流的处理方法,掌握处理问题的方法,多练习,多上机。【难重点】遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流。正确使用对象串行化的方法。处理字符流时,其构造方法的参数是一个字节流。对象串行化的概念。【知识点】I/O流概述文件处理过滤流字符流的处理对象的串行化其它常用的流【内容】第一节数据流的基本概念理解数据流流一般分为输入流(InputStream)和输出流(OutputStream)两类,但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个数人流,而屏幕则只是一个输出流。Java的标准数据流标准输入输出指在字符方式下(如DOS),程序与系统进行交互的方式,分为三种:标准输入studin,对象是键盘。标准输出stdout,对象是屏幕。标准错误输出stderr,对象也是屏幕。例8.1从键盘输入字符。本例用System.in.read(buffer)从键盘输入一行字符,存储在缓冲区buffer中,count保存实际读入的字节个数,再以整数和字符两种方式输出buffer中的值。Read方法在java.io包中,而且要抛出IOException异常。程序如下:importjava.io.*;publicclassInput1{publicstaticvoidmain(Stringargs[])throwsIOException{System.out.println(Input:);Java2程序设计实用教程(电子教案)第2页共20页bytebuffer[]=newbyte[512];//输入缓冲区intcount=System.in.read(buffer);//读取标准输入流System.out.println(Output:);for(inti=0;icount;i++)//输出buffer元素值{System.out.print(+buffer[i]);}System.out.println();for(inti=0;icount;i++)//按字符方式输出buffer{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和OutputStreamread():从流中读入数据skip():跳过流中若干字节数available():返回流中可用字节数mark():在流中标记一个位置reset():返回标记过得位置markSupport():是否支持标记和复位操作Java2程序设计实用教程(电子教案)第3页共20页close():关闭流intread()从输入流中读一个字节,形成一个0~255之间的整数返回(是一个抽象方法)。intread(byteb[])读多个字节到数组中。intread(byteb[],intoff,intlen)write(intb)将一个整数输出到流中(只输出低位字节,抽象)write(byteb[])将字节数组中的数据输出到流中write(byteb[],intoff,intlen)将数组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中的值构造的字符串newString(buffer)显示在屏幕上。程序如下:importjava.io.*;publicclassOpenFile{publicstaticvoidmain(Stringargs[])throwsIOException{try{//创建文件输入流对象FileInputStreamrf=newFileInputStream(OpenFile.java);intn=512;bytebuffer[]=newbyte[n];while((rf.read(buffer,0,n)!=-1)&&(n0))//读取输入流{System.out.print(newString(buffer));}System.out.println();rf.close();//关闭输入流}catch(IOExceptionioe){System.out.println(ioe);}catch(Exceptione){Java2程序设计实用教程(电子教案)第4页共20页System.out.println(e);}}}例8.3写入文件。本例用System.in.read(buffer)从键盘输入一行字符,存储在缓冲区buffer中,再以FileOutStream的write(buffer)方法,将buffer中内容写入文件Write1.txt中,程序如下:importjava.io.*;publicclassWrite1{publicstaticvoidmain(Stringargs[]){try{System.out.print(Input:);intcount,n=512;bytebuffer[]=newbyte[n];count=System.in.read(buffer);//读取标准输入流FileOutputStreamwf=newFileOutputStream(Write1.txt);//创建文件输出流对象wf.write(buffer,0,count);//写入输出流wf.close();//关闭输出流System.out.println(SavetoWrite1.txt!);}catch(IOExceptionioe){System.out.println(ioe);}catch(Exceptione){System.out.println(e);}}}第三节文件操作File类File类声明如下:publicclassFileectendsObjectimplementsSerializable,Comparable构造方法:publicFile(Stringpathname)publicFile(Filepatent,Stringchile)publicFile(Stringpatent,Stringchild)文件名的处理StringgetName();//得到一个文件的名称(不包括路径)Java2程序设计实用教程(电子教案)第5页共20页StringgetPath();//得到一个文件的路径名StringgetAbsolutePath();//得到一个文件的绝对路径名StringgetParent();//得到一个文件的上一级目录名StringrenameTo(FilenewName);//将当前文件名更名为给定文件的完整路径文件属性测试booleanexists();//测试当前File对象所指示的文件是否存在booleancanWrite();//测试当前文件是否可写booleancanRead();//测试当前文件是否可读booleanisFile();//测试当前文件是否是文件(不是目录)booleanisDirectory();//测试当前文件是否是目录普通文件信息和工具longlastModified();//得到文件最近一次修改的时间longlength();//得到文件的长度,以字节为单位booleandelete();//删除当前文件目录操作booleanmkdir();//根据当前对象生成一个由该对象指定的路径Stringlist();//列出当前目录下的文件例8.4自动更新文件。本例使用File类对象对指定文件进行自动更新的操作。程序如下:importjava.io.*;importjava.util.Date;importjava.text.SimpleDateFormat;publicclassUpdateFile{publicstaticvoidmain(Stringargs[])throwsIOException{Stringfname=Write1.txt;//待复制的文件名Stringchilddir=backup;//子目录名newUpdateFile().update(fname,childdir);}publicvoidupdate(Stringfname,Stringchilddir)throwsIOException{Filef1,f2,child;f1=newFile(fname);//当前目录中创建文件对象f1child=newFile(childdir);//当前目录中创建文件对象childif(f1.exists()){if(!child.exists())//child不存在时创建子目录child.mkdir();f2=newFile(child,fname);//在子目录child中创建文件f2if(!f2.exists()||//f2不存在时或存在但日期较早时f2.exists()&&(f1.lastModified()f2.lastModified()))copy(f1,f2);//复制getinfo(f1);Java2程序设计实用教程(电子教案)第6页共20页getinfo(child);}elseSystem.out.println(f1.getName()+filenotfound!
本文标题:Java输入、输出流
链接地址:https://www.777doc.com/doc-6068290 .html