您的位置:首页 > 编程语言 > Java开发

Java I/O

2015-10-11 16:16 459 查看
I/O 

File类

File类定义了一系列与操作系统无关的方法来操作文件和目录。一个File对象可以代表一个文件,也可以代表一个目录。创建一个File类对象后,如果是目录,可以显示目录清单、新建或删除目录;如果是文件,可以查阅文件的属性和路径信息,也可以输出和改名。可以通过查阅API帮助文档了解更多的相关内容。

I/O系统的概念

在java编程中,I/O系统主要负责文件的读写,一般在运行程序时,java I/O程序将源磁盘、文件或网络上的数据通过输入流类的相应方法读入到内存中,然后通过输出流类的相应方法将处理完的数据写回目标文件、磁盘或网络资源指定位置。I/O系统的类库位于java.io包中,提供了全面的I/O接口,包括文件读写、标准设备输出等。java中I/O是以流为基础进行输入和输出,所有数据都要被串行化写入输出流,或者从输入流读入。

流的概念

流(Stream)是一个抽象的概念,代表一串数据的集合,当java程序需要从数据源读取数据时,就需要开启一个到数据源的流。同样,当程序需要输出数据要目的地时,也需要开启一个流。流的创建是为了方便的处理数据的输入和输出。

可以把数据流看作现实生活中的水流,每户人家中要用自来水,就需要在家和自来水厂之间接上一根水管,这样水厂的水才能通过水管流到用户家中。同样,要把河流中的水引导到自来水厂,也需要在河流和水厂之间接上一根水管,这样河流中的水才能流到水厂中去。所以说水管就相当于流,而水就相当于数据源。

在java程序中,要想获取数据源中的数据,需要在程序和数据源之间建立一个数据输入的通道,这样就能从数据源中获取数据。如果要在程序中把数据写到数据源中,也需要在程序和数据源之间建立一个数据输出通道。在程序中创建输入流对象时就会自动建立这个数据输入通道,而创建输出流对象时就会自动建立这个数据的输出通道。

java程序(读取数据)<--------输入流<--------数据源

java程序(写出数据)-------->输出流-------->数据源

流的分类

java中流可以按如下方式分类:

1>按数据流向

输入流:程序可以向其中读取数据的流

输出流:程序可以向其中输出数据的流

2>按数据传输的单位

字节流:以字节为单位传输数据的流(主要用于处理可直接读取bytes的数字)

字符流:以字符为单位传输数据的流(主要用于处理文本)

3>按流的功能

节点流:用于直接操作数据源的流

过滤流:也叫处理流,是对一个已存在流的链接和封装,来提供更为强大、灵活的读写功能

I/O流的使用
       抽象类
字节流       字符流

输入流  InputStream       Reader

输出流  OutputStream    Writer

InputStream和OutputStream都是以字节为单位的抽象流类,它们规定了字节流所有输入和输出的基本操作。InputStream和OutputStream抽象类不能直接使用,而是使用子类(具体类)完成不同的功能。

Reader和Writer类都是以字符为单位的抽象类。它们规定了所有字符流输入和输出的基本操作。Reader和Writer抽象类不能直接使用,而是使用子类(具体类)完成不同的功能。

I/O的具体类(实现类)

1>FileInputStream和FileOutputStream:是以字节为操作单位的文件输入流和文件输出流,利用这两个类可以对文件进行读写操作。

注意:FileInputStream读取中文字符会出现乱码,原因是在Unicode编码中,一个英文字符使用一个字节编码,而一个中文字符则是两个字节编码,而用字节流读取中文时,是一个一个字节读取,所以会出现编码错误。

注意:FileOutputStream往文件中写入的中午字符没有乱码,原因是程序先把中文字符转成了字节数组,打开文件时文件编辑器(如Windows记事本或其他工具)能自动识别中午字符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: