46. java中的io流技术

上传人:第*** 文档编号:30969907 上传时间:2018-02-03 格式:DOCX 页数:18 大小:767.92KB
返回 下载 相关 举报
46. java中的io流技术_第1页
第1页 / 共18页
46. java中的io流技术_第2页
第2页 / 共18页
46. java中的io流技术_第3页
第3页 / 共18页
46. java中的io流技术_第4页
第4页 / 共18页
46. java中的io流技术_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《46. java中的io流技术》由会员分享,可在线阅读,更多相关《46. java中的io流技术(18页珍藏版)》请在金锄头文库上搜索。

1、Java 中的 IO 流技术1 IO 流(Input&OUtput)用来处理设备之间的数据传输,IO 系统的主要目的是对数据进行读写操作。2 Java 对数据的操作是通过流的方式,输入流和输出流都是对象。3 Java 中用于操作 流的对象都存在于 IO 包中。4 IO 流按照操作数据分为两种:字节流和字符流。5 IO 流按照流向分为:输入流和输出流。输入需要读 read 方法,输出需要写write 方法。注意:输入和输出是基于 Java 程序而言的,而 Java 程序一般又是在内存中运行,所以也可以看做是基于内存而言的,IO 系统的数据流向是以 Java 程序为参照物。将外设的数据读入内存称为

2、读,即输入;将内存中数据写到外设中,称为写,即输出。6 Java 的 I/O :(1 ) I/O 操作的目的:从数据源(多种多样,如文件、键盘、网络等等)当中读取数据,以及将数据写入到数据目的地(如文件、屏幕、网络等等)当中;(2 ) I/O 的流向:方向需要参照物, 相对而言,对于 java 程序本身而言,需要程序读取,即输入流,需要写到文件里,则就是输出流;(3 ) 流的概念:输入流,输出流,就像水流一样。就像管道一样,是一点一点的进行的传输;在数据源与目的地之间建立了一个管道;(4 ) I/O 的分类:输入流与输出流; 字节流与字符流; 节点流与处理流;7 以前只存在字节流,其实字节流可

3、以读取任何文件。但是后来为了国际化统一,推出了字节流。由于不同的国家有不同的文字,同时又有自己的文字编码表,为了国际统一化,推出了国际统一编码 Unicode 编码。8 字符流的由来:字节流读取文字字节数据后,不直接操作,而是先查询指定的编码表,获取对应的文字,再对这个文字进行操作。所以,简单地说,字符流就是 字节流+ 编码表 。字符流是以字符为处理单位的。9 字节流的两个顶层父类(抽象基类):InputStream 和 OutputStream。10 字符流的两个顶层父类(抽象基类):Reader 和 Writer。11 对上述四个基类加以说明:由这四种基类派生出来的子类名称都是以父类的名称

4、作为子类名称后缀的。如 InputStream 的子类FileInputStream;Reader 的子类 FileReader 等。而且这些子类的前缀都代表了这些子类的功能。12 I/O 的核心类:InputStream 和 OutputStream 这两个都是抽象类,父类;所有的字节输入流的类都是 InputStream 的子类,所有的 字节输出流都是 OutStream 的子类。 其中两个常用的子类是 FileInputStream 和 FileOutputStream;这些类都是属于java.io.*;包的,使用前需要导入此包,import java.io.*; 子类 FileInpu

5、tStream 是用来读取硬盘中文件的数据,子类 FileOutputStream 是用来向硬盘中的文件写入数据。(5) read 会返回一个读取字节的个数,调用时有三个参数,当没有读到数据时,返回-1;write 也是三个参数。 (6 ) byte b 是比特类型的数组,off 是偏移量,len 是读取的最大长度。13 如果要操作文字数据,建议优先考虑字符流,因为字符流就是基于这个目的出现的。大文件读写,利用循环即可,判断依据是 read 方法的返回值,如果返回-1 说明读取结束。14 字符流:字符输入流 Reader 和 字符输出流 Writer;Reader 和 Writer都是抽象类,

6、就是用来让其他类继承的,但是都有几个构造方法,抽象类的构造方法是为子类创建对象初始化用的。子类是 FileReader 与 FileWriter;调用方法如同字节流,只是数组是字符数组了,如 Int read (char c ;int off ; int len); 字符流与字节流操作特别类似,只不过是字节数组和字符数组,读写方法的不同(-er) 。注意在读写之后要关闭读写方法。15 实验:将内存中的数据写到硬盘中指定的文件里。(1) 硬盘数据的基本体现就是文件,所以找到一个处理文件的类即可。(2) 创建一个可以向文件中写入字符数据的字符输出流对象;既然写数据,就必须在创建对象时就指定某个文件

7、(用于存储数据的目的地) ,也就是说这个输出流类不能有空参数的构造方法。(3) 利用 Writer 对象的 write 方法,写入数据。将数据写入到临时存储缓冲区中。利用 flush 方法进行刷新,可以将数据写到文件中。close 方法关闭流和关闭资源执行时,先进行刷新,将缓冲区中的数据写入到文件中。flush 和 close 就相当于保存命令和关闭命令,关闭命令执行之前会提醒是否保存。16 对文件操作时,如果文件不存在,就会创建此文件;如果文件存在,就会覆盖原来的数据(首先将原来数据清空,再写入新的数据) 。 如果需要续写原文件,可以在构造方法中加入 true。实现续写:FileWriter

8、(String fileName) Constructs a FileWriter object given a file name.FileWriter(String fileName, boolean append) Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written.17 实现换行:static final String LINE_SEPARATOR = System.getProperty(line.sep

9、arator);18 字符流的使用方法:相对于字节流,字符流也是有两个父类:字符输入流 Reader和字符输出流 Writer。其中常用的两个子类是:FileReader 和 FileWriter。这两个子类又有两个比较重要的方法:read()和 write(); 这两个方法与字节流的两个方法完全相似,差别仅在于输入参数一个是字节数组,一个是字符数组。 int read (char c ,int off, int len);void write(char c ,int off, int len);19 IO 流都需要抛出异常信息,而 try又是闭合的,所以一般都是在 try catch之外创建

10、一个空引用,如 FileWriter fw = null; 然后在 try 括号内对引用进行赋予对象。一般在 finally 语句中加入 close 方法,但是 close 方法需要单独再次 try catch ,以防关闭此文件时出现异常。20 读取文件。找到了类 FileReader。(1) 创建一个读对象,注意在生成读对象时,一定要指定一个要读取的文件,确实存在才可以,否则出现异常。(2)read 方法有几个,可以单个字符单个字符的读取,返回 int 类型的数,如果读完,则返回-1;还有个 read 方法读取字符串,返回读取字符个数,一次读取几个可以由字符数组的大小或者文件中是否生育多余字

11、符决定。21 节点流与处理流之间的关系:处理流是用来装饰节点流的,给节点流添加新的功能的。节点流就是被装饰者,而处理流就是装饰者。如 BufferedReader 就可以用来装饰 FileReader 的,不仅可以装饰 FileReader,而且可以装饰键盘读入,网络读入等等。2223 Java 中 io 系统中使用最多的就是装饰着模式。24 “装饰者”模式:装饰者和被装饰者,装饰者是给被装饰者添加新的功能的。25 处理流:ButteredReader ,方法 readLine,读取一行,当读到尾部的时候返回null。26 BufferedReader 介绍:public String rea

12、dLine() throws IOException /这是个读取一行的方法生成 BufferedReader 对象的方法:BufferedReader in = new BufferedReader(newFileReader(“文件路径”)) ;注:接收的是一个 Reader 类型的对象。27 大文件的读写方法:实例一字节流:/类的导入import java.io.*;class Test6public static void main(String args)/声明输入输出流的引用FileInputStream fil = null;FileOutputStream fos =null;

13、FileOutputStream fos2 = null;try/生成代表输入输出流的对象fil = new FileInputStream(g:/javalianxi/io/from.txt);fos = new FileOutputStream(g:/javalianxi/io/to.txt);fos2 = new FileOutputStream(g:/javalianxi/io/to2.txt);/生成一个字节数组byte buffer = new byte100;while(true)int temp=fil.read(buffer,0,buffer.length);if(temp

14、= -1)break;fos.write(buffer,0,temp);fos2.write(buffer,0,temp);/ fos.write(buffer,0,temp);/ String s = new String(buffer); /把字节型数组转换成字符串/ s = s.trim();/ System.out.println(s);/* for (int i =0;ibuffer.length;i+)System.out.println(bufferi);*/catch( Exception e)System.out.println(e);finallytryfil.close(

15、);fos.close();catch(Exception e)System.out.println(e);实例二字符流:import java.io.*;class Test7public static void main(String args)FileReader fr = null;FileWriter fw = null;tryfr = new FileReader(g:/javalianxi/io/from.txt);fw = new FileWriter(g:/javalianxi/io/to2.txt);char buffer = new char1024;while(true

16、)int temp = fr.read(buffer,0,buffer.length); if (temp = -1)break;fw.write(buffer,0,temp);catch(Exception e)System.out.println(e);finallytryfr.close();fw.close();catch(Exception e)System.out.println(e);28 作业: 将 c 盘中的一个文本文件复制到 d 盘中。复制原理:读取数据,粘贴:写数据。 连读带写。思路:(1) 读取数据源;(2)将读取的源数据写到指定位置。(1) 读取一个写一个:(2) 用数组作为缓冲区FileReader fr = null

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号