【Java笔记】01-关于IO流

有关Java中的IO流

一、IO概述

1.1 基本概念-IO

I-Input;O-Output; IO流就是通过内存对硬盘上的文件进行读写,输入是指将硬盘上的文件写入内存中;输出指的是将内存中的数据“放入”硬盘中;在Java中所有的流均存在于:java.io.*;包下。

1.2 IO的分类

1.2.1 IO的分类

Java中的流分类有多种方式:
①按照流的方向分类:
输入流(Input);
输出流(Output)。
②按照操作数据方式不同进行分类:
字节流:一次读取1个字节byte(8个二进制位),是一种万能流,可以操作任何类型的文件;
字符流:一次读取1个字符,专门用来读取普通纯文本文档而存在的,无法读取图片、声音…

1.2.2 Java中的IO流都有哪些?

1)Java中IO流有四大抽象类,分别是:
①以Stream结尾的字节流:
java.io.InputStream;
java.io.OutputStream;

②以Reader或者Writer结尾的字符流:
java.io.Reader;
java.io.Writer;

2)需要了解的流:
①文件专属流
java.io.FileInputSteam
java.io.FileOutputSteam
java.io.FileReader
java.io.FileWriter

②转换流
java.io.InputStreamReader
java.io.OutputStreamReader

③缓冲流专属
java.io.BufferedReader
java.io.BufferWriter
java.io.BufferInputStream
java.io.BufferOutputStream

④数据流专属
java.io.DataInputStream
java.io.DataOutputStream

⑤标准输出流
java.io.PrintWriter
java.io.PrintStream

⑥对象专属流
java.io .ObjectInputStream
java.io.ObjectOutputStream

1.2.3 Java中IO流的特征

1)所有的流均实现了Closeable接口,均有close()方法,因此流都是可关闭的,用完流一定要关闭流,否则资源占用很严重。
2)凡是输出流均实现了Flushable接口,均是可刷新的,都有flush()方法,当使用了输出流之后一定要调用此方法刷新输出流,这个方法是会强制将流里的数据全部输出,清空管道;如果不使用这个方法,有可能导致数据丢失。

二、有关Java中的FileInputStream及FileOutputStream

以字节的形式操作文件,万能的流,可以操作任何格式的文件。

2.1 FileInputStream-文件字节输入流

2.1.1 构造方法:
//创建字节输入流对象
FileInputStream fis = null;
try {
    fis = new FileInputStream("C:\\Users\\wanli\\Desktop\\en.txt");
    int readCount = 0;
    while ((readCount = fis.read()) != -1){
        System.out.print(readCount + " ");
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        fis.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
2.1.2 其他方法

①int read()——从此输入流中读取一个字节,并返回该字节,若到达文件末尾无数据可读返回-1;
以此方法读取文件效率很低,一次只能读取一个字节,当读取大数据量的时候内存与硬盘交互频繁。(很少使用)

②int read(byte[] b)——一次读取b.length个字节,效率比上面的方法高。返回值为读取到的字节数量。这个读取的时候,若在最后一次读取字节数量a小于b.length,那么其实b中只有前a个元素被覆盖,a+1及后面的元素均不变。当无数据可读时,返回-1。
利用第二种方法读取的时候,可以用String类的构造方法将byte型的数组转换成字符串输出。示例:

fis = new FileInputStream("C:\\Users\\wanli\\Desktop\\en.txt");
//准备一个一定长度的byte数组
byte[] bytes = new byte[4];
//声明一个变量用来存储每一次读取的字节数量,并控制new String方法
int readCount = 0;
while ((readCount = fis.read(bytes)) != -1){
    String s = new String(bytes, 0 ,readCount);
    System.out.print(s);
}

③int available()——返回剩余的能够读取的字节数量;用法:可以在读取文件前,先获取其总字节数量,然后直接声明byte[]数组的长度为这个方法的返回值,就不需要用循环了。这种方式不太适合太大的文件,因为byte[]数组不能太大。

2.2 FileOutputStream-文件字节输出流

未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值