第六章输入输出流及文件操作本章主要内容6.1简介6.2字节I/O流6.3字符I/O流6.4java的文件管理6.5总结6.1简介在Java中,应用程序所需要读入的数据和写出的数据是通过I/O操作实现的为进行数据的输入、输出操作,java中把不同的输入、输出源(键盘,文件等)抽象表述为“流”(stream)Java中的输入输出流可以分为两大类:输入流和输出流输入流:只能从中读取字节数据,而不能向其写出数据输出流:只能向其写入字节数据,而不能从中读取数据6.1简介Java.io包提供了处理各种类型的流:文件流,字节流,字符流等java语言提供3种自动生成的标准流。System.out是标准输出流System.in是标准输入流System.err是标准异常流在使用输入输出流时,我们需要根据数据格式、操作对象、随机访问能力等因素,来决定选择那种流来实现功能6.2字节I/O流字节流是用来针对ISO的8位字节的读和写。java字节I/O流的层次。6.2字节I/O流java字节流继承层次6.2.1字节输入流所有的字节输入流,都是InputStream的子类,InputStream类包含的主要方法有:6.2.1字节输入流一般来说,字节输入流的数据通常来自二进制文件,所以FileInputStream通常作为字节输入流的操作类。例:从文件中读取数据。参看课本例6.16.2.2字节输出流所有的字节输出流,都是OutputStream的子类,OutputStream类包含的主要方法有:6.2.2字节输出流例:复制一张图片。参看课本例6.26.2.2字节输出流上例中,把图片的数据一次性读入内存,这是很危险的。例:复制图片的改进版参看课本例6.36.2.3随机读写流随机读写流RandomAccessFile是一个比较特殊的字节流,它的父类既不是InputStream也不是OutputStream,而是直接继承于Object随机读写流顾名思义既可以读文件,也可以写文件,所以它的构造方法比较特殊:1.RandomAccessFile(Filefile,Stringmode)2.RandomAccessFile(Stringname,Stringmode)6.2.3随机读写流该构造方法的第二个参数指定用以打开文件的访问模式。允许的值及其含意为:6.2.3随机读写流RandomAccessFile类包含的主要方法有:6.2.3随机读写流例:文件随机访问实现原理:先把定长的记录写入文件中,然后逆序读取并显示,在修改文件的最后一条记录后,再写入文件参看课本例6.46.3字符I/O流Reader和Writer是java.io包中字符I/O流的抽象父类,它们派生的子类如图所示。6.3字符I/O流一些I/O类的主要功能:6.3.1字符输入流字符输入流都是抽象类Reader的子类。其中包括InputStreamReader及其子类FileReader,BufferedReader等BufferedReader类是最常使用的字符输入流,它的构造方法有:1.BufferedReader(Readerin)2.BufferedReader(Readerin,intsz)6.3.1字符输入流BufferedReader类包含的主要方法有:6.3.1字符输入流基于标准输入输出的IO操作在Java里,提供了“标准输入流”和“标准错误输出流”,分别对应于System.in和System.err。例:从控制台读取数据,参看课本例6.56.3.1字符输入流基于字符文件的输入流和控制台输入比较类似,但操作类不是标准输入流,而是字符文件流FileReader。例:读取message.txt的文件内容,并在控制台打印出来。参看课本例6.66.3.2字符输出流字符输入流都是抽象类Writer的子类。其中包括PrintWriter类、OutputStreamWriter及其子类FileWriter,BufferedWriter等。BufferedWriter类包含的常见方法:6.3.2字符输出流例:字符文件的复制。参看课本例6.76.4java的文件管理对于文件或目录的其他操作,如重命名、删除、列表显示等,需要使用Java的文件管理File类。例:建立File类对象。参看课本例6.86.4.1文件类提供的方法对文件名操作提供的方法6.4.1文件类提供的方法测试文件属性操作提供的方法6.4.1文件类提供的方法为文件信息操作提供的方法6.4.1文件类提供的方法为目录操作提供的方法6.4.1文件类提供的方法其他方法6.4.1文件类提供的方法例:常见文件操作。参看课本例6.96.5总结Java对资源的操作是通过输入输出流完成的,根据数据源的类型可以分成字节流和字符流两种java的字节流继承于InputStream、OutputStream和RandomAccessFile,字符流继承于Reader和Writer虽然java提供了很多适用于不同情况的流,我们只需要掌握标准输入输出流(System.in、System.out)、文件流(字节流和字符流)和BufferedReader、BufferedWriter就可以了,其余输入输出流的用法和它们非常相似