已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
输入输出流 概述File 文件类 FileInputStreamFileOutputStreamFileReader和FileWriterRandomAccessFilePipedInputStream PipedOutputStreamDateInputStream DateOutputStreamObjectInputStream ObjectOutputStreamPrintStream PrintWriter 1 概述 一个计算机的最简单模型由下列三个管道组成 输入 处理 输出 Java的I O流库提供大量的流类 在包java io中 其中 所有输入流类都是InputStream 抽象类 或抽象类Reader的子类 而所有输出流类都是OutputStream 抽象类 或抽象类Writer的子类 2 文件 File类 File类不允许访问文件的内容 没有可用于访问文件的read 和write 方法 File类主要用于命名文件 查询文件属性和处理目录 2 1 创建文件对象 构造方法 1 publicFile Strings 在Windows平台 分割符为 在Linux Unix上 为 File提供的参数 File separator 2 publicFile StringDirectory Strings 2 2查询文件属性 File类提供了几个方法 查询文件属性 文件是否存在文件是否读保护文件是否写保护文件是否是一个目录文件是否隐藏 2 3查询文件属性 Strings e File separator Thread1 java Filefile newFile s Stringexists file exists Yes No StringcanRead file canRead Yes No StringcanWrite file canWrite Yes No StringisFile file isFile Yes No StringisHid file isHidden Yes No StringisDir file isDirectory Yes No StringisAbs file isAbsolute Yes No Attr java 3 FileInputStream FileInputStream典型地表示一种顺序访问的文本文件 通过使用FileInputStream你可以访问文件的一个字节 几个字节或整个文件 由InputStream派生的类构造方法 FileInputStream Stringname 使用给定的文件名创建一个FileInputStream对象FileInputStream Filefile 使用File对象创建一个FileInputStream对象 3 1使用FileInputStream读取文件 使用构造方法来打开一个到达该文件的输入流 FileInputStreammyFileStream myFileStream newFileInputStream myfile dat 或 FilemyFile FileInputSteammyFileStream myFile newFile myfile dat myFileStream newFileInputStream myFile 3 2处理I O异常 必须使用catch块检测并处理I O异常 IOException 如 try FileInputStreamins newFileInputStream myfile dat catch IOExceptione 文件I O错误System out println Filereaderror e 3 3从FileInputStream中读出 read 的成员函数 intread 读取一个字节 到达输入流末尾时 返回 1intread byteb 把多个字节读到字节数组中 到达输入流末尾时 返回 1intread byteb intoff intlen off指定read方法把数据存放在字节数组b中的什么地方 len指定该方法将读取的最大字节数 到达输入流末尾时 返回 1 3 4关闭FileInputStream 两种方法关闭 显式关闭和隐式关闭 隐式关闭是自动垃圾回收时的功能 显式关闭为 myFileStream close intb bytebuffer newbyte 2500 try Filef newFile E lanhong a txt FileInputStreamreadfile newFileInputStream f b readfile read buffer 0 2500 try Stringstr newString buffer 0 b Default System out println str catch UnsupportedEncodingExceptione System out println theencodingwasnotfound e catch IOExceptione System out println FilereadError Example20 1 java 4 FileOutputStream FileOutputStream用于向一个文本文件写数据 由OutputStream派生的类 4 1打开FileOutputStream 和打开输入流FileInputStream类似 FileOutputStreammyFileStream myFileStream newFileOutputStream file txt 或 FilemyFile FileOutputSteammyFileStream myFile newFile file txt myFileStream newFileOutputStream myFile 4 2写入一个流 write 的成员函数 voidwrite byteb 写b length个字节到输出流voidwrite byteb intoff intlen b是数据 off是数据的起始偏移量 len是要输出的字节数 publicstaticvoidmain Stringargs intb bytebuffer newbyte 100 try System out println 输入一行文本 并存入磁盘 b System in read buffer 把从键盘输入的字符存入bufferFileOutputStreamwritefile newFileOutputStream line txt writefile write buffer 0 b 通过流把buffer写入到文件line txt中 catch IOExceptione System out println Error Example20 3 java 5 FileReader和FileWriter 与FileInputStream和FileOutputStream等价的读取器是FileReader类和FileWriter类 它们分别是Reader和Writer的子类 构造方法分别是 FileReader Stringfilename FileWriter Stringfilename 如 FileReaderfile newFileReader Student txt 不能按行读取或写入 5 1BufferedReader FileReader类不能读取一行 Java提供了BufferedReader类 构造方法是 BufferedReader Readerin 读取文本行的方法是 readLine 如 BufferedReaderin BufferedReader newFileReader Student txt P261 例4Example20 4TextAreatext BufferedReaderin Buttonbutton FileReaderfile EWindow super 流的读取 text newTextArea 10 10 text setBackground Color cyan try Filef newFile E lanhong a txt file newFileReader f in newBufferedReader file catch FileNotFoundExceptione catch IOExceptione button newButton 读取 button addActionListener this setLayout newBorderLayout setSize 40 40 setVisible true add text Center add button South addWindowListener newWindowAdapter publicvoidwindowClosing WindowEvente System exit 0 publicvoidactionPerformed ActionEvente Strings if e getSource button try while s in readLine null text append s catch IOExceptionexp publicclassExample20 4 publicstaticvoidmain Stringargs EWindoww newEWindow w pack 5 2BufferedWriter 与BufferedReader类相对应的是BufferedWriter类 构造方法是 BufferedWriter Writerout 写入文件的方法是 write Strings intoff intlen 如 BufferedWriterout BufferedWriter newFileReader hello txt out write howareyou 0 s length 写入缓冲区out flush 要写入文件 必须执行 P263 例5Example20 5TextAreatext BufferedWriterout Buttonbutton FileWritertofile FWindow super 流的写入 text newTextArea 10 10 text setBackground Color cyan try tofile newFileWriter hello txt out newBufferedWriter tofile catch FileNotFoundExceptione catch IOExceptione button newButton 写入 button addActionListener this setLayout newBorderLayout setSize 60 70 setVisible true add text Center add button South addWindowListener newWindowAdapter publicvoidwindowClosing WindowEvente setVisible false System exit 0 publicvoidactionPerformed ActionEvente Strings if e getSource button try out write text getText 0 text getText length out flush catch IOExceptionexp publicclassExample20 5 publicstaticvoidmain Stringargs FWindoww newFWindow w pack P267 例7Example20 7classFrame FileDialogextendsFrameimplementsActionListener FileDialogfiledialog save filedialog load 声明两个文件对话框MenuBarmenubar1 Menumenu1 MenuItemitem1 item2 TextAreatext BufferedReaderin FileReaderfile reader BufferedWriterout FileWritertofile Frame FileDialog super 带文件对话框的窗口 setSize 60 70 setVisible true menubar1 newMenuBar menu1 newMenu 文件 item1 newMenuItem 打开文件 item2 newMenuItem 保存文件 item1 addActionListener this item2 addActionListener this menu1 add item1 menu1 add item2 menubar1 add menu1 setMenuBar menubar1 下面创建一个依赖于该窗口的保存文件对话框filedialog save newFileDialog this 保存文件对话框 FileDialog SAVE filedialog save setVisible false 再创建一个依赖于该窗口的打开文件对话框filedialog load newFileDialog this 打开文件对话框 FileDialog LOAD filedialog load setVisible false filedialog save addWindowListener newWindowAdapter publicvoidwindowClosing WindowEvente filedialog save setVisible false filedialog load addWindowListener newWindowAdapter publicvoidwindowClosing WindowEvente filedialog load setVisible false addWindowListener newWindowAdapter publicvoidwindowClosing WindowEvente setVisible false System exit 0 publicvoidactionPerformed ActionEvente if e getSource item1 filedialog load setVisible true Strings try 建立到文件file的FileReader流 该文件通过File类和对话框来确定 Filefile newFile filedialog load getDirectory filedialog load getFile file reader newFileReader file in newBufferedReader file reader while s in readLine null text append s n catch FileNotFoundExceptione1 catch IOExceptione2 try in close file reader close catch IOExceptionexp elseif e getSource item2 filedialog save setVisible true try 建立到文件file的FileWriter流 该文件通过File类和对话框来确定 Filefile newFile filedialog save getDirectory filedialog save getFile tofile newFileWriter file out newBufferedWriter tofile out write text getText 0 text getText length out flush catch FileNotFoundExceptione1 catch IOExceptione2 try out close tofile close catch IOExceptionexp 6 RandomAccessFile类 由于File类不能读写文件 可使用Stream类或RandomAccessFile类来读写 RandomAccessFile类既不是输入流类InputStream类的子类 也不是输出流类OutputStream类的子类 RandomAccessFile类创建的流的指向既可以作为源 也可以作为目的地 构造方法分别是 RandomAccessFile Stringname Stringmode RandomAccessFile Filefile Stringmode 参数mode取r 只读 或rw 可读写 决定文件的访问权利 创建对象时应捕获FileNotFoundException异常 当流进行读写操作时 应捕获IOException异常 RandomAccessFile类中的方法 seek longa a确定文件指针距离文件开头的字节位置 getFilePointer 方法获取当前文件的指针的位置 P271 例9in and out newRandomAccessFile tom txt rw try for inti 0 i 0 i 一个int型数据占4个字节 我们从 in and out seek i 4 文件的第36个字节读取最后面的一个整数System out println in and out readInt 每隔4个字节往前读取一个整数 7 管道流 管道是不同线程之间直接传输数据的基本手段 PipedInputStream类创建的对象称为一个输入管道 PipedOutputStream类创建的对象称为一个输出管道 输出管道与输入管道连接形成一个传输数据的通道 使用这样的管道 用户可以在不同线程之间实现数据共享 7 1PipedInputStream类 PipedInputStream 创建一个管道输入流 它还没有被连接 在使用之前必须连接到一个管道输出流 使用connect PipedOutputStreamc 方法连接 PipedInputStream in newPipedInputStream PipedOutputStream out newPipedOutputStream in connect out PipedInputStream PipedOutputStreama 创建一个管道输入流 它被连接到由参数a指定的管道输出流 7 2PipedOutputStream类 PipedOutputStream 创建一个管道输出流 它还没有被连接 在使用之前必须连接到一个管道输入流 使用connect PipedInputStreamc 方法连接 PipedOutputStream out newPipedOutputStream PipedInputStream in newPipedInputStream out connect in PipedOutputStream PipedInputStreama 创建一个管道输出流 它被连接到由参数a指定的管道输入流 7 3管道流的异常 创建管道流都必须捕获IOException异常 try PipedInputStream in newPipedInputStream catch IOExceptione P274 例11Example20 11importjava io publicclassExample20 11 publicstaticvoidmain Stringargs PipedOutputStreamout null PipedInputStreamin null try out newPipedOutputStream in newPipedInputStream in connect out catch IOExceptione thread1one newthread1 out in thread2two newthread2 in out one start two start classthread1extendsThread PipedOutputStreamout PipedInputStreamin byteb 1 2 3 thread1 PipedOutputStreama PipedInputStreamb try out a in b out connect in catch IOExceptione publicvoidrun try out write b 0 3 catch IOExceptione classthread2extendsThread PipedOutputStreamout PipedInputStreamin bytea newbyte 3 thread2 PipedInputStreama PipedOutputStreamb try in a out b in connect out catch IOExceptione publicvoidrun try in read a 0 3 for inti 0 i 2 i System out println a i intc a 0 a 1 a 2 System out println c catch IOExceptione 8 数据流 数据流允许程序按与机器无关的风格读取Java原始数据 构造方法 DateInputStream InputStreamin DateOutputStream OutputStreamout 常用方法 P276 P277 例12 9 对象流 ObjectInputStream类和ObjectOutputStream类分别是DateInputStream和DateOutputStream类的子类 构造方法 DateInputStream InputStreamin DateOutputStream OutputStreamout ObjectInputStream类和ObjectOutputStream类创建的对象被称为对象输入流和对象输出流 对象输出流使用writeObject Objectobj 方法写文件 对象输入流使用readObject 方法读文件 9 1创建对象流的方法 ObjectInputStream DateOutputStream的指向是一个输入 输出流对象 因而要首先用FileInputStream FileOutputStream创建一个文件流 如 FileInputStreamfile in newFileInputStream a txt ObjectInputStreamobject in newObjectInputStream file in FileOutputStreamfile out newFileOutputStream a txt ObjectOutputStreamobject out newObjectOutputStream file out P281 例14publicclassExample20 14extendsFrameimplementsActionListener TextAreatext null Buttonreader null writer null FileInputStreamfile in null FileOutputStreamfile out null ObjectInputStreamobject in null ObjectOutputStreamobject out null Example20 14 setLayout newFlowLayout text newTextArea 6 10 reader newButton读入对象 writer newButton 写出对象 reader addActionListener this writer addActionListener this setVisible true add text add reader add writer addWindowListener newWindowAdapter publicvoidwindowClosing WindowEvente System exit 0 pack setSize
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024园林绿化工程土壤改良与植保服务合同
- 2024热量表购销合同范文
- 2024年度城市基础设施建设与运营合同
- 2024年二手房定金合同示范文本
- 2024年度物流运输合同运输方式与时间安排
- 师说课文课件教学课件
- 2024年冷鲜电商物流配送服务合同
- 2024年度研发技术转让合同
- 2024年度建筑工程安全生产管理合同
- 2024年度BIM模型数据共享与交换合同
- 2024全新物业服务培训
- 山东省日照地区2024-2025学年八年级上学期期中考试数学试题(含答案)
- 《地产公司图纸管理办法》的通知
- 中华民族共同体概论学习通超星期末考试答案章节答案2024年
- 世界慢阻肺日
- 2024年资格考试-CPSM认证考试近5年真题附答案
- 混料机的安全操作规程有哪些(8篇)
- 期中 (试题) -2024-2025学年译林版(三起)英语六年级上册
- 2024秋期国家开放大学《财务报表分析》一平台在线形考(作业一至五)试题及答案
- 国家基本医疗保险、工伤保险和生育保险药品目录(2023年)
- 城市公益公墓区建设方案
评论
0/150
提交评论