1、1 Java语言程序设计 马皓mah 2 第九章文件输入输出 概念JavaI O类JavaI O操作标准输入 输出文件读写操作目录管理随机访问文件文件属性 3 概念 I O来源控制台 console 如DOS窗口 打印 读入文件 file 读 写网络接口 TCP UDP端口 读 写针对数据的读写以流 stream 的方式对数据进行操作 流的重要特性顺序读 写sequentially 4 概念 读 写流的一般流程读 Reading openastream 打开读出流whilemoreinformation 判断readinformation 读closethestream 关闭流写 Writin
2、g openastream 打开写入流whilemoreinformation 判断writeinformation 写closethestream 关闭流 5 概念 两种流的定义 读取信息的基本数据单位 字节流 bytestream 一个字节 8 bit 一个字节读 写字符流 characterstream 一个字符一个字符读 写 具有特定字符编码的数据 java语言6A617661D3EFD1D4以字节流的方式读 读8次 8个字节以字符流的方式读 读6次 6个字符 6 第九章文件输入输出 概念JavaI O类JavaI O操作标准输入 输出文件读写操作目录管理随机访问文件文件属性 7 Ja
3、vaI O类 字节流的读 写操作 来自JDK1 0 java io InputStream 抽象类 publicabstractintread publicintread byteb publicintread byteb intoffset intlength 到达流的终点 无数据读出则返回 1java io OutputStream 抽象类 publicabstractvoidwrite intb publicvoidwrite byteb publicvoidwrite byteb intoffset intlength 所有的读 写函数都抛出java io IOException 8
4、JavaI O类 字符流的读 写操作 来自JDK1 1 java io Reader 抽象类 publicintread publicintread charcbuf publcabstractintread charcbuf intoffset intlength 到达流的终点 无数据读出则返回 1java io Writer 抽象类 publicvoidwrite intc publicvoidwrite charcbuf publicvoidwrite charcbuf intoffset intlength 所有的读 写函数都抛出java io IOException 9 JavaI
5、O类 I O流的层次关系classjava io InputStream的子类classjava io ByteArrayInputStreamclassjava io FileInputStreamclassjava io FilterInputStreamclassjava io BufferedInputStreamclassjava io DataInputStreamclassjava io LineNumberInputStreamclassjava io PushbackInputStreamclassjava io ObjectInputStreamclassjava io P
6、ipedInputStreamclassjava io SequenceInputStreamclassjava io StringBufferInputStream 10 JavaI O类 I O流的层次关系classjava io OutputStream的子类classjava io ByteArrayOutputStreamclassjava io FileOutputStreamclassjava io FilterOutputStreamclassjava io BufferedOutputStreamclassjava io DataOutputStreamclassjava i
7、o PrintStreamclassjava io ObjectOutputStreamclassjava io PipedOutputStream 11 JavaI O类 I O流的层次关系classjava io Reader的子类classjava io BufferedReaderclassjava io LineNumberReaderclassjava io CharArrayReaderclassjava io FilterReaderclassjava io PushbackReaderclassjava io InputStreamReaderclassjava io Fil
8、eReaderclassjava io PipedReaderclassjava io StringReader 12 JavaI O类 I O流的层次关系classjava io Writer的子类classjava io BufferedWriterclassjava io CharArrayWriterclassjava io FilterWriterclassjava io OutputStreamWriterclassjava io FileWriterclassjava io PipedWriterclassjava io PrintWriterclassjava io Strin
9、gWriter 13 JavaI O类 I O流的分类 12个功能类 14 JavaI O类 I O流的分类 12个功能类 15 JavaI O类 I O流的分类 12个功能类 16 第九章文件输入输出 概念JavaI O类JavaI O操作标准输入 输出文件读写操作目录管理随机访问文件文件属性 17 JavaI O操作 主要内容标准输入 输出控制台屏幕打印和键盘读入文件I O操作文件读写如何提高文件读写效率流的包装 Wrap 基本数据转换流目录管理随机访问文件 RandomAccessFile 文件属性网络流操作 见第十三讲 18 输出 控制台屏幕打印classTest publicstat
10、icvoidmain Stringargs System out println HelloWorld 标准输入 输出 19 输入 键盘读入importjava io IOException classTest publicstaticvoidmain Stringargs throwsIOException byte b newbyte 10 System out println Receivednumber System in read b 标准输入 输出 C javaTestAReceivednumber 3C 20 文件读 写流程打开文件流条件判断读出 写入关闭文件流两种类型文件Fil
11、eInputStream FileOutputStream 字节流 FileReader FileWriter 字符流 文件读写操作 21 字节流构造方法publicFileInputStream Filefile throwsFileNotFoundExceptionpublicFileInputStream Stringname throwsFileNotFoundExceptionpublicFile Stringpathname publicFileOutputStream Filefile throwsFileNotFoundExceptionpublicFileOutputStre
12、am Filefile booleanappend throwsFileNotFoundException 是否向已存在的文件后添加publicFileOutputStream Stringname throwsFileNotFoundExceptionpublicFileOutputStream Stringname booleanappend throwsFileNotFoundException 文件读写操作 22 文件读写 实例1 文件读写操作 importjava io publicclassCopyBytes publicstaticvoidmain String args thr
13、owsIOException FileinputFile newFile original txt FileoutputFile newFile result txt FileInputStreamin newFileInputStream inputFile FileOutputStreamout newFileOutputStream outputFile intc while c in read 1 out write c in close out close publicintread throwsIOExceptionpublicintread byte b throwsIOExce
14、ptionpublicintread byte b intoff intlen throwsIOException FileInputStreamin newFileInputStream original txt FileOutputStreamout newFileOutputStream result txt publicvoidwrite intb throwsIOExceptionpublicvoidwrite byte b throwsIOExceptionpublicvoidwrite byte b intoff intlen throwsIOException 23 字符流构造
15、方法publicFileReader Filefile throwsFileNotFoundExceptionpublicFileReader StringfileName throwsFileNotFoundExceptionpublicFile Stringpathname publicFileWriter Filefile throwsIOExceptionpublicFileWriter Filefile booleanappend throwsIOExceptionpublicFileWriter StringfileName throwsIOExceptionpublicFileW
16、riter StringfileName booleanappend throwsIOException 文件读写操作 24 文件读写 实例2 文件读写操作 importjava io publicclassCopy publicstaticvoidmain String args throwsIOException FileinputFile newFile original txt FileoutputFile newFile result txt FileReaderin newFileReader inputFile FileWriterout newFileWriter output
17、File intc while c in read 1 out write c in close out close FileReaderin newFileReader original txt FileWriterout newFileWriter result txt publicintread throwsIOExceptionpublicintread char cbuf throwsIOExceptionpublicintread char cbuf intoff intlen throwsIOException publicvoidwrite intb throwsIOExcep
18、tionpublicvoidwrite char cbuf throwsIOExceptionpublicvoidwrite char cbuf intoff intlen throwsIOException 25 两类缓冲流针对字节流java io BufferedInputStream类java io BufferedOutputStream类针对字符流java io BufferedReader类java io BufferedWriter类 如何提高文件读写效率 26 构造方法publicBufferedInputStream InputStreamin 2048bytespublic
19、BufferedInputStream InputStreamin intsize publicBufferedOutputStream OutputStreamout 512bytespublicBufferedOutputStream OutputStreamout intsize publicBufferedReader Readerin 8192bytespublicBufferedReader Readerin intsz publicBufferedWriter Writerout 8192bytepublicBufferedWriter Writerout intsz 如何提高文
20、件读写效率 27 Stringfilename test txt FileInputStreamfis newFileInputStream filename intcount 0 intc while c fis read 1 if c A count fis close System out println count 如何提高文件读写效率 实例1 如何提高文件读写效率 Stringfilename test txt FileInputStreamfis newFileInputStream filename BufferedInputStreambis newBufferedInputS
21、tream fis intcount 0 intc while c bis read 1 if c A count fis close System out println count FileInputStreamfis newFileInputStream test txt intcount 0 finalintBUFSIZE 1024 bytebuf newbyte BUFSIZE intlen while len fis read buf 1 for inti 0 i len i if buf i A count fis close 28 Stringfilename test txt
22、 FileReaderfr newFileReader filename BufferedReaderbr newBufferedReader fr intcount 0 while br readLine null count br close System out println count 如何提高文件读写效率 实例2 如何提高文件读写效率 29 概述 流的包装 wrap FileReaderfr newFileReader filename BufferedReaderbr newBufferedReader fr BufferedReaderbr newBufferedReader
23、newFileReader filename PrintWriterout newPrintWriter newBufferedWriter newFileWriter filename publicStringreadLine injava io BufferedReaderpublicvoidprintln Stringx injava io PrintWriter 利用不同流的特点 方法 寻找合适的方法完成特定的需求对已有的流进行再处理 30 流的种类节点流直接对数据源进行读 写操作的流处理流对一个已有的流进行某种操作的流 流的包装 wrap 31 节点流FileInputStream
24、PipedInputStream ByteArrayInputStream StringBufferInputStreamFileOutputStream PipedOutputStream ByteArrayOutputStreamCharArrayReader FileReader PipedReader StringReaderCharArrayWriter FileWriter PipedWriter StringWriter 流的包装 wrap 32 处理流FilterOutputStream DataOutputStream BufferedOutputStream PrintSt
25、reamFilterInputStream LineNumberInputStream DataInputStream BufferedInputStream PushbackInputStreamBufferedReader LineNumberReader InputStreamReader FilterReader PushBackReaderBufferedWriter OutputStreamReader FilterWriter PrintWriter 流的包装 wrap 33 一个实例java io FileReaderpublicFileReader Filefile thro
26、wsFileNotFoundExceptionpublicFileReader StringfileName throwsFileNotFoundExceptionjava io BufferedReaderpublicBufferedReader Readerin 8192bytespublicBufferedReader Readerin intsz 流的包装 改变了流的行为 流的包装 wrap 34 流的包装 wrap 实例1 流的包装 wrap importjava io publicclassEcho publicstaticvoidmain String args throwsIO
27、Exception BufferedReaderin newBufferedReader newInputStreamReader System in Strings while s in readLine length 0 System out println s publicstaticfinalInputStreamin java lang System publicInputStreamReader InputStreamin publicBufferedReader Readerin 程序如何结束 跳出while循环 35 概述java io DataInputStream类publ
28、icDataInputStream InputStreamin publicfinalbooleanreadBoolean publicfinalbytereadByte publicfinalcharreadChar publicfinalintreadInt java io DataOutputStream类publicDataOutputStream OutputStreamout publicfinalvoidwriteBoolean booleanv publicfinalvoidwriteByte intv publicfinalvoidwriteChar intv publicf
29、inalvoidwriteInt intv 基本数据转换流 36 DataOutputStreamout newDataOutputStream newFileOutputStream invoice1 txt doubleprices 19 99 9 99 intunits 12 8 Stringdescs JavaT shirt JavaMug for inti 0 i prices length i out writeDouble prices i out writeChar t out writeInt units i out writeChar t out writeChars de
30、scs i out writeChar n out close 基本数据转换流 实例 基本数据转换流 DataInputStreamin newDataInputStream newFileInputStream invoice1 txt doubletotal try while true doubleprice in readDouble in readChar intunit in readInt in readChar charchr StringBufferdesc newStringBuffer 20 while chr in readChar n desc append chr
31、System out println You veordered unit unitsof desc at price total total unit price catch EOFExceptione System out println ForaTOTALof total in close 19 9912JavaT shirt9 998JavaMug 37 概述java io File类 文件和目录的路径名构造方法publicFile Stringpathname publicFile Stringparent Stringchild publicFile Fileparent Stri
32、ngchild parent通常表示一个目录 child则表示一个目录或文件路径名 pathname UNIX平台上绝对路径的前缀 相对路径无前缀 例 etc inetd conf inetd conf Windows平台 绝对路径名的前缀由 盘符 组成 UNC路径名前缀为 然后是主机名和共享名 相对路径名无盘符 例 c windows notepad exe notepad exe 目录管理 38 方法publicbooleancanWrite canRead publicbooleanexists publicbooleandelete 删除文件或目录 若删除目录 要求该目录必须为空pub
33、licbooleancreateNewFile 创建一个空文件 当且仅当该文件不存在publicbooleanisDirectory isFile isHidden publiclonglastModified publicbooleansetLastModified longtime publicString list 得到当前目录下的所有文件名和目录名 若该File对象不是表示目录 则返回nullpublicbooleanmkdir mkdirs 创建一个目录publicbooleanrenameTo Filedest publicbooleansetReadOnly 目录管理 39 目录
34、管理 方法举例 目录管理 importjava io File publicclassDirList publicstaticvoidmain String args Filepath newFile String list path list for inti 0 i list length i System out println list i 40 目录管理 方法举例 目录管理 importjava io File importjava io FilenameFilter publicclassDirList publicstaticvoidmain String args Filepa
35、th newFile String list path list newDirFilter args 0 for inti 0 i list length i System out println list i classDirFilterimplementsFilenameFilter Stringkey DirFilter Stringkey this key key publicbooleanaccept Filedir Stringname Stringf newFile name getName returnf indexOf key 1 java util FilenameFilt
36、er接口publicbooleanaccept Filedir Stringname 是否指定的文件应包含在文件列表中 publicStringgetName injava io File 获得文件或目录名 仅仅是最后的部分 41 随机访问文件 RandomAccessFile java io RandomAccessFile类读写操作在同一个类中完成 须在构造对象时指定参数通过移动文件指针 filepointer 在文件的指定位置进行读写操作构造方法publicRandomAccessFile Stringname Stringmode throwsFileNotFoundException
37、publicRandomAccessFile Filefile Stringmode throwsFileNotFoundExceptionmode r rw 随机访问文件 42 方法publicvoidseek longpos publicintread publicintread byte b publicintread byte b intoff intlen publicfinalbooleanreadBoolean readByte readChar readShort readInt readDouble readFloat publicfinalStringreadLine pu
38、blicvoidwrite intb publicvoidwrite byte b publicvoidwrite byte b intoff intlen publicfinalvoidwriteBoolean writeByte writeChar writeShort writeInt writeDouble writeFloat 随机访问文件 43 随机访问文件 RandomAccessFile 实例 随机访问文件 RandomAccessFilerf newRandomAccessFile rtest dat rw for inti 0 i 10 i rf writeDouble i
39、 1 414 rf close rf newRandomAccessFile rtest dat rw rf seek 5 8 rf writeDouble 47 0001 rf close rf newRandomAccessFile rtest dat r for inti 0 i 10 i System out println Value i rf readDouble rf close 运行结果 Value0 0 0Value1 1 414Value2 2 828Value3 4 242Value4 5 656Value5 47 0001Value6 8 484Value7 9 898
40、Value8 11 312Value9 12 725999999999999 44 文件的特性读和写的权限文件长度修改时间是否是目录java io File类设定文件属性查询文件属性 文件属性 45 文件属性 获取文件路径 importjava io classAttrDemo1 publicstaticvoidmain String args throwsIOException Filetestfile newFile File separatorChar testfile1 testfile createNewFile System out println name testfile ge
41、tName System out println path testfile getPath System out println absolutepath testfile getAbsolutePath System out println canonicalpath testfile getCanonicalPath 46 文件属性 获取文件修改时间 importjava io importjava util publicclassAttrDemo2 publicstaticvoidmain String args throwsIOException Filetestfile newFi
42、le testfile2 testfile delete testfile createNewFile longmodtime testfile lastModified System out println lastmodificationtime 1 newDate modtime testfile setLastModified 0 modtime testfile lastModified System out println lastmodificationtime 2 newDate modtime 47 文件属性 获取和设定文件长度 importjava io publiccla
43、ssAttrDemo3 publicstaticvoidmain String args throwsIOException Filetestfile newFile testfile3 testfile delete testfile createNewFile System out println length 1 testfile length RandomAccessFileraf newRandomAccessFile testfile3 rw raf setLength 100 raf close System out println length 2 testfile lengt
44、h 48 文件属性 设置读写权限 importjava io publicclassAttrDemo4 publicstaticvoidmain String args throwsIOException Filetestfile newFile testfile4 testfile delete testfile createNewFile if testfile canRead System out println filecanberead 1 if testfile canWrite System out println filecanbewritten 1 testfile setReadOnly if testfile canRead System out println filecanberead 2 if testfile canWrite System out println filecanbewritten 2 49 第九章结束