资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,知识回顾,图形用户界面的事件处理,图形用户界面事件处理机制,事件处理机制,组件添加事件监听,事件处理对象实现,事件捕获对象实现,AWT,实现事件处理元素,AWT,事件类型,监听器接口,适配器类,常见事件处理,焦点事件,窗口事件,键盘事件,鼠标事件,事件处理中的特殊类,匿名类,内部类,实现多监听器,多事件处理的模式,多个监听器,10,I/O,输入与输出,第,章,本章目标,理解流,掌握字节流,掌握过滤流,掌握字符流,运用文件和文件名过滤器,实现记事本程序,步骤一:创建记事本图形用户界面,步骤二:实现打开文件操作,步骤三:将打开文件内容读取到文本编辑框,步骤四:在编辑框内修改文件内容,步骤五:保存文件到磁盘,记事本项目操作演示,File,类,File,类用来进行文件的相关操作,它描述的是文件本身的属性。,File,类创建的,File,对象是可以用来获取磁盘文件的相关信息。例如:权限、时间、日期、目录路径或目录层次结构。,File,类被封装在,java.io,包中。,构造方法,说明,File,(,String,pathname),通过将给定路径名字符串转换成抽,象路径名来创建一个新,File,实例,File,类的常用方法,方法,说明,boolean,createNewFile,(),抽象路径名指定名称的文件不存在时,创建由此抽象路径名指定的新的空文件,boolean,delete(),删除此抽象路径名表示的文件或目录,boolean,exists(),测试此抽象路径名表示的文件或目录是否存在,boolean,renameTo(File,dest,),重新命名此抽象路径名表示的文件,Boolean,deleteOnExit,(),在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,File,类实例,import,java.io,.*;,public class,FileDemo,public static void,main(,String,args,) ,String,FileName,=,C:,filetestuserfile.dat,;,File,myFile,=,new,File(FileName,);,if,(!myFile,. exists(),try,myFile.createNewFile,();,System,.err.println,(,+,FileName,);,catch,(,IOException,ie,) ,System,.out.println(ie,);,System,.exit(,0,);,System,.out.println,(,文件:,+,FileName,+,长度是,+,myFile.length,(),+,字节,!,);, ,根据文件路径创建,File,对象,建立新文件,获得文件长度,流,Java,程序通过,流,来完成,输入,/,输出操作,,流是,程序,和,文件,之间实现信息传输的,通道,。,流,流分为字节流和字符流,字节流:建立在,InputStream,和,OutputStream,这两个抽象类基础上,一般用来处理,字节或二进制,对象。,字符流:建立在,Reader,和,Writer,这两个抽象类基础上,一般用来处理,字符或字符串,。,InputStream,的继承结构,InputStream,输入流父类,ByteArrayInputStream,字节数组输入流,FileInputStream,读取文件输入流,PipedInputStream,传送输入流,FilterInputStream,过滤流,BufferedInputStream,缓冲输入流,DataInputStream,数据输入流,InputStream,类的常用方法,方法,说明,int,available(),返回当前可读的输入字节数,void close(),关闭此输入流并释放与该流关联的所有系统资源,int,read(),如果下一个字节可读则返回一个整型,int,read(byte,b),读取,b.length,个字节到,b,中,并返回实际成功读取的字节数,int,read(byte,b,,,int,off,int,len,),读取,b,中从,boff,开始的,len,个字节,返回实际读取的字节数,long,skip(long,num),忽略,num,个输入字节,返回实际忽略的字节数,OutputStream,的继承结构,OutputStream,输出流父类,ByteArrayOutputStream,字节数组输出流,FileOutputStream,读取文件输出流,PipedOutputStream,传送输出流,FilterOutputStream,过滤流,BufferedOutputStream,缓冲输出流,DataOutputStream,数据输出流,OutputStream,类的常用方法,方法,说明,void close(),关闭此输出流并释放与此流有关的所有系统资源,void flush(),刷新此输出流并强制写出所有缓冲的输出字节,void,write(int,b),将单个字节写入输出流,void,write(byte,b),将,b.length,个字节从指定的字节数组写入此输出流,void,write(byte,b,int,off,int,num),将指定字节数组中从偏移量,off,开始的,len,个字节写入此输出流,FileInputStream,类,FileInputStream,类创建了一个能从文件读取字节的,InputStream,类,它的两个常用构造函数如下:,FileInputStream(String,filepath,),例如:,FileInputStream,f = new,FileInputStream(“/test.bat,”);,FileInputStream(File,Obj,),例如:,File f = new File(“/,test.bat,”);,FileInputStream,f1 = new,FileInputStream(f,);,FileInputStream,重载了抽象类,InputStream,的除了,mark(),和,reset(),以外的其它方法。,FileInputStream,类实例,/,打开文件并读取信息操作,public String,openFile,(),throws,IOException,String,FileInfo,=,;,if,(,f.exists,() ) ,FileInputStream,fis,=,new,FileInputStream(f,);,byte, b,=,new,byte,1024,;,int,i,=,0,;,if,(,fis.available,(),!=,0,),i,=,fis.read(b,);,FileInfo,=,new,String(b,0,i);,fis.close,();,else,f.createNewFile,();,return,FileInfo,;,根据文件创建文件输入流对象,文件输入流对象中存在可读取的信息,从文件输入流对象中可读取信息到字节数组,b,读取信息结束后关闭文件输入流,FileOutputStream,类,FileOutputStream,创建了一个可以向文件写入字节的,OutputStream,类,它常用的构造函数如下:,FileOutputStream(String,path),FileOutputStream(File,Obj,),FileOutputStream(String,path,boolean,append),FileOutputStream(File,Obj,boolean,append),其中,path,是文件的路径,,Obj,是描述文件的,File,对象,FileOutputStream,类实例,/,文件写操作,public void,saveFile(,String,TextInfo,),throws,IOException,try,FileOutputStream,fos,=,new,FileOutputStream(f,);,fos.write(TextInfo.getBytes,();,fos.flush,();,fos.close,();,catch,(,IOException,e),System,.out.println(e,);,根据文件创建文件输出流对象,将文本框组件中的信息转换为字节,通过文件输出流对象写入文件,清除文件输出流对象中的信息,关闭文件输出流对象,控制台输入流,import,java.io,.*;,public class,SystemInDemo,public static void,main(,String,args,),throws,IOException,System,.out.print,(,请输入一个字符串,:,);,byte, b,=,new,byte,1024,;,int,i,=,System,.in.read(b,);,System,.out.println,(,你输入的字符串是,:,+,new,String(b,0,i);,控制台输入流:,System,类中的,in,(类变量),这是一个,InputStream,对象,接收从控制台输入的信息并存放到字节数组,b,运行结果,过滤流,过滤流对通过现有流传递的信息进行修改,它是使用,FilterInputStream,或,FilterOutputStream,的子类来创建的,过滤流典型的应用是,缓冲流,和,包装流,缓冲流,缓冲输入流:,BufferedInputStream,缓冲输出流:,BufferedOutputStream,包装流:,数据包装输入流:,DataInputStream,数据包装输出流:,DataOutputStream,缓冲流,缓冲区,是一片内存空间,可以将程序需要的数据先存放在这里,在程序需要读取数据时就可以在内存中获取,而无需每次都到数据源那里去获取数据。,内存,缓冲区,流,Kdfjdlfjdls,Dfsd,Dffads,Dffsd,Dfdsaf,Dfdsaf,Fda,Sddfds,a,缓冲输入流实例,import,java.io,.*;,public class,ConsoleBufferDemo,public static void,main(,String,args,),throws,IOException,StringBuffer,ConsoleInput,=,new,StringBuffer,();,BufferedInputStream,ConsoleBuffer,=,new,BufferedInputStream(,System,.in,);,char,Ch;,System,.out.print,(,请输入信息:,);,do,Ch,=,(,char,)ConsoleBuffer.read,();,ConsoleInput.append(Ch,);,while,(Ch,!=,n,);,System,.out.println,(,从键盘输入的信息是:,+,ConsoleInput,);,创建缓冲,输入流对象,从缓冲,输入流对象中,读取信息,缓冲输出流实例,package,notepad;,import,java.io,.*;,import,javax.swing,.*;,public class,FileBufferedOperate,File,f;, ,public void,saveFile(,String,TextInfo,),throws,IOException,try,FileOutputStream,fos,=,new,FileOutputStream,( f );,BufferedOutputStream,BuffFos,=,new,BufferedOutputStream(fos,);,BuffFos.write(TextInfo.getBytes,();,BuffFos.flush,();,BuffFos.close,();,catch,(,IOException,e) ,System,.out.println(e,);,创建缓冲,输出流对象,通过缓冲,输出流对象输出信息到文件,数据包装流的常用方法,读方法,写方法,boolean,readBoolean,(),void,writeBoolean(boolean,v),byte,readByte,(),void,writeByte(int,v),short,readShort,(),void,writeShort(int,v),char,readChar,(),void,writeChar(int,v),int,readInt,(),void,writeInt(int,v),long,readLong,(),void,writeLong(long,v),float,readFloat,(),void,writeFloat(float,v),double,readDouble,(),void,writeDouble(double,v),数据包装输出流实例,/,从文件中读取数据,try,FileOutputStream,f =,new,FileOutputStream(,Data.dat,);,BufferedOutputStream,buff =,new,BufferedOutputStream(f,);,DataOutputStream,DataOut,=,new,DataOutputStream(buff,);,DataOut.writeDouble(,3.1415926,);,DataOut.writeChar(,a,);,DataOut.writeBytes(,Thas,was,pi:writeByten,);,DataOut.close,();,数据包装输入流实例,/,从文件中读出数据,try,FileInputStream,f =,new,FileInputStream(,Data.dat,);,BufferedInputStream,buff =,new,BufferedInputStream(f,);,DataInputStream,DataIn,=,new,DataInputStream(buff,);,System,.out.println(DataIn.readDouble,();,System,.out.println(DataIn.readChar,();,System,.out.println(DataIn.readLine,();,DataIn.close,();,字符流,为了实现字符处理的国际化,采用了同一的编码标准,-Unicode,编码,字符流为实现处理,Unicdoe,编码的字符输入和输出提供方便有效的方法,字符流的输入流父类是,Reader,,字符流的输出流父类是,Writer,,字符流父类的方法与字节流父类的方法相对应。,Reader,的继承关系,Reader,InputStreamReader,PipedReader,StringBufferInputStream,FilterReader,StringReader,CharArrayReader,BufferedReader,PushbackReader,FileReader,LineNumberReader,Writer,的继承关系,Writer,OutputStreamWriter,PipedWriter,FilterWriter,StringWriter,CharArrayWriter,BufferedWriter,FileWriter,LineNumberWriter,用字符流操作实现记事本文件读,public String,openFile,(),throws,IOException,String,FileInfo,=,;,if,(f.exists,(),FileReader,fis,=,new,FileReader(f,);,BufferedReader,BuffFis,=,new,BufferedReader(fis,);,boolean,eof,=,false,;,while,(,!,eof,),String,line,=,BuffFis.readLine,();,System,.out.println(line,);,if,(line,=,null,),eof,=,true,;,else,FileInfo,=,FileInfo,+,line,+,n,;,BuffFis.close,();, ,用字符流操作实现记事本文件写,public void,saveFile(,String,TextInfo,),throws,IOException,try,FileWriter,f,=,new,FileWriter(f,);,BufferedWriter,Buff,=,new,BufferedWriter(f,);,Buff.write(TextInfo,);,Buff.flush,();,Buff.close,();,catch,(,IOException,e),System,.out.println(e,);,总结,I/O,输入输出,基本文件操作,字节流,字符流,File,类,使用流,F,ileInputStream,类和,FileOutputStream,类,控制台输入流,System.in,过滤流,缓冲流,包装流,字节流和字符流的比较,FileReader,类与,BufferedReader,类,FileWriter,类与,BufferedReader,类,习题,作业,
展开阅读全文