Java输入输出流_第1页
Java输入输出流_第2页
Java输入输出流_第3页
Java输入输出流_第4页
Java输入输出流_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java输入输出流 伍淳华北京邮电大学计算机学院 Java 输入输出流 文件描述 类File提供了一种与机器无关的方式来描述一个文件对象的属性文件的生成publicFile Stringpath publicFile Stringpath Stringname publicFile Filedir Stringname Java Java输入输出流 文件描述 文件名的处理StringgetName 得到一个文件的名称 不包括路径 StringgetPath 得到一个文件的路径名StringgetAbsolutePath 得到一个文件的绝对路径名 StringgetParent 得到一个文件的上一级路径名 StringrenameTo Filenewname 将当前文件名更名为给定文件的完整路径 Java Java输入输出流 文件描述 文件属性测试booleanexists 测试当前File对象所指向的文件是否存在 booleancanWrite 测试当前文件是否可写booleancanRead 测试当前文件是否可读booleanisFile 测试当前文件是否是文件 不是目录 booleanisDirectory 测试当前文件是否是目录 Java Java输入输出流 文件描述 普通文件信息和工具longlastModified 得到文件最近一次修改的时间longlength 得到文件的长度 以字节为单位booleandelete 删除当前文件目录操作booleanmkdir 根据当前对象生成一个由该对象指定的路径 stringlist 列出当前目录下的文件 Java Java输入输出流 importjava io classFileTestW publicstaticvoidmain Stringargs System out println Pathseparator File pathSeparator System out println Pathseparatorchar File pathSeparatorChar System out println Fileseparator File separator System out println Fileseparatorchar File separatorChar Filef newFile 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 absolutepath f getAbsolutePath System out println parent f getParent Java Java输入输出流 System out println isaFile f isFile System out println isadirectory f isDirectory System out println length f length System out println canread f canRead System out println canWrite f canWrite System out println lastmodified f lastModified FilenewF newFile newFile 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输入输出流 运行结果 pathseparator pathseparatorchar fileseparator fileseparatorchar dong1 test1 classexists truenametest1 classpath dong1 test1 classabsolutepathd dong1 test1 classparent dong1isaFile trueisadirectory false Java Java输入输出流 运行结果 length514canreadtruecanwritetruelastmodified907117020000 rename dong1 test1 classnamenewFile dong1 test1 classexists false deletenewFile newFileexists false Java Java输入输出流 文件处理 列出目录中与某种模式相匹配的文件publicstring list FilenameFilterfilter 在接口FilenameFilter中定义的方法只有 booleanaccept Filedir Stringname Java Java输入输出流 importjava io publicclassFileFilterTest publicstaticvoidmain Stringargs Filedir newFile dong1 Filterfilter newFilter htm System out println listhtmlfilesindirectory dir Stringfiles dir list filter for inti 0 i files length i Filef newFile files i if f isFile System out println file f elseSystem out println subdirectory f Java Java输入输出流 classFilterimplementsFilenameFilter Stringextent Filter Stringextent this extent extent publicbooleanaccept Filedir Stringname returnname endsWith extent Java Java输入输出流 运行结果 listhtmlfilesinderectory dong1filecert test htmfilecert sample htmfilecert obj htm Java 流的基本概念 Java语言中输入 输出功能是通过流类来实现的 可以完成从基本的输入 输出到复杂的随机文件访问 包括Java中的网络操作也是通过流来完成的 文件 程序 文件 程序 网络端点 数据流 起点 终点 网络端点 Java 流的基本概念 数据流是从源到目的的字节的有序序列 先进先出 按照流相对于程序的方向 可以分为两种基本流 Inputstream 输入流 Outputstream 输出流 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方法从键盘读入数据 publicintread throwsIOExceptionpublicintread byte b throwsIOExceptionSystem out是流PrintStream类的一个对象 其中print和println方法向屏幕输出数据 System err是流PrintStream类的一个对象 用于向屏幕输出错误信息 Java 例1 输入输出的实例 importjava io IOException publicclassStdinOut publicstaticvoidmain String args byte buf newbyte 100 intcount 0 System out println Pleaseinputastring try count System in read buf catch IOExceptione e printStackTrace System out println count count for intj 0 j count j System out println char buf j System out println Inputtenchars intch try for inti 0 i 10 i ch System in read System out println char ch catch IOExceptione 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 方法intread 读一个字节返回intread byte 将数据读入byte 返回读的字节数intread byte intoffset intlength 其它方法voidclose 关闭流 intavailable 返回未读的字节数longskip longn 跳过n个字节 Java 字节输出流OutputSream类层次 Java OutputStream方法 三个基本的write 方法voidwrite int 写一个字节voidwrite byte 写一个字节数组voidwrite byte intoffset intlength 其它方法voidclose voidflush 强行写 Java 字节文件输入输出流 FileInputStream和FileOutputStream实现了对文件的顺序访问 以字节为单位对文件进行读写操作 主要有这样几步 创建文件输入输出流的对象打开文件用文件读写方法读写数据关闭数据流 Java 创建文件输入流对象并打开文件 创建FileInputStream的对象 打开要读取数据的文件FileInputStream的构造方法是 publicFileInputStream Stringname throwsFileNotFoundExceptionpublicFileInputStream Filefile throwsFileNotFoundException如下面语句可以创建文件的输入流对象 并打开要读取数据的文件d java pro1 java FileInputStreamrf newFileInputStream d java pro1 java Java 创建文件输出流并打开文件 创建FileOutputStream的对象 打开要写入数据的文件FileOutputStream的构造方法是 publicFileOutputStream Stringname throwsFileNotFoundExceptionpublicFileOutputStream String name Booleanappend throwsFileNotFoundExceptionpublicFileOutputStream Filefile throwsFileNotFoundException其中 name是要打开的文件名 file是文件类File的对象 如下面语句可以创建文件的输出流对象 并打开要写入数据的文件d java pro2 java FileOutputStreamwf newFileOutputStream d java pro2 java Java 对文件进行读写的方法 用read方法读取文件的数据publicintread throwsIOException 返回从文件中读取的一个字节 publicintread byte b throwsIOExceptionpublicintread byte b intoff intlen throwsIOException 返回读取的字节数 若b的长度为0 返回0 Java 对文件进行读写的方法 用write方法将数据写入文件publicvoidwrite intb throwsIOException向文件写入一个字节 b是int类型 所以将b的低8位写入publicvoidwrite byte b throwsIOExceptionpublicvoidwrite byte b intoff intlen throwsIOException将字节数组写入文件 其中off是b中的起始位置 len是写入的最大长度 Java 字节文件流的关闭 当读写操作完毕时 要关闭输入或输出流 释放相关的系统资源 如果发生I O错误 抛出IOException异常 关闭数据流的方法是 publicvoidclose throwsIOException Java 读取文件内容并显示在屏幕 importjava io publicclassFileIn publicstaticvoidmain Stringargs try FileInputStreamrf newFileInputStream D java file1 txt intb while b rf read 1 System out print char b rf close catch IOExceptionie System out println ie catch Exceptione System out println e Java 复制文件 importjava io publicclassFileIn Out publicstaticvoidmain Stringargs try FileInputStreamrf newFileInputStream D java file1 txt FileOutputStreamwf newFileOutputStream D java file2 txt byteb newbyte 512 while rf read b 0 512 1 wf write b rf close wf close catch IOExceptionie System out println ie catch Exceptione System out println e Java Java输入输出流 随机存取文件 publicclassRandomAccessFileextendsObjectimplementsDataInput DataOutput 接口DataInput中定义的方法主要包括从流中读取基本类型的数据 读取一行数据 或者读取指定长度的字节数 如readBoolean readInt readLine readDouble 等 接口DataOutput中定义的方法主要是向流中写入基本类型的数据 或者写入一定长度的字节数组 如writeChar writeDouble write 等 Java Java输入输出流 随机存取文件 RandomAccessFile类能够在文件的任何位置查找或者写入数据 RandomAccessFile提供了一个文件指针 filepointer 文件指针总是指向下一条要进行读写操作的记录的位置 Java Java输入输出流 随机存取文件 构造方法RandomAssessFile Stringname Stringmode RandomAssessFile Filefile Stringmode mode r rw 文件指针的操作longgetFilePointer 得到文件指针voidseek longpos 将文件指针的位置设定为从文件开始的pos字节处 参数pos指明了设定的文件指针的位置 取值范围在0到文件长度之间 以字节计 Java Java Java输入输出流 节点流 节点流指的是与存储介质直接相关的流 例如FileInputStream StringReader等 Java Java Java输入输出流 过滤流 过滤流在读 写数据的同时可以对数据进行处理 它提供了同步机制 使得某一时刻只有一个线程可以访问一个I O流 以防止多个线程同时对一个I O流进行操作所带来的意想不到的结果 类FilterInputStream和FilterOutStream分别作为所有过滤输入流和输出流的父类 Java Java Java输入输出流 过滤流 为了使用一个过滤流 首先必须把过滤流连接到某个输入 输出上 通常通过在构造方法的参数中指定所要连接的输入 输出流来实现 例如 FilterInputStream InputStreamin FilterOutputStream OutputStreamout Java Java Java输入输出流 过滤流 BufferedInputStream和BufferOutputStream缓冲流 用于提高输入 输出处理的效率 java long Object java io InputStream java io FilterInputStream java io BufferedInputStream Java 数据输入输出流 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型 应用程序可以使用数据输出流写入稍后由数据输入流读取的数据 DataInputStream InputStreamin 数据输出流允许应用程序以适当方式将基本Java数据类型写入输出流中 然后 应用程序可以使用数据输入流将数据读入 DataOutputStream OutputStreamout Java DataInputStream方法bytereadByte booleanreadBoolean longreadLong charreadChar doublereadDouble floatreadFloat shortreadshort intreadInt StringreadUTF 数据输入输出流 Java DataOutputStream方法voidwriteByte byte voidwriteBoolean boolean voidwriteLong long voidwriteChar char voidwriteDouble double voidwriteFloat float voidwriteshort short voidwriteInt int voidwriteBytes String voidwriteChars String voidwriteUTF Stringstr 数据输入输出流 Java 数据流示例 DataIOTest java importjava io publicclassDataIOTest publicstaticvoidmain String args throwsIOException DataOutputStreamout newDataOutputStream newFileOutputStream invoice1 txt FileOutputStreamf newFileOutputStream invoice1 txt DataOutputStreamout newDataOutputStream f double prices 19 99 9 99 15 99 3 99 4 99 int units 12 8 13 29 50 String descs JavaT shirt JavaMug DukeJugglingDolls JavaPin JavaKeyChain for inti 0 i prices length i out writeDouble prices i out writeChar t out writeInt units i out writeChar t out writeChars descs i out writeChar n out close Java DataInputStreamin newDataInputStream newFileInputStream invoice1 txt doubleprice intunit Stringdesc doubletotal 0 0 try while true price in readDouble in readChar throwsoutthetabunit in readInt in readChar throwsoutthetabdesc in readLine System out println You veordered unit unitsof desc at price total total unit price catch EOFExceptione System out println ForaTOTALof total in close 数据流示例 DataIOTest java Java 字符流 类Reader是字符输入流的抽象超类 其提供的方法与InputStream类似 只是将基于Byte的参数改为基于Char 类Writer是字符输出流的抽象超类 其提供的方法与OutputStream类似 只是将基于Byte的参数改为基于Char Reader和Writer类实现字节和字符间的自动转换 每一个核心输入 输出字节流 都有相应的Reader和Writer版本 Java Reader的类层次结构 Java Reader的基本方法 intread 读单个字符intread charcbuf 读字符放入数组中intread charcbuf intoffset intlength 读字符放入数组的指定位置voidclose 关闭流 longskip longn 跳过n个字符booleanready 测试当前流是否准备好进行读 Java Writer的类层次结构 Java Writer的基本方法 intwrite intc 写单个字符intwrite charcbuf 写字符数组intwrite charcbuf intoffset intlength intwrite Stringstr intwrite Stringstr intoffset intlength voidclose voidflush 强行写 Java 字符文件输入输出流 FileReader和Filewriter类用于字符文件的输入和输出读写文件的过程 先创建对象打开文件然后用读写方法从文件中读取数据或将数据写入文件最后关闭数据流 Java 创建字符流文件对象 创建FileReader或Filewriter对象 打开要读写的文件FileReader的构造方法是 publicFileReader Stringfilename publicFileReader Filefile FileWriter的构造方法是 publicFlieWriter Stringfilename publicFilewriter Filefile Java 字符文件流的读写 用从超类继承的read和write方法可以对打开的文件进行读写 读取文件数据的方法 intread throwsIOExceptionintread charb throwsIOExceptionintread charb intoff intlen throwsIOException数据写入到文件的方法 voidwrite charb throwsIOExceptionvoidwrite charb throwsIOExceptionvoidwrite charb intoff intlen throwsIOException Java 字符文件流的关闭 对文件操作完毕要用close方法关闭数据流 publicvoidclose throwsIOException Java 从键盘输入一行文字 写入文件file3 txt中 importjava io publicclassFilecharOut publicstaticvoidmain Stringargs charc newchar 512 byteb newbyte 512 intn i try FileWriterwf newFileWriter file3 txt n System in read b for i 0 i n i c i char b i wf write c wf close catch IOExceptione System out println e Java 字符缓冲流 BufferedReader和BufferedWriter类以缓冲区方式对数据进行输入输出 BufferedReader用于字符缓冲输入 构造方法如下 publicBufferedReader Readerin publicBufferedReader Readerin intsz 其中 in为超类Reader的对象 sz为用户设定的缓冲区大小 Java Bufferedwriter用于字符缓冲流输出 构造方法为 publicBufferedWriter Writerout publicBufferedwriter Writerout intsz 其中 out为超类Writer的对象 sz为用户设定的缓冲区大小 字符缓冲流 Java 例6 从键盘输入文字存入文件 再读出加上行号后打印在屏幕 importjava io publicclassBufferDemo publicstaticvoidmain String args Stringf f txt Stringstr inti 0 try BufferedReaderkeyIn newBufferedReader newInputStreamReader System in BufferedWriterbw newBufferedWriter newFileWriter f BufferedReaderbr newBufferedReader newFileReader f System out println Pleaseinputfiletext 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 IOExceptione 字符缓冲流 Java Java输入输出流 对象的串行化 Serialization 对象记录自己的状态以便将来再生的能力 叫做对象的持续性 persistence 对象通过写出描述自己状态的数值来记录自己 这个过程叫做对象的串行化 Serialization Java Java输入输出流 串行化方法 在java io包中 接口Serializable用来作为实现对象串行化的工具 只有实现了Serializable的类的对象才可以被串行化 Java Java输入输出流 定义一个可串行化对象 publicclassStudentimplementsSerializable intid 学号Stringname 姓名intage 年龄Stringdepartment 系别publicStudent intid Stringname intage Stringdepartment this di i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论