IO流(一)

IO流

IO,即in和out,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。

Java 中是通过流处理IO 的,那么什么是流?

流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道。

当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

一般来说关于流的特性有下面几点:

先进先出:最先写入输出流的数据最先被输入流读取到。
顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile除外)
只读或只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。

File类

1、 文件可认为是相关记录或放在一起的数据的集合。文件一般存放在存储介质上:硬盘、u盘、光盘、软盘、云盘等。(云管段)

2、 java.io.File 类是专门对文件进行操作的类。(只能对文件本身进行操作,不能对文件内容操作)

3、 File类是“文件和目录路径名的抽象表示”。而不是指文件的内容。

4、 File类定义了一些与平台无关的方法操作,如:创建、删除文件和重命名等。

5、 Java中目录被看成是一个特殊的文件。List()方法可以返回目录中所有的子目录和文件。

6、 在linux下路径分隔符为(/),而在windos中则是为(\),在java中可以正确的处理不同系统中的分隔符。

File : 代表文件或者目录对象

File类常用构造方法和属性

常用构造方法:

1、public File(Stringpathname)

以pathname为路径创建File对象,如果pathname是相对路径,则是相对于Java的系统属性user.dir中的路径。(对eclipse创建的java工程来说,就是该工程的根目录。)

属性:

2、public static finalString separator 存储了当前系统的名称分隔符

在 LINUX和Mac系统上,此字段的值为 /;在 Windows 系统上,它为 \.为了程序的跨平台特性,文件的路径应该用这个属性值来代表。

3、public static finalchar pathSeparator 存储了当前系统默认路径分割符号

Windows系统是 ;; 即path环境变量中,不同的路径的分割符号。LINUX系统是::

什么是IO流

IO指的是Input/Output,IO流:输入输出流。 统称为数据流。(IO Stream)

在Java程序中,对于数据的输入 / 输出操作以流的方式进行;流是从起源到接收的有序数据。JDK提供了各种各样的流类,用以获取不同种类的数据;

IO流的分类

按流向分:

◦ 输入流:程序可以从中读取数据的流

◦ 输出流:程序能向其中写入数据的流

按数据传输单位分:

◦ 字节流:以字节为单位传输数据的流 (byte)

◦ 字符流:以字符为单位传输数据的流 (char)

按功能分:

◦ 节点流:用于直接操作目标设备的流

◦ 处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更强大、灵活的读写功能。

*字节流

FileInputStream: 输入流,负责读取数据

FileOutputStream: 输出流,负责写入数据

注意 :

1.字节流一般不用于读取字符数据文件,容量乱码。

2.字节流往往一般用于读取字节文件,例如:.class,图片,视频等多媒体文件

3.IO流对不会被垃圾回收器回收,需要手动close释放内存资源。

*字符流

FileReader : 输入流

FileWriter : 输出流

注意:千万不能用字符流读写字节数据文件

IO流的基类

分类

字节输出流

字节输入流

字符输出流

字符输入流

抽象基类

OutputStream

InputStream

Writer

Reader

访问文件

FileOutputStream

FileInputStream

FileWriter

FileReader

访问数组

ByteArrayOutputStream

ByteArrayInputStream

CharArrayWriter

CharArrayReader

访问管道

PipedOutputStream

PipedInputStream

PipedWriter

PipedReader

访问字符串

StringWriter

StringReader

缓冲流

BufferedOutputStream

BufferedInputStream

BufferedWriter

BufferedReader

转换流

OutputStreamWriter

InputStreamReader

对象流

ObjectOutputStream

ObjectInputStream

抽象基类

FilterOutputStream

FilterInputStream

FilterWriter

FilterReader

打印流

PrintStream

PrintWriter

推回输入流

PushbackInputStream

PushbackReader

特殊流

DataOutputStream

DataInputStream

InputStream字节输入流

继承自InputStream的流都是用于向程序中输入数据的,且数据的单位为字节(8位)

InputStream基本方法:

public abstract int read() throwsIOException

从输入流中读取数据的下一个字节, 返回读到的字节值.若遇到流的末尾,返回-1

public int read(byte[] b) throwsIOException

从输入流中读取 b.length 个字节的数据并存储到缓冲区数组b中.返回的是实际读到的字节总数

public int read(byte[] b, int off, int len)throws IOException

读取 len 个字节的数据,并从数组b的off位置开始写入到这个数组中

public void close() throws IOException

关闭此输入流并释放与此流关联的所有系统资源

public int available() throws IOException

返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数

public skip(long n) throws IOException

跳过和丢弃此输入流中数据的 n 个字节,返回实现路过的字节数。

OutputStream字节输出流

继承自OutputStream的流是程序用于向外输出数据的,且数据的单位为字节(8位)

OutputStream主要方法:

public abstract void write(int b) throwsIOException

将指定的字节写入此输出流

public void write(byte[] b) throwsIOException

将 b.length 个字节从指定的 byte 数组写入此输出流

public void write(byte[] b, int off, intlen) throws IOException

将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流

public void flush() throws IOException

刷新此输出流并强制写出所有缓冲的输出字节

pulbic void close() throws IOException

关闭此输出流并释放与此流有关的所有系统资源

Reader字符输入流

继承自Reader的流都是用于向程序中输入数据的,且数据的单位为字符(16位)

read的主要方法:

public int read() throws IOException

读取单个字符,返回作为整数读取的字符,如果已到达流的末尾返回-1

public int read(char[] cbuf) throwsIOException

将字符读入数组,返回读取的字符数

public abstract int read(char[] cbuf,int off, int len) throws IOException

读取 len 个字符的数据,并从数组cbuf的off位置开始写入到这个数组中

public abstract void close() throwsIOException

关闭该流并释放与之关联的所有资源

public long skip(long n) throwsIOException

跳过n个字符。

Writer字符输出流

继承Writer的流都是向程序中输出数据,且数据的单位为字符(16 bit)

public void write(int c) throwsIOException

写入单个字符

public void write(char[] cbuf) throws IOException

写入字符数组

public abstract voidwrite(char[] cbuf, int off, int len) throws IOException

写入字符数组的某一部分

public void write(String str) throwsIOException

写入字符串

public void write(String str,int off, int len) throws IOException

写字符串的某一部分

public abstract void close() throwsIOException

关闭此流,但要先刷新它

public abstract void flush() throwsIOException

刷新该流的缓冲,将缓冲的数据全写到目的地

  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值