




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java输入输出流,伍淳华 北京邮电大学计算机学院,java,输入输出流,文件描述,类file提供了一种与机器无关的方式来描述一个文件对象的属性 文件的生成 public file(string path); public file(string path,string name); public file(file dir,string name);,java,java输入输出流,文件描述,文件名的处理 string getname();/*得到一个文件的名称(不包括路径)*/ string getpath();/得到一个文件的路径名 string getabsolutepath();/*得到一个文件的绝对路径名*/ string getparent();/*得到一个文件的上一级路径名*/ string renameto(file newname) ;/*将当前文件名更名为给定文件的完整路径*/,java,java输入输出流,文件描述,文件属性测试 boolean exists();/*测试当前file对象所指向的文件是否存在*/ boolean canwrite();/ 测试当前文件是否可写 boolean canread();/测试当前文件是否可读 boolean isfile();/*测试当前文件是否是文件(不是目录)*/ boolean isdirectory();/*测试当前文件是否是目录*/,java,java输入输出流,文件描述,普通文件信息和工具 long lastmodified();/得到文件最近一次修改的时间 long length();/得到文件的长度,以字节为单位 boolean delete();/删除当前文件 目录操作 boolean mkdir();/*根据当前对象生成一个由该对象指定的路径*/ string list();/列出当前目录下的文件,java,java输入输出流,import java.io.*; class filetestw public static void main(string args) system.out.println(“path separator”+file.pathseparator); system.out.println(“path separator char”+file.pathseparatorchar); system.out.println(“file separator”+file.separator); system.out.println(“file separator char”+file. separatorchar); file f=new file(“dong1/test1.class”) system.out.println(); system.out.println(f); system.out.println(“exist?”+file.exists(); system.out.println(“name”+f.getname(); system.out.println (“path”+f.getpath(); system.out.println (“absolute path”+f.getabsolutepath(); system.out.println (“parent”+f.getparent();,java,java输入输出流,system.out.println (“is a file”+f.isfile(); system.out.println (“is a directory”+f.isdirectory(); system.out.println (“length”+f.length(); system.out.println (“can read”+f.canread(); system.out.println (“can write”+f.canwrite(); system.out.println (“last modified”+f.lastmodified(); file newf=new file(“new file”); system.out.println (“rename”+f+”); f.renameto(newf); system.out.println (“name”+newf.getname(); system.out.println (f+“exists?”+f.exists(); system.out.println (“delete”+newf+”); newf.delete(); system.out.println (newf+“exists?”+newf.exists(); ,java,java输入输出流,运行结果,path separator; path separator char; file separator file separator char dong1/test1.class exists?true nametest1.class path/dong1/test1.class absolute path /dong1/test1.class parent/dong1 is a file?true is a directory?false,java,java输入输出流,运行结果,length 514 can read true can write true last modified 907117020000 rename/dong1/test1.class name newfile /dong1/test1.class exists?false delete newfile newfile exists?false,java,java输入输出流,文件处理,列出目录中与某种模式相匹配的文件 public string list(filenamefilter filter); 在接口filenamefilter中定义的方法只有: boolean accept(file dir,string name);,java,java输入输出流,import java.io.*; public class filefiltertest public static void main (string args) file dir=new file(“/dong1”); filter filter=new filter(“htm”); system.out.println(“list html files in directory ”+dir); string files=dir.list(filter); for(int i=0;ifiles.length;i+) file f=new file(filesi); if(f.isfile() system.out.println(“file”+f); else system.out.println(“sub directory”+f); ,java,java输入输出流,class filter implements filenamefilter string extent; fileter(string extent) this.extent=extent; public boolean accept(file dir,string name) return name.endswith(“.”+extent); ,java,java输入输出流,运行结果,list html files in derectory /dong1 file cert_test.htm file cert_sample.htm file cert_obj.htm,java,流的基本概念,java语言中输入/输出功能是通过流类来实现的,可以完成从基本的输入/输出到复杂的随机文件访问,包括java中的网络操作也是通过流来完成的。,文件,程序,文件,程序,网络端点,数据流,起点,终点,网络端点,java,流的基本概念,数据流是从源到目的的字节的有序序列,先进先出。 按照流相对于程序的方向,可以分为两种基本流: input stream(输入流), output stream(输出流),java,输入流与输出流,输入流:用于将程序中需要的数据从键盘、文件等外部设备读入。 输出流:用于将程序中产生的数据写到文件、屏幕显示等输出设备上,读操作过程: 打开一个流 while(是否有更多数据) 读数据 关闭流,写操作过程: 打开一个流 while(是否有更多数据) 写数据 关闭流,java,流式输入输出的特点,每个数据都必须等待排在它前面的数据读入或送出之后才能被读写 每次读写操作处理的都是序列中剩余的未读写数据中的第一个,而不能随意选择输入输出的位置,java,java的标准输入输出,标准输入输出是指在命令行方式下的输入输出方式。 java通过system.in、system.out和system.err来实现标准输入输出和标准错误输出。 每当main方法被执行时,就自动生成system.in、system.out和system.err三个对象。,java,java的标准输入输出,system.in是字节输入流inputstream类的一个对象,其中有read方法从键盘读入数据: public int read() throws ioexception public int read(byte b) throws ioexception system.out是流printstream类的一个对象,其中print和println方法向屏幕输出数据。 system.err是流printstream类的一个对象,用于向屏幕输出错误信息。,java,例1:输入输出的实例,import java.io.ioexception; public class stdinout public static void main(string args) byte buf = new byte100; int count = 0; system.out.println(“please input a string:“); try count = system.in.read( buf ); catch(ioexception e) e.printstacktrace(); system.out.println(“count = “+count); for(int j = 0; j count; j+) system.out.println(char)bufj); system.out.println(“input ten chars“); int ch; try for(int i = 0; i 10; i+) ch = system.in.read(); system.out.println(char)ch); catch(ioexception e) e.printstacktrace(); ,java,例1:输入输出的实例,程序,控制台,inputstream,printstream,java,java的数据流,java的数据流都在java.io包里 java的数据流根据操作的数据流分为字节流和字符流 字节流:流中的数据以8位字节为单位进行读写,以inputstream和outputstream为基础类。 字符流:流中的数据以16位字节为单位进行读写,以reader和writer为基础类。,java,java的数据流,以字节为对象: 输入流:inputstream 输出流:outputstrea 以字符为对象: 输入流: reader 输出流: writer,字节流和字符流的比较,字节流 适用于各类文件 每次读写8位字节 效率较低,字符流 适用于16位的字符文件 每次读写16位字符 效率较高,java,字节流,inputstream和outputstream分别是字节输入流和字节输出流的超类 inputstream和outputstream是抽象类 inputstream和outputstream提供许多用于字节输入输出的方法,包括: 数据的读取 数据的写入 标记位置 获取数据量 关闭数据流,java,字节输入流inputsream类的层次结构,java,inputstream 方法,三个基本read( )方法 int read() /读一个字节返回 int read(byte ) / 将数据读入byte, 返回读的字节数 int read( byte, int offset, int length ) 其它方法 void close( ) /关闭流。 int available() /返回未读的字节数 long skip(long n) / 跳过n个字节,java,字节输出流outputsream类层次,java,outputstream方法,三个基本的write( )方法 void write( int ) / 写一个字节 void write(byte ) / 写一个字节数组 void write(byte , int offset, int length ) 其它方法 void close( ) void flush( ) / 强行写,java,字节文件输入输出流,fileinputstream和fileoutputstream实现了对文件的顺序访问,以字节为单位对文件进行读写操作,主要有这样几步: 创建文件输入输出流的对象 打开文件 用文件读写方法读写数据 关闭数据流。,java,创建文件输入流对象并打开文件,创建fileinputstream的对象,打开要读取数据的文件 fileinputstream的构造方法是: public fileinputstream(string name) throws filenotfoundexception public fileinputstream(file file) throws filenotfoundexception 如下面语句可以创建文件的输入流对象,并打开要读取数据的文件d:javapro1.java: fileinputstream rf=new fileinputstream(“d:/java/pro1.java”);,java,创建文件输出流并打开文件,创建fileoutputstream的对象,打开要写入数据的文件 fileoutputstream的构造方法是: public fileoutputstream(string name) throws filenotfoundexception public fileoutputstream(s,boolean append) throws filenotfoundexception public fileoutputstream(file file) throws filenotfoundexception 其中:name是要打开的文件名,file是文件类file的对象。如下面语句可以创建文件的输出流对象,并打开要写入数据的文件d:/java/pro2.java : fileoutputstream wf=new fileoutputstream(“d:/java/pro2.java”);,java,对文件进行读写的方法,用read方法读取文件的数据 public int read( ) throws ioexception /返回从文件中读取的一个字节。 public int read(byte b) throws ioexception public int read(byte b,int off,int len) throws ioexception /返回读取的字节数,若b的长度为0,返回0。,java,对文件进行读写的方法,用write方法将数据写入文件 public void write(int b) throws ioexception 向文件写入一个字节,b是int类型,所以将b的低8位写入 public void write(byte b) throws ioexception public void write(byte b,int off,int len) throws ioexception 将字节数组写入文件,其中off是b中的起始位置,len是写入的最大长度。,java,字节文件流的关闭,当读写操作完毕时,要关闭输入或输出流,释放相关的系统资源。 如果发生i/o错误,抛出ioexception异常。 关闭数据流的方法是: public void close( ) throws ioexception,java,读取文件内容并显示在屏幕,import java.io.*; public class filein public static void main(string args) try fileinputstream rf=new fileinputstream(“d:/java/file1.txt“); int b; while(b=rf.read()!=-1) system.out.print(char)b); rf.close(); catch(ioexception ie) system.out.println(ie); catch(exception e) system.out.println(e); ,java,复制文件,import java.io.*; public class filein_out public static void main(string args) try fileinputstream rf=new fileinputstream(“d:/java/file1.txt“); fileoutputstream wf=new fileoutputstream(“d:/java/file2.txt“); byte b=new byte512; while(rf.read(b,0,512)!=-1) wf.write(b); rf.close(); wf.close(); catch(ioexception ie) system.out.println(ie); catch(exception e) system.out.println(e); ,java,java,java输入输出流,节点流,节点流指的是与存储介质直接相关的流,例如fileinputstream,stringreader等。,java,java,java输入输出流,过滤流,过滤流在读/写数据的同时可以对数据进行处理,它提供了同步机制,使得某一时刻只有一个线程可以访问一个i/o流,以防止多个线程同时对一个i/o流进行操作所带来的意想不到的结果。 类filterinputstream和filteroutstream分别作为所有过滤输入流和输出流的父类。,java,java,java输入输出流,过滤流,为了使用一个过滤流,首先必须把过滤流连接到某个输入/输出上,通常通过在构造方法的参数中指定所要连接的输入/输出流来实现。例如: filterinputstream(inputstream in); filteroutputstream(outputstream out);,java,java,java输入输出流,过滤流,bufferedinputstream和bufferoutputstream缓冲流,用于提高输入/输出处理的效率。 java.long.object | +-java.io.inputstream | +-java.io.filterinputstream | +-java.io.bufferedinputstream,java,数据输入输出流,数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。 datainputstream(inputstream in) 数据输出流允许应用程序以适当方式将基本 java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。 dataoutputstream (outputstream out),java,datainputstream方法 byte readbyte( ) boolean readboolean( ) long readlong( ) char readchar( ) double readdouble( ) float readfloat( ) short readshort( ) int readint( ) string readutf(),数据输入输出流,java,dataoutputstream 方法 void writebyte(byte) void writeboolean(boolean) void writelong( long ) void writechar(char) void writedouble(double) void writefloat( float) void writeshort(short) void writeint ( int) void writebytes(string) void writechars(string ) void writeutf(string str),数据输入输出流,java,数据流示例:dataiotest.java,import java.io.*; public class dataiotest public static void main(string args) throws ioexception dataoutputstream out = new dataoutputstream(new fileoutputstream(“invoice1.txt“); fileoutputstream f=new fileoutputstream(“invoice1.txt“); dataoutputstream out = new dataoutputstream(f); double prices = 19.99, 9.99, 15.99, 3.99, 4.99 ; int units = 12, 8, 13, 29, 50 ; string descs = “java t-shirt“, “java mug“,“duke juggling dolls“, “java pin“, “java key chain“ ; for (int i = 0; i prices.length; i +) out.writedouble(pricesi); out.writechar(t); out.writeint(unitsi); out.writechar(t); out.writechars(descsi); out.writechar(n); out.close();,java,datainputstream in = new datainputstream(new fileinputstream(“invoice1.txt“); double price; int unit; string desc; double total = 0.0; try while (true) price = in.readdouble(); in.readchar(); / throws out the tab unit = in.readint(); in.readchar(); / throws out the tab desc = in.readline(); system.out.println(“youve ordered “ + unit + “ units of “ + desc + “ at $“ + price); total = total + unit * price; catch (eofexception e) system.out.println(“for a total of: $“ + total); in.close(); ,数据流示例:dataiotest.java,java,java输入输出流,管道流,管道用来把一个程序,线程或者代码块的输出连接到另一个程序,线程或者代码块的输入 管道输入流作为一个通信管道的接收端,管道输出流作为发送端 在使用管道之前,管道输出流和管道输入流之间必须进行连接,java,java输入输出流,管道流,在构造方法中连接: pipeinputstream(pipeoutputstream des); pipeoutputstream(pipeinputstream src); 用connect方法进行连接 类pipeinputstream中定义为: void connect(pipeoutputstream des); 类pipeoutputstream中定义为: void connect(pipeinputstream src);,java,java输入输出流,内存的读写,bytearrayinputstream 8位 bytearrayoutputstream 8位 stringbufferinputstream 16位,java,java输入输出流,顺序输入流,sequenceinputstream 把几个输入流顺序连接起来,java,java输入输出流,import java.io.*; public class sequencetest fileinputstream fs1,fs2; string s; try try fs1=new fileinputstream(“text1”); fs1=new fileinputstream(“text2”); catch(filenotfoundexception e) system.out.println(“file not found or permission denied”); system.exit(-1); ,java,java输入输出流,sequenceinputstream s1=new sequenceinputstream(fs1,fs2); while(s=s1.readline()!=null) system.out.println(s); catch(ioexception e) system.out.println(“error”+e); system.exit(-2); ,java,字符流,类reader是字符输入流的抽象超类,其提供的方法与inputstream类似,只是将基于byte的参数改为基于char。 类writer是字符输出流的抽象超类,其提供的方法与outputstream类似,只是将基于byte的参数改为基于char。 reader和writer 类实现字节和字符间的自动转换。 每一个核心输入、输出流,都有相应的reader和writer版本。,java,reader的类层次结构,java,reader的基本方法,int read();/读单个字符 int read(char cbuf);/读字符放入数组中 int read(char cbuf, int offset, int length);/读字符放入数组的指定位置 void close( ) /关闭流。 long skip(long n) / 跳过n个字符 boolean ready() /测试当前流是否准备好进行读,java,writer的类层次结构,java,writer的基本方法,int write(int c) ; / 写单个字符 int write(char cbuf) ;/ 写字符数组 int write(char cbuf, int offset, int length) ; int write(string str) ; int write(string str, int offset, int length) ; void close( ) void flush( ) / 强行写,java,字符文件输入输出流,filereader和filewriter类用于字符文件的输入和输出 读写文件的过程: 先创建对象打开文件 然后用读写方法从文件中读取数据或将数据写入文件 最后关闭数据流。,java,创建字符流文件对象,创建filereader或filewriter对象,打开要读写的文件 filereader的构造方法是: public filereader(string filename) public filereader(file file) filewriter的构造方法是: public fliewriter(string filename) public filewriter(file file),java,字符文件流的读写,用从超类继承的read和write方法可以对打开的文件进行读写。 读取文件数据的方法: int read( ) throws ioexception int read(char b ) throws ioexception int read(char b ,int off,int len) throws ioexception 数据写入到文件的方法: void write(char b) throws ioexception void write(char b ) throws ioexception void write(char b ,int off,int len) throws ioexception,java,字符文件流的关闭,对文件操作完毕要用close方法关闭数据流。 public void close( ) throws ioexception,java,从键盘输入一行文字,写入文件file3.txt中,import java.io.*; public class filecharout public static void main(string args) char c=new char512; byte b=new byte512; int n,i; try filewriter wf=new filewriter(“file3.txt“); n=system.in.read(b); for(i=0;in;i+) ci=(char)bi; wf.write(c); wf.close(); catch(ioexception e) system.out.println(e); ,java,字符缓冲流,bufferedreader和bufferedwriter类以缓冲区方式对数据进行输入输出。 bufferedreader用于字符缓冲输入,构造方法如下: public bufferedreader(reader in) public bufferedreader(reader in,int sz) 其中:in为超类reader的对象,sz为用户设定的缓冲区大小。,java,bufferedwriter用于字符缓冲流输出,构造方法为: public bufferedwriter(writer out) public bufferedwriter(writer out,int sz) 其中:out为超类writer的对象,sz为用户设定的缓冲区大小。,字符缓冲流,java,例6:从键盘输入文字存入文件,再读出加上行号后打印在屏幕,import java.io.*; public class bufferdemo public static void main(string args) string f=“f.txt“; string str=“; int i=0; try bufferedreader keyin=new bufferedreader(new inputstreamreader(system.in); bufferedwriter bw=new bufferedwriter(new filewriter(f); bufferedreader br = new bufferedreader(new filereader(f); system.out.println(“please input file text:“); while(!(str=keyin.readline().equals(“exit“) bw.write(str,0,str.length(); bw.newline(); ,字符缓冲流,java,bw.close(); while(str=br.readline()!=null) i+; system.out.println(i+“: “+str); catch(ioexception e) ,字符缓冲流,java,java输入输出流,对象的串行化(serialization),对象记录自己的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高血压患者护理要点
- 门市销售管理软件
- 亲子关系解读课件
- 芯片班长年终总结
- 中班数学对称
- 血液病患者护理
- 公司级安全环保培训内容课件
- 《装满昆虫的衣袋》课件
- 公司级安全培训课程安排
- 公司级安全培训目的课件
- 干眼基础试题及答案
- T/DZJN 118-2022废旧锂离子电池磷酸铁锂材料再生利用技术规范
- 2025年计算机二级JAVA考试中的真题练习试题及答案
- 艾灸治疗脾胃病的临床实践
- 资质代办合同协议书范本
- 数字政府效能评估体系-洞察阐释
- 2025年社区卫生服务岗位考试题及答案
- 古茗合同协议书
- 2025年电力机车钳工(高级)职业技能鉴定理论考试题库(含答案)
- 《蔚来汽车的SWOT分析》课件
- 智联招聘银行试题及答案
评论
0/150
提交评论