Java IO类操作

Java IO 详解

IO简单来说就是input和output,输入和输出。在Java的API中,可以从其中读入一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称作输出流。这些字节序列的来源地和目的地可以是文件,也可以是网络连接,甚至是内存块。

IO流分为字符流和字节流,至于二者之间的区别是什么,这里就不详细介绍了,可以自行百度 ^_^
下图是IO流对象的继承关系,这里只是几个比较常用的继承关系,还有一些没有列举出来。其中InputStream、OutputStream、Reader、Writer是抽象类。
这里写图片描述
了解了这些类之间关系后开始进行实际的代码操作。

字符流的操作

    Reader、Writer类的抽象方法

    abstract int read()
    abstract void write(int c)

    read方法将返回一个Unicode码元(0-65535之间的整数)
    或者在碰到文件结尾时返回-1。write方法在被调用的时候
    需要传递一个Unicode码元
  1. 控制台读取字符
    使用BufferedReader类绑定从控制台传入的字符流
        char c;
        //System in 表示控制台输入
        BufferedReader br = new BufferedReader(
                new InputStreamReader(System.in));
        System.out.println("请输入字符,按q退出");
        do{
            c = (char) br.read();//读取字符
            System.out.println(c);
        }while (c != 'q');

结果如下
这里写图片描述
读取字符串和上述的操作类似将read方法换成readline(),但是方法是阻塞式的, 如果到达流末尾, 就返回null,数据类型更换一下即可。

字节流的操作

    InputStream类抽象方法:

    abstract int read()
    这个方法将读入一个字节,并返回读入的字节,或者在遇到输入源结尾时返回-1。

    int read(byte[] b)
    读入一个字节数组,最多读入b.length个字节

    int read(byte[] b, int off, int len)
    读入一个字节数,off为读入字节应被放置的位置在b中的偏移量
    len为读入字节的最大数量

    OutputStream的方法和InputStream相同就是数据的流向相反

1. 实现图片的复制(二进制文件)

        //创建两个文件流,包括输入和输出的
        FileInputStream p1 = new 
        FileInputStream("C:\\Users\\dell\\Desktop\\原图.jpg");
        FileOutputStream p2 = new 
        FileOutputStream("C:\\Users\\dell\\Desktop\\复制图.jpg");
        //将流存入Buffered流中
        BufferedInputStream in = new BufferedInputStream(p1);
        BufferedOutputStream out = new BufferedOutputStream(p2);

        int temp = 0;
        //判断是否独到了文件的末尾
        while ((temp = in.read())!= -1){
            out.write(temp);
        }
        out.flush();//进行缓存的清除
        in.close();
        out.close();

结果如下,可以看到图片复制成功,也相当于是按字节读取文件。当然对文本文件进行操作也可以哒
这里写图片描述

注意:Buffer的方法相当于是该流的缓冲区。可以提高读写效率
当完成对流的读写后,应通过close的方法来关闭它们,这个调用会释放掉十分有限的
操作系统资源。如果一个应用程序打开了过多的流没有关闭,那么系统资源将被耗尽。
关闭一个输出流的同时还会冲刷用于该输出流的缓冲区,当然我们还可以用flush的
方法人为地冲刷这些输出。

2. 文件的读取

        File f1 = new
                File("C:\\Users\\dell\\Desktop\\test.txt");
        //读入缓存区
        BufferedReader in = new BufferedReader(new FileReader(f1));
        String temp = null;
        //判断是否独到了文件的末尾
        while ((temp = in.readLine())!= null){
            System.out.println("line" + temp);
        }
        in.close();

文本内容
这里写图片描述
结果如下
这里写图片描述
3. 文件的写入

        String describe = "我是一个小学生";
        //创建file对象,创建路径
        File f1 = new
                File("C:\\Users\\dell\\Desktop\\newfile.txt");
        //判断文件是否存在,不存在直接创建

        if(!f1.exists()){
            f1.createNewFile();
        }
        //在这里要将File类转成FileWriter
        FileWriter fw = new FileWriter(f1);

        BufferedWriter bw = new BufferedWriter(fw);

        bw.write(describe);

        bw.close();

结果如下,文件写入成功
这里写图片描述

总结:

主要能学习IO操作中都含有哪些基础的类,对这些基本的类操作要熟练,文件的读写复制等等在这里对文件的操作只使用了Buffer的类进行操作,其实还可以有很多种,像FileOutPutStream、PrintWriter、PrintReader等。感兴趣的可以自己动手实现,都很简单,慢慢积累,多加练习!

猜你喜欢

转载自blog.csdn.net/random0815/article/details/79502501