




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 流和文件,内容提要:流概述基本输入和输出流标准输入和输出文件处理缓冲区输入和输出流格式字节数据流,6.1流概述,为进行数据的输入/输出操作,Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream)。java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能 .在Java 1.1之前,java.io包中的流只有普通的字节流,以byte为基本处理单位 .Java 1.1开始,在java.io包中加入了专门处理字符流的类,使Java语言对字符流的处理更加方便和有效。,基本的I/O数据流,按照功能划分为两种基本的流:输入流和输出流输入流: 只能从中读取数据,而不能向其写出数据输出流: 只能向其写出数据,而不能从中读取数据输入和输出流可以被连接到文件、网络套接字或内存缓冲区。,字符流和字节流,按处理数据的单位划分,Java支持两 种基本的流类型: 字符流和字节流,节点流和处理流,节点流: 可以从/向一个特定的地方(节点)读写数据,例如磁盘或者一块内存。 处理流: 是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读/写功能。,节点流和处理流,节点流类型(Node Streams),处理流(Processing Streams),InputStream类提供的方法,三个基本的read方法:int read()int read(byte buffer)int read(byte buffer, int offset, int length) 其它方法:void close()int available()skip(long n)boolean markSupported()void mark(int readlimit)void reset(),OutputStream类提供的方法,三个基本的write方法:void write(int c)void write(byte buffer)void write(byte buffer, int offset, int length) 其它方法void close()void flush(),Reader类提供的方法,三个基本的read方法:int read()int read(char cbuf)int read(char cbuf, int offset, int length) 其它方法void close()boolean ready()skip(long n)boolean markSupported()void mark(int readAheadLimit)void reset(),Writer类提供的方法,三个基本的write方法:void write(int c)void write(char cbuf)void write(char cbuf, int offset, int length)void write(String string)void write(String string, int offset, int length) 其它方法void close()void flush(),节点流应用举例-文件复制,import java.io.*; public class Test1 public static void main(String args) try FileReader input = new FileReader(Test1.java); FileWriter output = new FileWriter(temp.txt); int read = input.read(); while ( read != -1 ) output.write(read);read = input.read(); input.close(); output.close(); catch (IOException e) System.out.println(e); ,例题6-1:写一个程序,实现任意类型文件的复制。,6.3标准输入和输出,System.in 提供从“标准输入”读入数据的功能System.in 为InputStream类型.System.out 提供向“标准输出”写出数据的功能System.out为 PrintStream类型.,向标准输出写出数据,System.out的println/print方法println方法可将方法参数输出并换行 print方法将方法参数输出但不换行print和println方法针对多数数据类型进行了重写 (boolean, char, int, long, float, double以及char, Object和 String).print(Object)和println(Object)方法中调用了参数的toString()方法,再将生成的字符串输出,从标准输入读取数据,/标准输入输出字符处理 import java.io.*;public class StandIO1 public static void main(String args) char inChar; System.out.println(请输入一个字符: ); try inChar = (char) System.in.read ( ); /从键盘读入数据(字符) System.out.println(输入的字符是:+ inChar); catch (IOException e) System.out.println(e); ,0903,从标准输入读取数据,/标准输入输出字符处理 (JDK5.0以上)import java.io.*;public class StandIO2 public static void main(String args) int inInt; System.out.println(“请输入一个数字: ); try Scanner in = new Scanner(System.in); inInt = in.nextInt ( ); /从键盘读入数据(数字) System.out.println(输入的字符是:+ inInt); catch (IOException e) System.out.println(e); ,0903,6.4文件处理,java.io包中定义与数据输入、输出功能有关的类,包括提供文件操作功能的File类创建File类对象File f;f = new File(Test.java);f=new File(“F:/ok/HelloWorld.class”)在Java中,将目录也当作文件处理File类中提供了实现目录管理功能的方法File p=new File(F:/ok/); File f=new File(p,HelloWorld.class);,File类方法介绍,关于文件/目录名操作 String getName() String getPath() String getAbsolutePath() String getParent() boolean renameTo(File newName) File 测试操作 boolean exists() boolean canWrite() boolean canRead() boolean isFile() boolean isDirectory() boolean isAbsolute();,获取常规文件信息操作 long lastModified() long length() boolean delete() 目录操作 boolean mkdir() String list(),File类对象案例,结合命令行参数的使用,练习从已经存在的文件中读入数据并显示的过程;结合命令行参数的使用,练习从标准输入中读入数据并将数据写到文件中的过程;例题6-2:将练习6-1改成从File对象输入和输出数据。,例题6-3:写一个程序,列出指定文件夹下的文件及子文件夹的名称、最后修改时间及文件大小,文件夹路径从命令行输入。,6.4.2 文件过滤,文件过滤就是对文件名的过滤,即将符合条件的文件选择出来进行操作。 接口FileFilter和FilenameFilter来实现这一功能。要想实现过滤功能,就要声明一个类实现FileFilter和FilenameFilter接口中的accept()的方法,这个类常常可以称为过滤器 .,两个接口中只有方法accept(),public interface FileFilter boolean accept(File pathname);参数pathname是要过滤目录中的文件对象。public interface FilenameFilter boolean accept(File dir, String name); 参数dir是要过滤的目录,name是目录中的文件名。,例题6-4:写一个程序,列出指定文件夹及其所有子文件夹下所有Java源文件的完整路径,文件夹路径从命令行输入。,6.4.3 FileInputStream/ FileOutputStream类,使用File类可以建立与磁盘文件的连接;读取磁盘文件的相关属性和对磁盘文件进行管理性操作, 使用File类不能完成对磁盘文件数据的读写操作。 FileInputStream/ FileOutputStream类可以用来实现对字节流文件的I/O处理 ,通过它提供的方法打开本地主机上的文件,并进行顺序的读写。,FileInputStream类,FileInputStream (String FileName); /利用文件名(包括路径名)字符串创建从该文件读取数据的输入流FileInputStream (File f); /利用已经存在的File类对象创建从该对象所对应的文件中读取数据的输入流FileInputStream (FileDescriptor fdObj); /利用文件描述符创建从该对象所对应的文件中读取数据的输入流,FileInputStream类,读入数据有两种方式 :利用FileInputStream类提供的read方法 以FileInputStream类对象为原始数据源,再套上其它功能强大的输入流,FileOutputStream类,FileOutputStream (String FileName); /利用文件名(包括路径名)字符串创建从该文件读取数据的输入流FileOutputStream (File f); /利用已经存在的File类对象创建从该对象所对应的文件中读取数据的输入流FileOutputStream (FileDescriptor fdObj); /利用文件描述符创建从该对象所对应的文件中读取数据的输入流FileOutputStream (String FileName,boolean append); /利用文件名(包括路径名)字符串创建从该文件读取数据的输入流,FileOutputStream类,向文件写入数据有两种方式 :利用FileOutputStream类提供的write方法来完成 以FileOutputStream类对象为原始数据源,再套上其它功能强大的输入流,文件数据的输入和输出举例,import java.io.*;public class FileIOTest1 public static void main(String args) int count; byte buf=new byte2056; try FileInputStream fileIn; FileOutputStream fileOut; fileIn=new FileInputStream(c:qqRead.txt); count=fileIn.read(buf); /从输入流fileIn读入数据到缓冲区 fileOut=new FileOutputStream(c:qqCopyMe.txt);,续,fileOut.write(buf,0,count); /从缓冲区把数据写入到输出流 /把文件FileIOTest1.txt中的内容显示出来 fileIn=new FileInputStream(c:qqCopyMe.txt); count=fileIn.read(buf); String str=new String(buf,0,count); System.out.println(str); catch(IOException e) System.out.println(e.toString(); ,6.4.3 RandomAcessFile类,RandomAcessFile类直接继承于Object ;使用 RandomAcessFile类,用户可以对文件进行任何所希望的操作。,RandomAcessFile类方法,RandomAcessFile (String filename,String mode); /利用文件名(包括路径名)字符串filename创建RandomAcessFile类对象,并指定文件的操作模式mode(r为读模式,rw为读写模式) RandomAcessFile (File f, String mode); /利用已经存在的File类对象f创建RandomAcessFile类对象,并指定文件的操作模式mode(r为读模式,rw为读写模式)。 RandomAcessFile类提供了大量的读写文件的方法。,例题6-5:从磁盘读入一个文本文件,将其中下标为奇数的(第1, 3, 5.个)字符改为A。,6.4.4 FileReader/FileWriter类,FileReader类以字符为单位从文件中读入数据;FileWriter类以字符为单位向文件中写出数据;这两个类的构造函数中以String或File类型参数指定要读写的文件。,FileReader/FileWriter类方法,FileReader (String FileName); /利用文件名(包括路径名)字符串创建从该文件读取数据的输入流FileReader (File f); /利用已经存在的File类对象创建从该对象所对应的文件中读取数据的输入流 FileWriter (String FileName); /FileWriter (File f); /FileWriter (String FileName,boolean append); /利用文件名(包括路径名)字符串创建从该文件读取数据的输入流,,6.5缓冲区输入和输出流,输入流FileReader和输出流FileWriter虽然可以方便地完成输入和输出操作;对输入和输出有较快的时间要求时 ,使用缓冲流类在内存中建立缓冲区 .,6.5.1 BufferedReader类,BufferedReader类方法如下:public BufferedReader(Reader in);public BufferedReader(Reader in, int size) /参数in是超类Reader的对象,size是用户设定的缓冲区大小。public String readLine() throw IOException; /从文件中读取一行字符,6.5.2 BufferedWriter类,BufferedWriter构造方法如下public BufferedWriter (Writer out);public BufferedWriter (Writer out, int size);参数out是超类Writer的对象,size是用户设定的缓冲区大小。BufferedWriter类除从超类中继承的方法外,还有常用方法:public void newLine() throw IOException; /用于写入行分割符,例题6-6:复制一个文件,比较一下带缓冲区和不带缓冲区读写文件的效率有何区别。,6.6 格式字节数据流,DataInputStream类和 DataOutputStream类创建的对象被称为数据输入流和数据输出流;数据输入流和数据输出流允许程序按照与机器无关的风格读取Java的原始数据类型;即格式数据流在读取数据时无须关心数据类型占多少字节,可以读取任意一种基本数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年深圳房屋租赁的合同范本
- 2025牛买卖合同范文
- 2025物业装修合同示范文本
- 2025深圳万科东郡北区园林景观设计顾问合同
- 2025建筑工程施工合同示范文本(房建工程)
- 2025化工原料供应协议合同范本
- 【7道期中】安徽省安庆市潜山市十校联考2023-2024学年七年级下学期4月期中道德与法治试题
- 2025办公房屋租赁合同范本「版」
- 2025建筑工程土方回填项目合同
- 重庆市沙坪坝区九年级历史上册 世界古代史 第五学习主题 古代科学技术与思想文化 第10课 古代的科学技术与造型艺术教学设计 川教版
- 眼科“一科一品”特色护理服务
- 银行内控案防警示教育
- 2024-2025学年湖南省长沙市八年级(上)期末物理试卷(含解析)
- 2025-2030中国镀锌钢板行业市场发展趋势与前景展望战略研究报告
- 施工合同中约定的安全防护、文明施工措施费用支付计划
- 大模型备案-落实算法安全主体责任基本情况
- 2025年安阳职业技术学院单招职业倾向性测试题库带答案
- 2025年审计监察面试题及答案
- nginx面试题及答案100道
- 2025年开封大学单招职业技能测试题库及答案1套
- 小学教师招聘-《小学教育学》押题密卷1
评论
0/150
提交评论