Java之IO流

导读:本篇文章讲解 Java之IO流,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录:

一、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命令来查看/修改能够支持的最大文件个数。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/94447.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!