06 输入输出.ppt
《06 输入输出.ppt》由会员分享,可在线阅读,更多相关《06 输入输出.ppt(100页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章 输入输出 章节内容nFilen输入流:InputStream、Readern输出流:OutputStream、Writer、Writer应用n序列化n压缩:文件、目录1第九章 输入输出 n9.1File(java.io.File)表示一个文件或目录,并不一定实际存在,可能还没有创建。如果存在,可以访问其属性。(1)创建一个File对象nFile(Fileparent,Stringchild)nFile(Stringpathname)nFile(Stringparent,Stringchild)Filefile=newFile(c:/windows);Filefile=newFile(c
2、:/windows,system32);29.1File(2)File中的方法n是否有访问文件的权限:booleancanExecute(),booleancanRead(),booleancanWrite()n文件路径:booleanisAbsolute(),FilegetAbsoluteFile(),StringgetAbsolutePath(),StringgetPath()n父目录:StringgetParent(),FilegetParentFile()n指向的是文件还是目录:booleanisDirectory(),booleanisFile()n其它:booleanexists(
3、),longlength(),StringgetName()39.1File(3)列出目录下的文件n列出根目录staticFilelistRoots():windows下是有几个分区n列出当前目录下的文件(子文件、子目录)Stringlist():如无返回nullFilelistFiles():返回的是File对象课堂练习:显示目录下的所有File名49.1File01importjava.io.File;0203publicclassFileList04publicstaticvoidmain(Stringargs)05if(args.length1)/是否指定目录06System.out.
4、println(用javaFileListdir运行);07System.exit(-1);0809list(newFile(args0);1059.1File11publicstaticvoidlist(FileaFile)12if(!aFile.isDirectory()/判断是否是文件夹13return;14for(Stringname:aFile.list()15System.out.println(name);161718问题:怎么递归列出目录下的所有File?遍历不是目录怎么办69.1File-只列出满足条件的文件n只列出满足条件的文件Stringlist(FilenameFilt
5、erfilter)Interfacejava.ioFilenameFilterbooleanaccept(Filedir,Stringname)返回true时,满足条件File listFiles(FilenameFilterfilter)File listFiles(FileFilterfilter)返回的只是文件名,没有路径79.1File-FilenameFilter如果只要“.mp3”文件,什么文件符合条件:n目录不合要求n文件的扩展名为“.mp3”由用户指定搜索的目录和文件扩展名,要两个参数89.1File-FilenameFilter01importjava.io.*;0203pu
6、blicclassFileListExtFiles04publicstaticvoidmain(Stringargs)05if(args.length2)/是否指定文件夹和扩展名06System.out.println(用javaFileListExtFilesdirext);07System.exit(-1);0809list(newFile(args0),args1);1011两个参数99.1File-FilenameFilter12publicstaticvoidlist(FileaFile,finalStringext)13if(!aFile.isDirectory()/不是目录14r
7、eturn;1516FilenameFilteraFilenameFilter=newFilenameFilter()17publicbooleanaccept(Filedir,Stringname)18if(newFile(dir,name).isDirectory()returnfalse;19if(name.endsWith(ext)returntrue;20returnfalse;2122;/返回以ext结尾的文件匿名内部类109.1File-FilenameFilter23for(Stringname:aFile.list(aFilenameFilter)24System.out.p
8、rintln(name);25262711怎么调用的?-File.javapublicStringlist(FilenameFilterfilter)Stringnames=list();if(names=null)|(filter=null)returnnames;ArrayListv=newArrayList();/动态数组for(inti=0;inames.length;i+)if(filter.accept(this,namesi)v.add(namesi);return(String)(v.toArray(newStringv.size();判断是否满足条件129.2输入流Input
9、Stream、Reader内容:n怎么显示文件内容?n怎么把内容保存到文件中?什么是输入?什么是输出?以程序作为参照139.2输入流InputStream、ReaderInputStream和Reader用来从源中把内容输入到程序中,建立一个通道。nInputStream是字节输入流,得到的是一个一个的字节。nReader是字符输入流,得到的是一个一个的字符,适用于中文等不能用一个字节表示的情况。nInputStream、Reader都是抽象类。其它类型的字节输入流和字符输入流分别继承这两个抽象类。子类大同小异,需要先掌握这两个抽象类中的方法。14输入的过程如用水池来表示源,从中得到内容要有以
10、下几个步骤:n从哪里输入,用管子接通水池n从输入流中得到一些内容并判断流有没有结束n对得到的水进行处理n没有或完成后关掉水管从茶瓶倒开水15InputStreamnabstractintread()throwsIOException:读入一个byte,转换成int返回,在0-255之间。返回-1表示已经到文件末尾。nintread(byteb)throwsIOException:读入多个字节,放入数组b中,返回实际读了几个字节,-1表示已到文件尾。如返回值是n,则得到的字节存放在b中从0到n-1的位置nvoidclose()throwsIOException:关闭流。nInputStream中
11、没有说明从哪里输入,子类中有定义。可能没有权限,不能读文件等异常情况16InputStream-read方法说明n文件以byte形式存在于硬盘上。n如果文件内容有byte的-1,会被转换成一个在0到255之间的int。nread方法返回的-1是个标志,表示到文件末尾。17InputStream-FileInputStreamFileInputStream从文件输入。FileInputStream(Filefile)FileInputStream(Stringname)示例:18InputStream-FileInputStream01importjava.io.*;0203publicclas
12、sFileInputStreamTest04publicstaticvoidmain(Stringargs)throwsIOException05if(args.length=0)06System.out.println(pleaseinputfiletoread);07System.exit(-1);0809readFile(args0);101119InputStream-FileInputStream12privatestaticvoidreadFile(StringfileName)throwsIOException13InputStreaminputStream=null;14try
13、/1接通水池15inputStream=newFileInputStream(fileName);16intb=0;17/2从输入流中得到一些内容并判断流有没有结束18while(b=inputStream.read()!=-1)19System.out.print(char)b);/3对得到的水进行处理20有可能找不到文件FileNotFoundException20InputStream-FileInputStream21finally22if(inputStream!=null)23inputStream.close();/4关掉水管2425262721try-with-resource
14、结构ntry(FileInputStreamin=newFileInputStream(fileName);)intb=0;while(b=in.read()!=-1)System.out.print(char)b);n1.7新增,try后括号中用的是使用完后要关闭的对象,称之为资源。这种对象必须实现java.lang.AutoCloseablen流已经实现这个接口。不再需要in.close(),在执行完“”中的语句后会自动调用22InputStream-输入流的套接n现实中水管的套接是为了增加长度n流相同于一个管子,把不同功能的管子接起来n在其他流的基础上增加功能:缓冲、解压缩等23Inpu
15、tStream-BufferedInputStreamBufferedInputStream:用缓存提高性能构造方法:nBufferedInputStream(InputStreamin)nBufferedInputStream(InputStreamin,intsize):size指定缓存有多大。BufferedInputStreamin=null;in=newBufferedInputStream(newFileInputStream(miss.txt);24InputStream-BufferedInputStreamnFileInputStream每次只read一个字节n该流每次从缓冲
16、区读,减少读写硬盘次数:n缓冲区空:从原来的InputStreamread多个字节放入缓冲区中,从中返回一个;n如不为空:从中返回一个byte;25InputStream-BufferedInputStream01importjava.io.*;0203publicclassBufferedInputStreamTest04publicstaticvoidmain(Stringargs)throwsIOException05if(args.length=0)06System.out.println(pleaseinputfiletoread);07System.exit(-1);0809rea
17、dFile(args0);101126InputStream-BufferedInputStream12privatestaticvoidreadFile(StringfileName)throwsIOException13InputStreaminputStream=null;14try/1和水池连接15inputStream=newBufferedInputStream(newFileInputStream(fileName),8*1024);16byteb=newbyte1024;17intnum=0;18/2从输入流中得到一些内容并判断流有没有结束19while(num=inputSt
18、ream.read(b)!=-1)20/3对得到的水进行处理21System.out.print(newString(b,0,num);2227InputStream-BufferedInputStream23finally24if(inputStream!=null)25inputStream.close();/4关掉水管2627282928Readern一个抽象类,用来从多字节表示一个字符的文件中读入n从简体中文、繁体中文等用多字节表示一个字符的文件读入。29Readernabstractintread(charc,intoff,intlen):把得到的内容存到char的一部分,内容放在o
19、ffoff+len-1之间-1表示到文件末尾。返回实际读了几个字符30Readernintread(charc):把得到内容方法放入char中,返回实际得到的字符数,-1表示末尾。和InputStream的read(byte)返回值同意nintread():返回一个用int表示的char,-1表示到文件末尾。nvoidclose():关闭字符流。31Reader-FileReaderFileReader从文件输入。FileReader(Filefile)FileReader(StringfileName)课堂练习:用FileReader显示文件内容示例:32Reader-FileReader0
20、1importjava.io.*;0203publicclassFileReaderTest04publicstaticvoidmain(Stringargs)throwsIOException05if(args.length=0)06System.out.println(pleaseinputfiletoread);07System.exit(-1);0809readFile(args0);101133Reader-FileReader12privatestaticvoidreadFile(StringfileName)throwsIOException13Readerreader=null
21、;14try/1和水池连接15reader=newFileReader(fileName);16intc=0;17/22从输入流中得到一些内容并判断流有没有结束18while(c=reader.read()!=-1)19System.out.print(char)c);/3对得到的水进行处理2034Reader-FileReader21finally22if(reader!=null)23reader.close();/4关掉水管2425262735Reader-BufferedReadern缓冲字符流,和BufferedInputStream类似,提高性能。BufferedReader(Re
22、aderin)BufferedReader(Readerin,intsz),指定缓冲区大小newBufferedReader(newFileReader(miss.txt)课堂练习:仿照BufferedInputStream和FileReader写一个用BufferedReader读写文件的程序,使用char。36Reader-BufferedReadern非常方便的一个方法-StringreadLine():n一次读入一行,返回一个去掉行尾换行符的Stringn返回null时表示到文件末尾。n示例37Reader-BufferedReaderprivatestaticvoidreadFile
23、(StringfileName)throwsIOExceptionBufferedReaderaBufferedReader=null;try/1和水池连接aBufferedReader=newBufferedReader(newFileReader(fileName),8*1024);Stringline=null;/2从输入流中得到一些内容并判断流有没有结束while(line=aBufferedReader.readLine()!=null)/3对得到的水进行处理System.out.println(line);38Reader-BufferedReaderfinallyif(aBuff
24、eredReader!=null)aBufferedReader.close();/4关掉水管39ScannerScanner(Filesource)Scanner(InputStreamsource)booleanhasNextLine()StringnextLine()如何从一个有数字也有非数字的文件中得到数字。Scannerscan=newScanner(newFile(miss_num.txt);scan.useDelimiter(D+);/不考虑非数字409.3 输出流 OutputStream、WriterOutputStream和Writer用来把内容从程序中写入文件或其它地方。
25、nOutputStream是字节输出流,输出字节。nWriter是字符输出流,输出字符,适用于中文等不能用一个字节表示的情况。nOutputStream、Writer都是抽象类。其它类型的OutputStream和Writer都继承该类。子类大同小异,需要先掌握这两个抽象类。41OutputStream和Writer输出的一个过程:(1)指明输出到哪里(2)输出(3)关掉输出42OutputStreamnabstractvoidwrite(intb):输出一个字节,这个数范围在0-255之间。如果大于255,输出的只是最低8bit表示的值。nvoidwrite(byteb):输出byte整个数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 06 输入输出
限制150内