Java之IO流

目录:

一、IO流介绍

二、案例

7cd05abe549742f0a2376556538455c4.png

 

一、IO流介绍

在java中,操作文件(读写)是通过IO流相关的类来实现的。

在java标准库中,对于IO的操作提供了很多现成的类,这些类都放在了java.io这个包里。

标准库中的这些类,大概可以分成两类:

一大类是操作字节的(以字节为单位进行读写)

一大类是操作字符的(以字符为单位进行读写)

字节-8个比特位,表示存储空间的基本单位;字符,表示一个“文字符号”,一个字符是由多个字节构成的。因为就需要根据文件类型,来决定是按照字节来操作还是按照字符来操作。有的文件是二进制文件,需要按照字节来操作;有的文件是文本文件,需要按照字符来操作。

那么怎么去区分一个文件是文本还是二进制文件呢?

一个特别简单粗暴的办法就是:使用记事本打开,看看文件里面的内容是不是乱码的,如果是乱码的,则是二进制文件;如果不是乱码的,则是文本文件的。因为记事本是默认按照文本的方式来打开解析文件的。

针对字节为单位进行读写的类,统称为“字节流”。

字节流:InputStream、FileInputStream、OutputStream、FileOutputStream

其中InputStream和FileInputStream是用来读取数据的,即输入;OutputStream和FileOutputStream是用来写入数据的,即输出。FileInputStream和FileOutputStream是专门用来操作文件的,他们是一个类,分别实现了InputStream和OutputStream的接口;InputStream和OutputStream是一个更抽象的接口,既可以操作文件,也可以操作网络相关的等等。

针对字符为单位进行读写的类,统称为“字符流”。

字符流:Reader、FileReader、Writer、FileWriter

其中Reader和FileReader是用来读取数据的,即输入的;Writer和FileWriter是用来写入数据的,即输出的。

二、案例

public class TestFile {
    public static void main(String[] args) throws IOException {
        //把一个文件的内容读取出来,写入到另一个文件中
        String srcPath = "d:/code/test1.txt";
        String destPath = "d:/code/test2.txt";

        //这个代码用来打开第一个用来读数据的文件
        FileInputStream fileInputStream = new FileInputStream(srcPath);
        //这个代码用来打开第二个用来写数据的文件
        FileOutputStream fileOutputStream = new FileOutputStream(destPath);

        //循环的把第一个文件的内容按照字节读取出来,依次写入到第二个文件中
        while (true){
            //read方法依次返回的是一个字节(byte),但是实际上是使用int来接收的。
            //这样做的理由主要是两个方面:
            //1.java不存在无符号类型,byte这样的类型也是有符号的(有正负),byte表示的范围是 -128 - 127;
            //实际上在按照字节读取数据的时候,正负就没有意义了,期望读到的结果是无符号的数字
            //2.read如果读取完毕,文件读到末尾了,就会返回EOF(end of file),用-1来表示
            int ch = fileInputStream.read();
            if (ch == -1)break;
            fileOutputStream.write(ch);
        }
        //文件操作完毕之后,要关闭文件;如果忘记关闭,可能会引起“文件资源泄漏"
        fileInputStream.close();
        fileOutputStream.close();
    }
}

注意点1:当我们写了 FileInputStream 的时候,会出现受查异常,我们需要处理。但是我们在main方法上加上 IOException 的声明的时候,FileNotFoundException就不见了,同时上面变成灰色的了。

34ec171910894de99bdbe5fae88b8558.png

 这是因为 FileNotFoundException 也是一种 IOException (FileNotFoundException是IOException的子类),使用throws IOException就能覆盖FileNotFoundException。

注意点2:文件操作完毕之后,要关闭文件;如果忘记关闭,可能会引起“文件资源泄漏"。这是因为一个进程能够同时打开的文件个数是存在上限的,受限于操作系统内核里面的实现。对于Linux来说,进程PCB中存在一个属性,文件描述符表,其大小也是存在上限的。Linux中,可以通过ulimit命令来查看/修改能够支持的最大文件个数。

 

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crazy_xieyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值